MATLAB 帮助中心
基于霍夫变换提取线段
lines = houghlines(BW,theta,rho,peaks)
lines = houghlines(BW,theta,rho,peaks,Name=Value)
lines = houghlines(BW,theta,rho,peaks) 提取二值图像 BW 中与霍夫变换中的特定 bin 相关联的线段。theta 和 rho 分别是霍夫变换的每个 bin 对应的线条的角度和垂直偏移量。peaks 列出了霍夫变换矩阵中峰值的行和列坐标。返回的值 lines 包含有关提取的线段的信息。
lines
BW
theta
rho
peaks
示例
lines = houghlines(BW,theta,rho,peaks,Name=Value) 使用名称-值参量来控制线条提取的各个方面。例如,指定 MinLength=7 以提取最小长度为 7 个像素的线条。
Name=Value
MinLength=7
7
全部折叠
将一个图像读入工作区,然后将图像绕其中心逆时针旋转 33 度。
I = imread("circuit.tif"); rotI = imrotate(I,33,"crop");
通过使用 edge 函数找到图像中的边缘。
edge
BW = edge(rotI,"canny");
计算旋转后的二值图像的霍夫变换。
[H,theta,rho] = hough(BW);
通过使用 houghpeaks 函数,在霍夫变换矩阵 H 中找到最多五个峰值。
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
二值图像,指定为二维逻辑矩阵或二维数值矩阵。对于数值输入,任何非零像素都被视为 1 (true)。
1
true
数据类型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
single
double
int8
int16
int32
int64
uint8
uint16
uint32
uint64
logical
相对于线条的垂直投影的角度(以度为单位),指定为元素在 [-90, 90) 范围内的数值向量。角度是从 x 轴顺时针方向测量的。向量的每个元素指定霍夫变换矩阵 H 对应列的 theta 值。
将此值设置为 hough 函数的 theta 输出参量。
hough
数据类型: double
从原点到线条的垂直偏移量(以像素为单位),指定为数值向量。原点位于图像左上角像素的中心。向量的每个元素指定霍夫变换矩阵 H 对应行的 rho 值。
将此值设置为 hough 函数的 rho 输出参量。
霍夫变换中峰值的行和列坐标,指定为数值向量。将此值设置为 houghpeaks 函数的 peaks 输出参量。
将可选参量对组指定为 Name1=Value1,...,NameN=ValueN,其中 Name 是参量名称,Value 是对应的值。名称-值参量必须出现在其他参量之后,但对各个参量对组的顺序没有要求。
Name1=Value1,...,NameN=ValueN
Name
Value
示例: lines = houghlines(BW,theta,rho,peaks,MinLength=7) 指定最小行长度为 7 个像素。
lines = houghlines(BW,theta,rho,peaks,MinLength=7)
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name 引起来。
示例: lines = houghlines(BW,theta,rho,peaks,"MinLength",7);
lines = houghlines(BW,theta,rho,peaks,"MinLength",7);
FillGap
20
与同一个霍夫变换 bin 相关联的两个线段之间的距离,指定为正数。当线段之间的距离小于指定值时,houghlines 函数会将这些线段合并为一条线段。
houghlines
MinLength
40
最小线条长度,指定为正数。houghlines 函数丢弃短于最小线条长度的线条。
检测到的线条,以结构体向量形式返回。每个元素表示一个合并后的线段,并具有以下字段:
字段
描述
point1
指定线段的第一个端点的坐标的二元素向量 [X Y]
[X Y]
point2
指定线段的第二个端点的坐标的二元素向量 [X Y]
对应于霍夫变换 bin 的角度(以度为单位)
从原点到线条的垂直偏移量,对应于霍夫变换 bin
全部展开
用法说明和限制:
houghlines 支持 C 和 C++ 代码生成(需要 MATLAB® Coder™)。有关详细信息,请参阅图像处理的代码生成。
字符串参量必须为编译时常量。
在 R2006a 之前推出
hough | houghpeaks
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
选择网站
选择网站以获取翻译的可用内容,以及查看当地活动和优惠。根据您的位置,我们建议您选择:。
您也可以从以下列表中选择网站:
如何获得最佳网站性能
选择中国网站(中文或英文)以获得最佳网站性能。其他 MathWorks 国家/地区网站并未针对您所在位置的访问进行优化。
美洲
欧洲
亚太
联系您当地的办事处