Я пытаюсь найти все прямые (вертикальные или диагональные) изображения с помощью Matlab. Проблема в том, что она включает в себя любую линию даже горизонтальных линий. это мой код. Как я могу обнаружить все прямые линии на изображении ниже (они могут быть между 45 и 115 градусами)?Как определить линии в определенном диапазоне углов с помощью преобразования Hough
function [linesnum, avg]= hh(inp_file,tresh)
I = imread(inp_file);
BW = edge(I,'canny');
% [H,T,R] = hough(BW,'Theta', 45:0.5:90); % it has no efect
[H,T,R] = hough(BW);
P = houghpeaks(H,300,'threshold',ceil(0.3*max(H(:))));
lines = houghlines(BW,T,R,P,'FillGap',10,'MinLength',30);
if (do_plot)
figure, imshow(I), hold on
x = T(P(:,2));
y = R(P(:,1));
plot(x,y,'s','color','black');
end
max_len = 0;
linesnum = 0;
sumLen = 0;
for k = 1:length(lines)
xy = [lines(k).point1; lines(k).point2];
vert = xy(1,1)==xy(2,1);
if (do_plot)
plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');
% Plot beginnings and ends of lines
plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');
end
len = norm(lines(k).point1 - lines(k).point2);
sumLen = sumLen + len;
linesnum = linesnum +1;
end
avg = sumLen/linesnum;
end
Это образец изображения:
Существует аналогичный question для обнаружения сетки, но это, кажется, в этом вопросе они полагаются на отверстиях сетку, чтобы определить шаблон сетки и ее ориентацию, в то время как мой вход отличается.
Ваш вопрос связан с отмеченным дубликатом. Посмотрите на ответ Амро для понимания. – rayryeng
@rayryeng Кажется, что в этом вопросе они полагаются на отверстия сетки, чтобы обнаружить шаблон сетки и ее ориентацию, в то время как мой ввод отличается от другого. – Ahmad
Сначала вам нужно выполнить обнаружение края, что вы уже делаете. Я все равно попытаюсь сделать то, что они делают. Если это действительно не сработает, я подумаю о повторном открытии. – rayryeng