Извлечение координат отдельных сегментов линии из граничного изображения — MATLAB

#matlab #image-processing #matlab-figure

#matlab #обработка изображений #matlab-рисунок

Вопрос:

У меня есть скрипт MATLAB, который дает мне граничные линии изображения, используя bwboundaries() .
Теперь, после построения этого изображения, я получаю полное изображение, сформированное из различных сегментов прямой линии.
Я хотел бы получить координаты или показать отдельные сегменты линии, которые образуют границу.

Я думаю, что этот метод называется цифровой прямолинейностью линий, но я хочу знать, как применить его здесь в этом случае.

 [B,L,N] = bwboundaries(z,'noholes');
  for k=1:length(B),
     boundary = B{k};
     if(k > N)
       figure, plot(boundary(:,2),boundary(:,1),'g','LineWidth',2);
     else
       figure, plot(boundary(:,2),boundary(:,1),'r','LineWidth',2);
     end
end
  

Ответ №1:

Согласно моему пониманию вашего вопроса, моя идея состоит в том, чтобы использовать bwtraceboundary() .

 BW = imread('image.png');
imshow(BW,[]);
r = 165;   % you can get the r and c for your image using "impixelinfo"
c = 43;
contour = bwtraceboundary(BW,[r c],'W',4,Inf,'counterclockwise');
hold on;
plot(contour(:,2),contour(:,1),'g','LineWidth',2);
x=contour(:,2)'
y=contour(:,2)'
  

Я отвечаю на ваш вопрос?

Ответ №2:

Используйте regionprops('desired feature') на помеченном изображении.

Для создания помеченного изображения используйте

bwlabel(Img) (высокое использование памяти)

или

bw=bwconncomp(Img,conn) (низкое использование памяти)

затем

labelmatrix(bw)

Вероятно, лучшим способом продолжения было бы использовать a Hough Transform , чтобы сначала получить представление о линиях, присутствующих на изображении. Вы можете поиграть с Hough Transform извлечением конечных точек линий.

Комментарии:

1. У меня уже есть граничное изображение. regionprops() здесь не помогло бы, поскольку мне нужно сегментировать граничное изображение на составляющие его линейные сегменты.

2. @KanishkaGanguly Прошу прощения за мой плохой ответ. Поскольку ваши границы были прямыми отрезками, я предполагаю, что они regionprops('ConvexHull') дадут вам требуемые координаты. Я попробовал и обнаружил, что заданы только приблизительные граничные координаты.

3. @KanishkaGanguly Я отредактировал свой ответ, надеюсь, это поможет.