Обнаружение параллельных линий с использованием преобразования Хафа в Matlab - PullRequest
0 голосов
/ 18 мая 2018

Предположим, что есть бинарное изображение черного фона и «нанесенных» на него белых линий, то есть они не сгорели на изображении.Например:

enter image description here

Мне нужно сохранить только линии, параллельные по крайней мере одной из других линий на рисунке.Если не совсем параллельно, по крайней мере достаточно близко, чтобы быть параллельным (возможно, в этом поможет переменная, которая может контролировать степень параллелизма).Другими словами, если я выберу определенную линию, и у нее будет одна или несколько параллельных ей линий, я сохраню ее, в противном случае я ее отбрасываю.Мне нужно сделать это для всех строк изображения.

Я наткнулся на Преобразование Хафа , но у меня возникли проблемы с пониманием, как использовать ячейки для проверки ориентации и определения параллельных линий.Или есть лучший способ сделать это?

Кроме того, поскольку линии не являются частью изображения и просто нанесены на него, у меня нет изображения для подачи в функцию Hough Transform.Могу ли я использовать выходные данные функции графика в качестве входных данных напрямую?Вот код, который я написал для построения белых линий:

Location1 - это матрица размером 2 на 2, которая содержит координаты для рисования линий.

figure; imshow(blackImage); 
hold on ;
for i=1:size(Location1,1)-1
   h = plot([Location1(i,1) Location1(i+1,1)], [Location1(i,2) Location1(i+1,2)]) ;
   set(h,'linewidth', .1, 'color', 'b') ;
end

Любая помощь будетбыть оцененным.

1 Ответ

0 голосов
/ 18 мая 2018

Учитывая, что

for i=1:size(Location1,1)-1
   % one line = Location1(i,:) to Location1(i+1,:)
end

, тогда

theta = atan2(diff(Location1(:,2)),diff(Location1(:,1)));

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

theta = mod(theta,pi/2);

Теперь theta находится в диапазоне [-π / 2, π / 2].

Чтобы найти похожие углы:

[s,i] = sort(theta);
k = find(diff(s)<0.01); % diff(s) is always positive because s is sorted
i = i([k,k+1]);
theta(i) % <-- sets of similar angles
% Location1(i,:),Location1(i+1,:) <- corresponding lines
...