Hough变换

Hough变换

通过Hough变换在二值图像中检测直线需要3个步骤:

(1)利用hough()函数执行霍夫变换,得到霍夫矩阵;

(2)利用houghpeaks()函数在霍夫矩阵中寻找峰值点;

(3)利用houghlines()函数在之前2步结果的基础上得到原二值图像中的直线信息

1.霍夫变换

在MATLAB中,hough函数用于执行霍夫变换,该函数的调用方法如下:

[H, theta, rho] = hough(BW, param1, vall, param2, val2)

其中BW是边缘检测后的二值图像。param1value1以及param2value2为可选参数对。H是变换得到的Hough矩阵。thetarho为分别对应于Hough矩阵每一列和每一行的θ和ρ值组成的向量。

2.寻找峰值

在MATLAB中,houghpeaks函数用于在霍夫矩阵中寻找峰值点。该函数的调用方法如下:

peaks = houghpeaks(H, numpeaks, param1, val1, param2, val2)

其中,H是由hough()函数得到的Hough矩阵;numpeaks是要寻找的峰值数目,默认为1; peaks是一个Q×2的矩阵,每行的两个元素分别为某一峰值点在Hough矩阵中的行、列索引;Q为找到的峰值点的数目。

3.提取直线段

在MATLAB中,houghlines函数在之前2步结果的基础上得到原二值图像中的直线信息。该函数的调用方法如下:

lines = houghlines(BW, theta, rho, peaks, param1, val1, param2, val2)

其中,BW是边缘检测后的二值图像;thetarho是Hough矩阵每一列和每一行的θ和ρ值组成的向量,由hough函数返回;peaks是一个包含峰值点信息的Q×2的矩阵,由houghpeaks函数返回;lines是一个结构体数组,数组长度是找到的直线条数。

利用霍夫变换来对图像进行处理

I=imread('pears.png');             %读取图像
rotI=rgb2gray(I);
subplot(2,2,1);
imshow(rotI);
title('灰度图像');
axis([50,250,50,200]);
grid on;
axis on;
BW=edge(rotI, 'prewitt');          %prewitt算子边缘检测
subplot(2,2,2);
imshow(BW);
title('prewitt算子边缘检测后图像');
axis([50,250,50,200]);
grid on;
axis on;
[H, T, R]=hough(BW);               %霍夫变换
subplot(2,2,3);
imshow(H, [], 'XData', T, 'YData', R, 'InitialMagnification', 'fit');
title('霍夫变换图');
xlabel('\theta'), ylabel('\rho');
axis on , axis normal, hold on;
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);
subplot(2,2,4); , imshow(rotI);
title('霍夫变换图像检测');
axis([50,250,50,200]);
grid on;
axis on;
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(xy(1,1), xy(1,2), 'x', 'LineWidth',2, 'Color', 'yello');
plot(xy(2,1), xy(2,2), 'x', 'LineWidth',2, 'Color', 'red');
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');
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值