Main Content

本页对应的英文页面已更新,但尚未翻译。 若要查看最新内容,请点击此处访问英文页面。

hough

Hough 变换

说明

示例

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

示例

[H,theta,rho] = hough(BW,Name,Value) 使用名称-值对组参数计算二值图像 BW 的标准 Hough 变换 (SHT) 以影响计算。

示例

全部折叠

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

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

提取边缘。

BW = edge(I,'canny');

计算 Hough 变换。

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

显示原始图像和 Hough 矩阵。

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  = rgb2gray(RGB);

提取边缘。

BW = edge(I,'canny');

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

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

显示 Hough 变换。

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

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在引号中。您可采用任意顺序指定多个名称-值对组参数,如 Name1,Value1,...,NameN,ValueN

示例: [H,T,R] = hough(BW,'RhoResolution',0.5,'Theta',0.5);

Hough 变换沿 rho 轴的 bin 的间距,以逗号分隔的对组形式指定,其中包含 'RhoResolution' 和 0 与 norm(size(BW)) 之间(不包含两者)的数值。

数据类型: double

输出矩阵 H 的对应列的 Theta 值,以逗号分隔的对组形式指定,其中包含 'Theta' 和范围 [-90, 90) 内的数值向量。

数据类型: double

输出参数

全部折叠

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

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

数据类型: double

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

算法

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

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

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

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

Hough 变换矩阵 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 之前推出