①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 中国
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
参数空间的线-点对偶性,把图像空间...