关于图像分割和hough变换(14)

关于图像分割和hough变换(19_02_12学习进度)

关于hough变换边界连接的matlab实现

matlab提供了三个函数用于Hough变换连接边界,使用Hough函数可以对图像进行Hough变换,将直角坐标系变为极坐标,然后对极坐标尽心修正

之后使用houghpeak函数对图像进行峰值检测,检测出密集的交点

最后使用houghline函数对图像进行直线的连接

Hough变换的函数为Hough函数,调用方式为:

[H,theta,rho]=hough(BW,param1,val1,param2,val2)

其中,输入BW为已经经过边缘检测的二值图像。
param1是【ThetaResolution】参数,他代表角度θ的分辨率。
val1是param1的参数值,其默认数值是1。
param2是【RhoResolution】参数,它表示长度r的分辨率。
val2是param2的参数值,其默认数值是2。
函数返回矩阵H是经过Hough变换后r,θ坐标平面的图像;theta和rho反别表示r和θ轴,theta的范围是【-90,89】,它表示与垂直向下方向的夹角

hough函数的使用:

X=zeros(200,200);
X(50,50)=1;
X(150,150)=1;
X(50,150)=1;
X(150,50)=1;
X(100,100)=1;
X=im2bw(X);
[H,T,R]=hough(X,‘ThetaResolution’,1,‘RhoResolution’,10);
imshow(X,‘Border’,‘tight’),figure;
imshow(H,[],‘XData’,T,‘Ydata’,R,‘InitialMagnification’,‘fit’);
axis on,axis normal;

关于图像分割和hough变换(14)

原始图中设置了5各像素点,分别对应r,θ坐标平面的5条曲线,这五个点五成六条直线,水平方向的两条直线分别对应θ为-90°的两个点,垂直方向的两条直线对应θ为0°的两个点,两条斜线向直线由3分像素点连成,分别对应θ为±45°的最亮的一个点。

matlab进行峰值检测的函数为houghpeaks函数

调用方式为:

peaks=houghpeaks(H,numpeaks,param1,val1,param2,val2);

其中,函数输入H为Hought变换得到的H矩阵,他表示r,θ坐标的平面的图像。
numpeaks表示需要检测的峰值的数目。
param1为【Threshold】参数,它表示峰值的阈值,其默认数值为0.5*max(H(:))。
param2为【HNoodSize】参数,形式为[m,n],它表示以r,θ为坐标的若干峰值的坐标向量。

matlab进行线段连接的函数为houghlines函数

调用方式为:

line=houghlines(BW,theta,rho,peaks,param1,val1,param2,val2)

其中,函数输入BW是Hough变换前的二值图像。
theta、rho为Hough函数的到的r和θ轴。
peaks为由houghpeaks函数得到的峰值点坐标向量,
param1为【FillGap】参数,表示组成直线的成分之间可以有几个像素的空缺。
param2为【MinLength】参数,表示直线的长度至少需要多少个像素,长度小于该数值的实现都被忽略,
函数返回值lines为一个结构体向量,其向量长度为函数得到的直线段的数目,每个结构体都有四个域,分别是:
point1(直线段起点直角坐标系坐标)
point2(直线段终点直角坐标系坐标)
theta(直线段极坐标系r)
rho(直线段极坐标系θ)

上述三个函数中共有
【ThetaResolution】【RhoResolution】【numpeaks】【Threshold】【NHoodSize】【FillGap】【MinLength】
七个参数可设置,作用于能够hough变换得到理想的直线

关于Hough变换的理论部分已经基本完成,之后将尝试使用matlab尝试各个参数的使用