houghtranslation霍夫变换检测直线基本原理霍夫变换利用点和线之间的对偶性,将图像空间中直线上离散的像素点通过参数方程映射为霍夫空间中的曲线,并将霍夫空间中多条曲线的交点作为直线方程的参数映射为图像空间中的直线。给定直线的参数方程,可以利用霍夫变换来检测图像中的直线。平面上的直线可以用y=kx+q表示,(a)imagespace(b)houghspace图像空间中,同一直线上的点的斜率和截距相同,满足yi=kxi+q参数方程q=-xk+y直线对应于霍夫空间中的点(k,q)。(k',q')一个点的情况:图像空间中,一个点对应霍夫空间中的一条直线。(a)imagespace(b)houghspace过同一点的直线,在霍夫空间中所对应的点在一条直线上。(x1,y1)(a)imagespace(b)houghspace两个点的情况:霍夫空间中的交点,确定了一组参数(k,q)。将(k,q)代入直线方程y=kx+q,可以描述图像空间中过A,B两点的直线。y=kx+q(k,q)给定具体的三个点:图像空间中共线的点,在霍夫空间对应的直线相交于一点。(a)imagespace(b)houghspace(1,-1)y=x-1点和线的对偶性(1)图像空间中的点,对应霍夫空间中的直线。(2)图像中的直线,对应霍夫空间中的点。(3)共点的直线,在霍夫空间中对应的点在一条直线上。(4)共线的点,在霍夫空间中对应的直线交与一点。给定具体的五个点:(a)imagespace(b)houghspace选择由尽可能多直线汇成的点,如A和B。A,B确定了两组参数(k,q),代入直线方程y=kx+q,可以描述图像空间中对应的直线。(a)imagespace(b)houghtranslationy=x-1y=1特殊情况,(a)Imagespaceq=-2k+4q=-2k+3q=-2k+1(b)houghspacekqq=-xk+y无法确定图像空间中的垂线。转化为极坐标下的参数方程:x1cosθ=ρcos2θy1sinθ=ρsin2θx1cosθ+y1sinθ=ρ图像空间中的点,对应了霍夫空间中的曲线。曲线的交点确定了一组参数,能够描述图像空间中的特定直线。(1)给定参数方程,可以利用霍夫变换检测图像中的任何图形。(2)霍夫空间中,曲线的交点次数越多,所代表的参数越确定,画出的图形越饱满。matlab实现BW=imread('chepai.jpg');//1.二值化BW=im2bw(BW);//2.canny边缘检测thresh=[0.01,0.17];sigma=2;%定义高斯参数f=edge(double(BW),'canny',thresh,sigma);//3.霍夫变换[H,theta,rho]=hough(f,'RhoResolution',1);peak=houghpeaks(H,2);holdon//4.直线检测lines=houghlines(f,theta,rho,peak);figure,imshow(f,[]),title('HoughTransformDetectResult'),holdonfork=1:length(lines)xy=[lines(k).point1;lines(k).point2];plot(xy(:,1),xy(:,2),'LineWidth',4,'Color',[100]);end原图二值化canny边缘检测霍夫变换直线检测谢谢!