2016-12-06 11 views
1

Я изучаю, как hough и houghlines работают в MATLAB, но я не могу заставить код примера, найденный в документации функции, корректно вести себя даже для simple line. Я рисовал Paint.MATLAB: не может получить houghlines, чтобы обнаружить даже простую линию?

Вот код, который я использую:

clear all; clc; close all 

I = imread('lines2.png'); 
BW = im2bw(I); 
[H,T,R] = hough(BW,'Theta',-90:0.1:89.99,'RhoResolution',1); 
P = houghpeaks(H,2); 

lines = houghlines(H,T,R,P,'FillGap',10,'MinLength',1); 
figure, imshow(I), hold on 
for k = 1:length(lines) 
    xy = [lines(k).point1; lines(k).point2]; 
    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 

Я получаю this результат (концы линий лежат за пределами самого изображения). Кто-нибудь еще может воспроизвести его?

Я попытался изменить параметры для hough, но ни один из моих тестов не дал ожидаемого результата. Фактически, установка параметра параметра 'Theta' на 1 приводит к тому, что линия не получается справа. Я также попытался инвертировать изображение с BW=~BW;, но затем я получаю только строку, очень удаленную от рамки ...

ответ

2

Для houghlines первый вход - BW не H. Используйте ~ BW в своем коде, который делает линию белой и черный фон. С этими изменениями ваш код должен работать правильно.

lines = houghlines(BW,T,R,P,'FillGap',10,'MinLength',1); 
+0

О, Боже, я не могу поверить, что не заметил этого! Большое вам спасибо за указание на это; Я предполагаю, что это одна из тех ошибок, которые вы только что прочитали снова и снова, пока не поняли несколько дней со свежим умом. В любом случае, вы спасли меня некоторое время при волочении: D – yuyu2809