Main Content

hough

霍夫变换

说明

示例

[H,theta,rho] = hough(BW) 计算二值图像 BW 的标准霍夫变换 (SHT)。hough 函数旨在检测线条。该函数使用线条的参数化表示:rho = x*cos(theta) + y*sin(theta)。该函数返回 rho(沿垂直于线条的向量从原点到线条的距离)和 theta(x 轴与该向量之间的角度,以度为单位)。该函数还返回 SHT H,它是一个参数空间矩阵,其行和列分别对应于 rho 和 theta 值。有关详细信息,请参阅算法

示例

[H,theta,rho] = hough(BW,Name,Value) 使用名称-值参量计算二值图像 BW 的 SHT 以影响计算。

示例

全部折叠

读取图像,并将其转换为灰度图像。

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

提取边缘。

BW = edge(I,'canny');

计算霍夫变换。

[H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',-90:0.5:89);

显示原始图像和霍夫矩阵。

subplot(2,1,1);
imshow(RGB);
title('gantrycrane.png');
subplot(2,1,2);
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
      'InitialMagnification','fit');
title('Hough transform of gantrycrane.png');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;
colormap(gca,hot);

读取图像,并将其转换为灰度。

RGB = imread('gantrycrane.png');
I  = im2gray(RGB);

提取边缘。

BW = edge(I,'canny');

计算有限角度范围内的霍夫变换。

[H,T,R] = hough(BW,'Theta',44:0.5:46);

显示霍夫变换。

figure
imshow(imadjust(rescale(H)),'XData',T,'YData',R,...
   'InitialMagnification','fit');
title('Limited Theta Range Hough Transform of Gantrycrane Image');
xlabel('\theta')
ylabel('\rho');
axis on, axis normal;
colormap(gca,hot)

输入参数

全部折叠

二值图像,指定为二维逻辑矩阵或二维数值矩阵。对于数值输入,任何非零像素都被视为 1 (true)。

数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

名称-值参数

将可选的参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量后,但对各个参量对组的顺序没有要求。

示例: [H,theta,rho] = hough(BW,RhoResolution=0.5)

如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。

示例: [H,theta,rho] = hough(BW,"RhoResolution",0.5)

霍夫变换 bin 沿 rho 轴的间距,指定为介于 0 和 norm(size(BW)) 之间(不包含两者)的正数。

数据类型: double

SHT 的 Theta 值,指定为数值向量,其中包含在 [-90, 90) 范围内的元素。

示例: -90:0.5:89.5

数据类型: double

输出参量

全部折叠

霍夫变换矩阵,以大小为 nrho×ntheta 的数值矩阵形式返回。行和列对应于 rhotheta 值。有关详细信息,请参阅算法

x 轴和 rho 向量之间的角度,以度为单位,以数值矩阵形式返回。有关详细信息,请参阅算法

数据类型: double

沿垂直于线条的向量从原点到线条的距离,以数值数组形式返回。有关详细信息,请参阅算法

数据类型: double

算法

标准霍夫变换 (SHT) 使用线条的参数化表示:

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

假设坐标系的原点位于左上角像素的中心。

变量 rho 是从原点到直线的垂直距离。

变量 theta 是从原点到线条的垂直投影相对于正 x 轴顺时针测量的角度(以度为单位)。theta 的范围是 –90° ≤ θ < 90°。线条本身的角度是 θ + 90°,也是相对于正 x 轴顺时针测量的。

Graphical representation of how theta and rho are defined for a line, in green, relative to the perpendicular projection, in black.

SHT 是参数空间矩阵,其行和列分别对应于 rhotheta 值。SHT 中的元素表示累加器元胞。最初,每个元胞中的值为零。然后,对于图像中的每个非背景点,为每个 theta 计算 rhorho 舍入到 SHT 中最近的允许行。该累加器元胞递增。在此过程结束时,SHT(r,c) 中的 Q 值表示 xy 平面中的 Q 个点位于 theta(c)rho(r) 指定的线条上。SHT 中的峰值表示输入图像中可能存在的线条。

霍夫变换矩阵 H 大小为 nrho×ntheta,其中:

nrho = 2*(ceil(D/RhoResolution)) + 1,且
D = sqrt((numRowsInBW - 1)^2 + (numColsInBW - 1)^2)
rho 的值在 -diagonaldiagonal 范围内,其中
diagonal = RhoResolution*ceil(D/RhoResolution)

ntheta = length(theta)

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开