霍夫变换检测直线--原理和Matlab实现
来源:互联网 发布:ipaf看书软件 编辑:程序博客网 时间:2024/05/16 14:09
该博客所需代码和资源文件可以到Github中进行下载。霍夫变换本质上是坐标变换,如下图1,左半部分表示直线的xy空间,直线方程为y=mx+c ,其中斜率为m,截距为c。右半部分表示将直线从xy空间变换到mc空间,取直线在xy空间上的四点1,2,3,4,在mc空间就是不同斜率和截距的四条直线。
图1 直线坐标系变换
那么,在mc空间中四条直线的交点处的m值和c值就对应xy空间中直线的m和c。同理,对图片中的直线来说,将直线中的每个点都变换到变换后空间,找出多条直线相交的点就可以找出变换前空间的直线。
图1是为了更好理解坐标变换的概念,但是在实际应用中是将xy空间变换到极坐标系,方程为
图2 直线的极坐标系参数
其中r,即
下图3为测试图像,是一张简单但是有代表性的图像。
图3 测试图像
以下代码先根据canny算子找出图片的边缘,将图片边缘经过霍夫变换,变换到
img = imread('line.jpg');subplot(221), imshow(img), title('original image');img_gray = rgb2gray(img);% the canny edge of imageBW = edge(img_gray,'canny');subplot(223), imshow(BW), title('image edge');% the theta and rho of transformed space[H,Theta,Rho] = hough(BW);subplot(222), imshow(H,[],'XData',Theta,'YData',Rho,'InitialMagnification','fit'),... title('rho\_theta space and peaks');xlabel('\theta'), ylabel('\rho');axis on, axis normal, hold on;% label the top 5 intersectionsP = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));x = Theta(P(:,2)); y = Rho(P(:,1));plot(x,y,'*','color','r');
边缘信息和相应的霍夫变换结果如下图4。图4 霍夫变换结果
上述代码找到了5条直线对应的
% find lines and plot themlines = houghlines(BW,Theta,Rho,P,'FillGap',5,'MinLength',7);figure, imshow(img), hold onmax_len = 0;for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','r');end
最终结果如下图5。图5 霍夫变换最终结果
参考网址
http://www.cnblogs.com/smartvessel/archive/2011/10/20/2218654.html
http://blog.csdn.net/jia20003/article/details/7724530
0 0
- 霍夫变换检测直线--原理和Matlab实现
- Matlab实现——霍夫变换直线检测
- 霍夫变换直线检测的matlab实现
- Hough变换 直线检测原理及其Matlab实现
- 霍夫变换的直线检测原理和注意事项
- 霍夫变换检测直线原理分析
- Hough变换直线检测的MATLAB实现
- 霍夫变换 ( Hough Transform) 直线检测(Matlab 源码)
- 利用霍夫变换做直线检测的原理及OpenCV代码实现
- 霍夫变换直线检测及原理理解
- 霍夫变换(Hough Transform)直线检测原理
- 霍夫变换直线检测
- 霍夫变换检测直线
- 霍夫变换检测直线
- 霍夫变换检测直线
- 霍夫变换-检测直线
- 霍夫变换 检测直线
- Matlab 使用Hough霍夫变换进行直线检测+寻找最长直线
- Hdu 1757 A Simple Math Problem【矩阵快速幂】
- 安卓studio导入项目步骤详解
- leetcode--Reverse Integer
- The Swift Programming Language学习笔记 (二)——基础部分
- cudnn 安装说明
- 霍夫变换检测直线--原理和Matlab实现
- [POJ 1741]Tree
- [poj2406]Power Strings(kmp求最小循环节)
- How to reboot the system by apk
- ZOJ1074
- linux下测试python程序执行时间
- 文章标题
- 蓝桥杯 PREV-31 小朋友排队
- Matlab中的函数句柄@