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

浙公网安备 33010602011771号