houghlines
基于 Hough 变换提取线段
说明
示例
查找线段并突出显示最长的线段
将图像读入工作区。
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
)。
数据类型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| logical
theta
— 线条旋转角度
数值矩阵
线条旋转角度,以度为单位,指定为数值矩阵。角度是在 x 轴和 rho
向量之间测量的角度。
数据类型: double
rho
— 从原点到线条的距离
数值矩阵
距坐标原点的距离,指定为数值矩阵。坐标原点是图像的左上角 (0,0)。
数据类型: double
peaks
— Hough 变换 bin 的行和列坐标
数值矩阵
Hough 变换 bin 的行和列坐标,指定为数值矩阵。
数据类型: double
名称-值参数
将可选的参数对组指定为 Name1=Value1,...,NameN=ValueN
,其中 Name
是参数名称,Value
是对应的值。名称-值参数必须出现在其他参数后,但对各个参数对组的顺序没有要求。
如果使用的是 R2021a 之前的版本,请使用逗号分隔每个名称和值,并用引号将 Name
引起来。
示例: lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7);
FillGap
— 与同一 Hough 变换 bin 相关联的两个线段之间的距离
20
(默认) | 正数
与同一个 Hough 变换 bin 相关联的两个线段之间的距离,指定为正数。当线段之间的距离小于指定值时,houghlines
函数会将这些线段合并为一条线段。
数据类型: double
MinLength
— 最小线条长度
40
(默认) | 正数
最小线条长度,指定为正数。houghlines
丢弃短于指定值的线条。
数据类型: double
输出参数
lines
— 检测到的线条
结构体数组
检测到的线条,以结构体数组形式返回,其长度等于找到的合并线段数。结构体数组的每个元素都有以下字段:
字段 | 描述 |
---|---|
| 指定线段端点坐标的二元素向量 |
| 指定线段端点坐标的二元素向量 |
| Hough 变换 bin 的角度(以度为单位) |
| Hough 变换 bin 的 |
扩展功能
C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。
用法说明和限制:
houghlines
支持 C 代码生成(需要 MATLAB® Coder™)。有关详细信息,请参阅图像处理的代码生成。可选参数名称
'FillGap'
和'MinLength'
必须为编译时常量。其相关联的值不必是编译时常量。
GPU 代码生成
使用 GPU Coder™ 为 NVIDIA® GPU 生成 CUDA® 代码。
用法说明和限制:
可选参数名称
'FillGap'
和'MinLength'
必须为编译时常量。其相关联的值不必是编译时常量。
版本历史记录
在 R2006a 之前推出
另请参阅
MATLAB 命令
您点击的链接对应于以下 MATLAB 命令:
请在 MATLAB 命令行窗口中直接输入以执行命令。Web 浏览器不支持 MATLAB 命令。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)