基于Matlab的霍夫直线检测问题的解决

来源:互联网 发布:多益网络的创始人徐波 编辑:程序博客网 时间:2024/04/30 16:09

做直线检测这块的,肯定绕不开霍夫,百度上也是各种各样有关霍夫的教程详解什么的,但是个人感觉好多人都没有把霍夫吃透理清。纯粹是为了使用霍夫而强行使用罢了。对大牛们还说,可能这不算什么,但是对入门小白还说,难免会有各种各样的问题。


比如在参数选取上面的一些问题,可能导致难以让人满意的结果。比如一些语句的错误使用可能导致程序直接无法运行。


就最近在直线检测问题上遇到的一些问题,我写下这篇博客,希望可以给将来入门的萌新一点小小的帮助。


1.霍夫直线检测的参数选取问题

先贴上一段代码:

clcsrc=imread('1.jpg');figure(33),imshow(src);src=rgb2gray(src);thresh=[0.01,0.17];sigma=5;    %%%%%定义高斯参数f=edge(double(src),'canny',thresh,sigma);figure(1),imshow(f,[]);title('canny 边缘检测');[H,theta,rho]=hough(f,'RhoResolution',0.1);%imshow(theta,rho,H,[],'notruesize'),axis on,axis normal%xlabel('\theta'),ylabel('rho');peak=houghpeaks(H,9);hold onlines=houghlines(f,theta,rho,peak);figure,imshow(f,[]),title('Hough Transform Detect Result'),hold onimshow(src);hold onfor k=1:length(lines)    xy=[lines(k).point1;lines(k).point2];    plot(xy(:,1),xy(:,2),'LineWidth',2,'Color',[0 0 1 ]);end

这段代码,是用来检测十分简单的图片的,纯粹是我用来检测霍夫性能的代码

待检测图片:


就是简单的矩形图

刚开始检测的结果是这样的


canny边缘检测图毫无问题,但是使用霍夫检测之后就出现了巨大的问题。当时我在想可能霍夫函数的参数设置,没设置好,导致的。然后我更改了hough函数中的RhoResolution和ThetaResolution两个变量。但是显示效果还是不好。


我在这个卡了好久,一直想不通哪儿出了问题。后来甚至想着是不是hough函数使用不对。最后干脆一了百了,改了所有参数,包括canny检测函数的参数。最终真相大白!


原来是canny边缘检测函数的参数设置影响了最终的直线检测效果!


后来思索了一下,hough直线检测是建立在边缘检测的基础上的,如果你的基础边缘检测不行,直线检测肯定也不行。


这里面存在的一个大坑就是边缘检测的图线,人眼看上去没太大问题,但是对hough函数来说可能是致命的。

附上最终的检测效果图:


阅读全文
1 0