【问题标题】:MATLAB: can't get houghlines to detect even a simple line?MATLAB:连一条简单的线都无法检测到水平线?
【发布时间】:2016-12-06 12:30:49
【问题描述】:

我正在学习 houghhoughlines 如何在 MATLAB 中工作,但即使对于我在 Paint 中绘制的 simple line,我似乎也无法使函数文档中的示例代码正常运行。

这是我正在使用的代码:

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; 反转图像,但后来我只得到离框架很远的一条线......

【问题讨论】:

    标签: matlab image-processing line hough-transform


    【解决方案1】:

    对于 houghlines,第一个输入是 BW 而不是 H。在代码中使用 ~BW 使线条变为白色,背景变为黑色。通过这些更改,您的代码应该可以正常工作。

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

    【讨论】:

    • 天哪,我不敢相信我没有注意到这一点!非常感谢您指出;我想这是您一遍又一遍地阅读的错误之一,直到几天后您以全新的思维意识到这一点。无论如何,你为我节省了一些拉头发的时间:D
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 2012-08-18
    • 1970-01-01
    • 2020-09-05
    • 2020-08-10
    • 2013-09-17
    相关资源
    最近更新 更多