Main Content

houghlines

基于 Hough 变换提取线段

说明

示例

lines = houghlines(BW,theta,rho,peaks) 提取图像 BW 中与 Hough 变换中的特定 bin 相关联的线段。thetarho 是函数 hough 返回的向量。peaks 是由 houghpeaks 函数返回的矩阵,其中包含 Hough 变换 bin 的行和列坐标,用于搜索线段。返回值 lines 包含有关提取的线段的信息。

示例

lines = houghlines(___,Name,Value) 使用名称-值对组参数来控制线条提取的各个方面。

示例

全部折叠

将图像读入工作区。

I  = imread('circuit.tif');

旋转图像。

rotI = imrotate(I,33,'crop');

创建二值图像。

BW = edge(rotI,'canny');

使用二值图像创建 Hough 变换。

[H,T,R] = hough(BW);
imshow(H,[],'XData',T,'YData',R,...
            'InitialMagnification','fit');
xlabel('\theta'), ylabel('\rho');
axis on, axis normal, hold on;

Figure contains an axes. The axes contains an object of type image.

查找图像的 Hough 变换中的峰值。

P  = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:))));
x = T(P(:,2)); y = R(P(:,1));
plot(x,y,'s','color','white');

Figure contains an axes. The axes contains 2 objects of type image, line.

查找线条并对其绘图。

lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
figure, imshow(rotI), hold on
max_len = 0;
for k = 1:length(lines)
   xy = [lines(k).point1; lines(k).point2];
   plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green');

   % Plot beginnings and ends of lines
   plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow');
   plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red');

   % Determine the endpoints of the longest line segment
   len = norm(lines(k).point1 - lines(k).point2);
   if ( len > max_len)
      max_len = len;
      xy_long = xy;
   end
end

Figure contains an axes. The axes contains 37 objects of type image, line.

将最长的线段设为青色以突出显示。

plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

Figure contains an axes. The axes contains 38 objects of type image, line.

输入参数

全部折叠

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

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

线条旋转角度,以度为单位,指定为数值矩阵。角度是在 x 轴和 rho 向量之间测量的角度。

数据类型: double

距坐标原点的距离,指定为数值矩阵。坐标原点是图像的左上角 (0,0)。

数据类型: double

Hough 变换 bin 的行和列坐标,指定为数值矩阵。

数据类型: double

名称-值对组参数

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

示例: lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);

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

数据类型: double

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

数据类型: double

输出参数

全部折叠

检测到的线条,以结构体数组形式返回,其长度等于找到的合并线段数。结构体数组的每个元素都有以下字段:

字段

说明

point1

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

point2

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

theta

Hough 变换 bin 的角度(以度为单位)

rho

Hough 变换 bin 的 rho 轴位置

扩展功能

另请参阅

|

在 R2006a 之前推出