houghlines


基于 Hough 变换提取线段

Syntax

lines = houghlines(BW,theta,rho,peaks)
lines = houghlines(___,Name,Value)

Description

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

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

Examples

查找线段并突出显示最长的线段

clear all
close all
clc
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;
%查找图像的 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');
%查找线条并对其绘图。
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
%将最长的线段设为青色以突出显示。
plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');

输入参数

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

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

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

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

名称-值对组参数
‘FillGap’ - 与同一 Hough 变换 bin 相关联的两个线段之间的距离
20 (默认) | 正数
与同一个 Hough 变换 bin 相关联的两个线段之间的距离,指定为正数。当线段之间的距离小于指定值时,houghlines 函数会将这些线段合并为一条线段。

‘MinLength’ - 最小线条长度
40 (默认) | 正数
最小线条长度,指定为正数。houghlines 丢弃短于指定值的线条。

输出参数

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

字段说明
point1指定线段端点坐标的二元素向量 [X Y]
point2指定线段端点坐标的二元素向量 [X Y]
thetaHough 变换 bin 的角度(以度为单位)
rhoHough 变换 bin 的 rho 轴位置
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:设计师小姐姐 返回首页