主要内容

本页翻译不是最新的。点击此处可查看最新英文版本。

hough

霍夫变换

说明

[H,theta,rho] = hough(BW) 计算二值图像 BW 的标准霍夫变换 (SHT)。hough 函数旨在检测线条。

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

示例

[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);

Figure contains 2 axes objects. Axes object 1 with title Hough transform of gantrycrane.png, xlabel \theta, ylabel \rho contains an object of type image. Hidden axes object 2 with title gantrycrane.png contains an object of type image.

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

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)

Figure contains an axes object. The axes object with title Limited Theta Range Hough Transform of Gantrycrane Image, xlabel theta, ylabel rho contains an object of type image.

输入参数

全部折叠

二值图像,指定为二维逻辑矩阵或二维数值矩阵。对于数值输入,任何非零像素都被视为 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) 将霍夫变换 bin 的间距指定为 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 之前推出

全部展开