①x-y变量空间(y=kx+b)-->k-b参数空间(b=y-kx)


②x-y变量空间-->ρ-θ参数空间(ρ=xcosθ+ysinθ)


总结:x-y坐标系的一条直线(y=kx+b)对应ρ-θ坐标系的一个点(ρ,θ),x-y坐标系的一个点(x,y)对应ρ-θ坐标系的一条曲线(ρ=xcosθ+ysinθ)。

2.Hough变换算法实现

step1. 在参数空间(ρ,θ)里建立一个二维矩阵H(ρ,θ),初始化为0,ρ和θ分别表示横纵坐标;

step2. 对XY空间中的每一个给定点做Hough变换,求出其参数空间对应的所有(ρ,θ)点,即曲线(ρ=xcosθ+ysinθ),其中ρ和θ取整型;

step3. 在参数矩阵H每个点H(ρ,θ)处累加1,即H(ρ,θ)的值表示参数空间在该点(ρ,θ)处线相交的直线数,即XY空间共线的点数;

step4. 参数矩阵H最大值对应的坐标(ρ,θ)代表XY空间直线方程的参数。

3.Hough变换应用于线检测

step1. 对图像进行Hough变换;

step2. 找出变换域中的峰值数据(相交直线最多的点);

step3. 根据峰值数据的坐标绘出对应直线。

4. MATLAB工具

step1. hough函数执行霍夫变换,得霍夫矩阵;

step2. houghpeaks函数在霍夫矩阵中寻找峰值点;

step3. houghlines函数得二值图像中的直线信息。

[H,theta,rho] = hough(BW) %二值图像的Hough变换-检测直线
--rho=x*cos(theta)+y*sin(theta)
--x-y坐标系的一条直线(y=kx+b)对应ρ-θ坐标系的一个点(ρ,θ),x-y坐标系的一个点(x,y)对应ρ-θ坐标系的一条曲线(ρ=xcosθ+ysinθ)
--BW:输入二值图像(提取边缘后的)
--H:输出一个参数空间矩阵(hough变换后的累加器矩阵),行坐标-theta,列坐标-ρ
--theta:x轴与向量ρ的夹角θ(-90°<θ<90°),线条y=kx+b本身的角度是θ+90°
--rho:原点到直线y-kx+b的垂直距离ρ

peaks = houghpeaks(H, NumPeaks) %确定Hough变换中的峰值,即参数矩阵中累加的最大值
peaks = houghpeaks(..., 'Threshold', val1, 'NHoodSize', val2)
--H:输入Hough变换获得的参数矩阵
--NumPeaks:设定保留的最大峰值个数
--peaks :输出矩阵peaks ,记录H中保留峰值的横纵坐标

lines = houghlines(BW, theta, rho, peaks) %基于Hough变换提取直线段
lines = houghlines(..., 'FillGap', val1, 'MinLength', val2)
--BW:输入二值图(提取边缘后的,hough变化的输入)
--theta,rho:hough变换的结果(ρ,θ)
--peaks:houghpeaks结果
--lines:输出结构数组(可能检测到多条直线),长度等于找到的线段数。lines结构数组成员:
-point1:向量[r1,c1],指定线段起点行列坐标
-point2:向量[r2,c2],指定线段终点行列坐标
-theta:此线段的霍夫变换参数θ
-rho:此线段的霍夫变换参数ρ

参考: ​​​​​​https://blog.csdn.net/didi_ya/article/details/111149724?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-111149724-blog-90215537.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3 https://blog.csdn.net/didi_ya/article/details/111149724?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-111149724-blog-90215537.pc_relevant_antiscanv2&spm=1001.2101.3001.4242.1&utm_relevant_index=3

MATLAB hough函数使用指南 : MATLAB 文档中心 - MathWorks 中国 icon-default.png?t=M4AD https://ww2.mathworks.cn/help/search.html?qdoc=hough&submitsearch=

,本人正在利用 Hough 变换 进行直线提取,现在已经对图像进行了分割和数学形态学的处理,可是在 Hough 变换 提取直线是怎么都不对,求一个正确的 Hough 变换 的程序!急啊!先谢谢各位了!附上经数学形态学处理后的照片。目的是把道路的两条边界线提取出来。 clear all close all I=imread('2220.jpg'); BW=im2bw(I); BW=edg
Hough 变换 图像处理 中,利用 Hough 变换 检测直线。 算法思路:一条直线可以用如下的方程来表示:y=kx+b,k是直线的斜率,b是截距。图像是一个个离散的像素点构成的,如果在图像中有一条直线,那也是一系列的离散点构成的。直线方程:y=kx+b,(x,y)就是点。我们转换下变成:b=-kx+y。就也可以把(k,b)看作另外一个空间中的点。其图像空间与参数空间的关系见图1。 在x-y图像空间中的...
1.https://www.zybuluo.com/lutingting/note/554459 2. 《数字 图像处理 的MATLAB实现(第二版)》, Rafael C. Gonzalez 3. MATLAB帮助文档 Hough 变换 于1962年由Paul Hough 提出,是一种使用表决方式的参数估计技术,其原理是利用图像空间和 Hough 参数空间的线-点对偶性,把图像空间...