ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

霍夫变换(Hough Transformation)基本思想及MATLAB相关函数

2020-12-14 10:30:34  阅读:568  来源: 互联网

标签:直线 Hough lines Transformation 变换 BW MATLAB 坐标系


目录

一、Hough变换的基本思想

对于直角坐标系里的一条直线l,可用ρ,θ来表示该直线,相应的直线方程为 ρ = x c o s θ + y s i n θ ρ=xcosθ+ysinθ ρ=xcosθ+ysinθ,其中,ρ是原点到该直线的垂直距离,θ是垂线与x轴的夹角,这条直线是惟一的
构造一个参数(ρ,θ)的平面,从而(ρ,θ)平面的一点,对应一条直线。
在这里插入图片描述
【结论】:ρ,θ坐标系中的一个点对应x,y坐标系中的一条直线。而x,y坐标系中的一个点对应ρ,θ坐标系中的一组点(一条曲线),x,y坐标系中直线上的所有点在ρ,θ坐标系中对应的所有曲线交汇到一个点上。
在这里插入图片描述

二、算法实现

根据点-线对偶性把检测问题转换到参数空间,通过简单的累加统计完成检测任务。
1.在参数空间(ρ,θ)里建立一个2D累加数组A(ρ,θ),初始化为0;
2.对XY空间中的每一个给定点做Hough变换,让θ在[θminmax]区间取所有可能的值,并求出ρ;
3.根据ρ,θ取整数值在A(ρ,θ)处累加A(ρ,θ)=A(ρ,θ)+1,A(ρ,θ)的值说明多少点是共线的,最大值所对应的(ρ,θ)的值也对应了直线方程的参数。

如:
在这里插入图片描述
上图中,0表示零条直线穿过,1表示一条直线穿过,2表示两条直线穿过,3表示三条直线穿过,4表示四条直线穿过。
而累加器A中就存储了这样的信息。

三、MATLAB相关函数

3.1 hough

Hough变换
ρ = x ∗ c o s ( θ ) + y ∗ s i n ( θ ) ρ = x*cos(θ) + y*sin(θ) ρ=x∗cos(θ)+y∗sin(θ)

[H,theta,rho] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5) 
  • BW:m*n维二值图
  • RhoResolution:ρ的分辨率,缺省为1
  • ThetaResolution:θ的分辨率,θ的范围是[-90,90)
  • H:hough变换后的累加器矩阵,行数为m,列数为n
  • theta:θ
  • rho:ρ
    在这里插入图片描述

3.2 houghpeaks

确定Hough变换中的峰值

P=houghpeaks(H,2,'Threshold',15);
  • 找到Hough变换结果,累加容器H中所有大于阈值Threshold的峰值中,最大的2个峰值所在的位置P。
  • P为矩阵,记录H中被找到的峰值的横纵坐标。

3.3 houghlines

基于Hough变换提取直线段

P=houghlines(BW,theta,rho,P,'FillGap',5,'MinLength',7);
  • 二值图BW中对应指定(theta,rho),且容器中数值>峰值P的所有线段lines
  • 且线段最小长度大于MinLength
  • 线段间距离<FillGap的合并
  • lines为结构变量,(lines.point1,lines.point2)记录满足条件的线段端点

标签:直线,Hough,lines,Transformation,变换,BW,MATLAB,坐标系
来源: https://blog.csdn.net/didi_ya/article/details/111149724

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有