MATLAB使用hough变换函数输出[H,theta,rho]的具体含义

Hough 变换输出参数[H,theta,rho]的具体含义

F=imread('D:\Desktop\90.png');
f=rgb2gray(F);
[H,theta,rho] = hough(f)

输出[H,theta,rho]。

其中Theta 取值-90至89,为1×180的数组。

rho取值根据图片f的大小确定,如图片为400×400像素,则rho取值-(400^2+400^2)^0.5至(400^2+400^2)^0.5,即图片的对角线长度,为1×1131的数组。

Theta,rho仅为hough变换的坐标取值。hough变换的结果储存于输出的H矩阵中。

H矩阵为rho×theta大小的矩阵,矩阵中各元素表示原直角坐标系图片中各点hough变换结果为(rho,theta)的数量。

如下图(400×400像素)hough变换后rho为200,theta为0处的H矩阵数值为400。表示图中竖贯图片(400长度)的线上每一点的hough变换都能产生(rho,theta)为(200,0)的结果,因此H矩阵在该坐标处的数值为400。

  

可对hough变换的精度进行调整。

F=imread('D:\Desktop\90.png');
f=rgb2gray(F);
[H,theta,rho] = hough(f,'RhoResolution', 0.2, 'Theta', -90:0.2:89);

 使用'RhoResolution',调整rho分辨率为0.2。

使用'Theta', -90:0.2:89调整分辨率,将theta分辨率调整为0.2°。

rho, theta,H的矩阵大小相应增加。

H矩阵与原图直角坐标系的关系 

F=imread('D:\Desktop\90.png');
f=rgb2gray(F);
[H,theta,rho] = hough(f,'RhoResolution', 0.2, 'Theta', -90:0.2:89);
imshow(imadjust(rescale(H)),'XData',theta,'YData',rho,'InitialMagnification','fit');
title('Hough transform');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);

imread导入图片后,图片左上角的点坐标为(1,1)。hough变换后rho, theta取值如下图所示。

                      

下图(400×400像素):rho取值为正, theta取值为正,(rho,theta)为(424,45°)。

 

下图(400×400像素):rho取值为正, theta取值为正,(rho,theta)为(179,30°)。

下图(400×400像素):rho取值为正, theta取值为负,(rho,theta)为(141,-45°)

 

  

下图(400×400像素):rho取值为正, theta取值为正,(rho,theta)为(179,-30°)。

 

下图(400×400像素):rho取值为负, theta取值为负,(rho,theta)为(-141,-45°)。

下图(400×400像素):rho取值为负, theta取值为负,(rho,theta)为(-179,-60°)。

下图(400×400像素):rho取值介于正负之间, theta取值介于正负之间,(rho,theta)为(-200,-90°)、(200,90°)。可见H矩阵theta于-90°与90°附近取值较为集中,原图中应该出现横向线条。

下图(400×400像素):rho取值接近0°, theta取值为正,(rho,theta)为(200, 0°)。可见H矩阵theta于0°附近取值较为集中,原图中应该出现竖向线条。

猜你喜欢

转载自blog.csdn.net/weixin_56832351/article/details/129254231