Как согласовать конечные точки границ в Matlab? - PullRequest
1 голос
/ 08 марта 2019

У меня есть изображение с 2 краями

если я затем нанесу границу ребер с кодом ниже:

imshow(I); hold on; [B,L,N] = bwboundaries(I);
for k=1:length(B),
    boundary = B{k};
    BL=size(boundary);
    plot(boundary(1,2), boundary(1,1), '*g','MarkerSize',15);
    for j=1:10:BL(1)
        plot(boundary(j,2), boundary(j,1), '.r','MarkerSize',5);
    end

end

Как видно на изображении выше, начальная точка (зеленая звезда) для левого края находится на левой стороне изображения, что я и ожидал. Тем не менее, отправная точка для правого края находится к середине

Очевидно, это потому, что bwboundaries имеет дело с отслеживанием объектов по часовой стрелке, тогда как 2-й край должен быть отслежен против часовой стрелки, чтобы он начинался и заканчивался на правой границе изображения

Как Matlab может занять позиции из bwboundaries и правильно определить конечные точки для ребра справа?

1 Ответ

0 голосов
/ 08 марта 2019

Не полный ответ на вашу проблему, но идея, которую я придумал.Вы можете проверить все точки границы на предмет их «близости» к границе изображения, а затем найти минимальные / максимальные значения (x, y), которые описывают те «концы», которые вас интересуют.

B = bwboundaries(img);

% Threshold for "closeness" to an image border.
thrNear = 5;

for k = 1:numel(B)

  b = B{k};

  nearTop = b(:, 1) < thrNear;
  nearBottom = b(:, 1) > (size(img, 1) - thrNear);
  nearLeft = b(:, 2) < thrNear;
  nearRight = b(:, 2) > (size(img, 2) - thrNear);

  closeToTop = b(nearTop, :)
  closeToBottom = b(nearBottom, :)
  closeToLeft = b(nearLeft, :)
  closeToRight = b(nearRight, :)

end

Например, для правильной фигуры в исходном изображении вы получите:

closeToTop = [](0x2)
closeToBottom = [](0x2)
closeToLeft = [](0x2)
closeToRight =

    79   283
    79   284
    79   285
    79   286
    79   287
    80   287
    81   287
    81   286
    81   285
    81   284
    81   283
   215   283
   215   284
   215   285
   215   286
   215   287
   216   287
   217   287
   217   286
   217   285
   217   284
   217   283

Теперь перейдите к максимальным значениям x (287) и найдите подходящее (не соседствующее)) y значения (79-81 против 215-217).Повторите это для каждой границы изображения.

Надеюсь, вы поняли мою идею.Если честно, я не хочу реализовывать это полностью, но не стесняйтесь спрашивать, не является ли мое описание недостаточно точным.

...