Houg变换

语法:

[H, theta, rho] = hough(bw)

说明:

函数[H, theta, rho] = hough(BW) 计算二值图像BW的标准哈夫(hough)变换(SHT),你可以使用哈夫函数检测图像中的直线。函数返回哈夫变换矩阵 H,  theta (弧度) and rho 是在哈夫变化矩阵上产生的数组。

函数[H, theta, rho] = hough(BW,param1,val1,param2,val2) ,具体的参数意思及其值的情况如下表所示。参数可以省略,也不区分大小写。

'ThetaResolution'

 0 到 90实际刻度变化值,指定哈夫变换沿theta轴的刻度大小;默认值为1。

'RhoResolution'

0 到 norm(size(BW))间实际刻度变化值,指定哈夫变换沿 rho 轴的刻度大小。默认值为1。

 

注释:

哈夫函数可实现标准哈夫变换 (SHT). SHT 用参数表示一条直线:

rho = x*cos(theta) + y*sin(theta)

变量 rho 是沿与直线垂直的向量方向原点到直线的距离, 变量 theta 是X轴与向量之间的夹角。哈夫函数产生参数空间矩阵,行和列分别对应着rho和theta的值,在此空间中的峰值代表输入图像中有潜在的直线。

哈夫变换矩阵H,是一个NRHO*NTHETA的矩阵,其中,

 NRHO = 2*ceil(norm(size(BW))/RhoResolution)-1,NTHETA = 2*ceil(90/ThetaResolution)。

Theta角的取值范围为 [-90, 90)度,rho 取值范围从-DIAGONAL(对角线) 到 DIAGONAL ,其中DIAGONAL = RhoResolution*ceil(norm(size(BW))/RhoResolution)。注意如果90/DTHETA 不是整数,实际角度间隔应为90/ceil(90/DTHETA)。

(norm(向量)函数是用来计算欧式距离的即sqrt(x1*x1+x2*x2))

 

支持的数据类型:

BW可以是逻辑型数据或者数字型数据,但必须是2维实数非稀疏矩阵。

实例程序:

%Compute and display the Hough transform of an image

%计算并显示一幅图像的哈夫变换

RGB = imread('gantrycrane.png');

I  = rgb2gray(RGB); % convert to intensity 转换成亮度图像或灰度图像

BW = edge(I,'canny'); % extract edges 利用Canny算子进行边缘提取

%Rho 的间隔为0.5,theta 的间隔为0.5 进行哈夫变换

[H,T,R] = hough(BW,'RhoResolution',0.5,'ThetaResolution',0.5);

% display the original image 显示原始图像

subplot(2,1,1);

imshow(RGB);

title('gantrycrane.png');

% display the hough matrix 显示哈夫矩阵

subplot(2,1,2);

imshow(imadjust(mat2gray(H)),'XData',T,'YData',R,'InitialMagnification','fit');

title('Hough transform of gantrycrane.png');

xlabel('\theta'), ylabel('\rho');

axis on, axis normal, hold on;

colormap(hot);

参考函数

houghpeaks, houghlines

posted @ 2005-09-28 21:52  MichaeL  阅读(1793)  评论(1)    收藏  举报