主要内容

houghlines

基于霍夫变换提取线段

说明

lines = houghlines(BW,theta,rho,peaks) 提取二值图像 BW 中与霍夫变换中的特定 bin 相关联的线段。thetarho 分别是霍夫变换的每个 bin 对应的线条的角度和垂直偏移量。peaks 列出了霍夫变换矩阵中峰值的行和列坐标。返回的值 lines 包含有关提取的线段的信息。

示例

lines = houghlines(BW,theta,rho,peaks,Name=Value) 使用名称-值参量来控制线条提取的各个方面。例如,指定 MinLength=7 以提取最小长度为 7 个像素的线条。

示例

示例

全部折叠

将一个图像读入工作区,然后将图像绕其中心逆时针旋转 33 度。

I = imread("circuit.tif");
rotI = imrotate(I,33,"crop");

通过使用 edge 函数找到图像中的边缘。

BW = edge(rotI,"canny");

计算旋转后的二值图像的霍夫变换。

[H,theta,rho] = hough(BW);

通过使用 houghpeaks 函数,在霍夫变换矩阵 H 中找到最多五个峰值。

maxpeaks = 5;
thresh = ceil(0.3*max(H(:)));
P = houghpeaks(H,maxpeaks,Threshold=thresh);

找到长度至少为 7 个像素的线条。在对线条长度计数之前,填充小于 5 个像素的间隙。

lines = houghlines(BW,theta,rho,P,FillGap=5,MinLength=7);

显示原始图像,然后以绿色叠加检测到的线条。还以黄色绘制每个线条的起点,以红色绘制每个线条的终点。

imshow(rotI)
hold on
for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),LineWidth=2,Color="green");
   plot(xy(1,1),xy(1,2),"x",LineWidth=2,Color="yellow");
   plot(xy(2,1),xy(2,2),"x",LineWidth=2,Color="red");
end

Figure contains an axes object. The hidden axes object contains 37 objects of type image, line. One or more of the lines displays its values using only markers

输入参数

全部折叠

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

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

相对于线条的垂直投影的角度(以度为单位),指定为元素在 [-90, 90) 范围内的数值向量。角度是从 x 轴顺时针方向测量的。向量的每个元素指定霍夫变换矩阵 H 对应列的 theta 值。

将此值设置为 hough 函数的 theta 输出参量。

数据类型: double

从原点到线条的垂直偏移量(以像素为单位),指定为数值向量。原点位于图像左上角像素的中心。向量的每个元素指定霍夫变换矩阵 H 对应行的 rho 值。

将此值设置为 hough 函数的 rho 输出参量。

数据类型: double

霍夫变换中峰值的行和列坐标,指定为数值向量。将此值设置为 houghpeaks 函数的 peaks 输出参量。

数据类型: double

名称-值参数

全部折叠

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

示例: lines = houghlines(BW,theta,rho,peaks,MinLength=7) 指定最小行长度为 7 个像素。

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

示例: lines = houghlines(BW,theta,rho,peaks,"MinLength",7);

与同一个霍夫变换 bin 相关联的两个线段之间的距离,指定为正数。当线段之间的距离小于指定值时,houghlines 函数会将这些线段合并为一条线段。

数据类型: double

最小线条长度,指定为正数。houghlines 函数丢弃短于最小线条长度的线条。

数据类型: double

输出参量

全部折叠

检测到的线条,以结构体向量形式返回。每个元素表示一个合并后的线段,并具有以下字段:

字段

描述

point1

指定线段的第一个端点的坐标的二元素向量 [X Y]

point2

指定线段的第二个端点的坐标的二元素向量 [X Y]

theta

对应于霍夫变换 bin 的角度(以度为单位)

rho

从原点到线条的垂直偏移量,对应于霍夫变换 bin

扩展功能

全部展开

版本历史记录

在 R2006a 之前推出