MATLAB中的Hough变换

版权声明:此篇博文为博主心血o(╥﹏╥)o,如要转载请注明来源,勿忘心安! https://blog.csdn.net/dyq1995/article/details/86541518

下面来介绍一下关于Hough变换的原理及其如何在MATLAB中实现。

Hough变换:Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点-线对偶性,把图像空间中的检测问题转换到参数空间。国内外对Hough变换的研究及应用动态:Hough变换于1962年由Paul Hough提出,并在美国作为专利被发表。它所实现的是一种从图像空间到参数空间的映射关系。由于具有一些明显优点和可贵性质,它引起了许多国内外学者和工程技术人员的普遍关注。例如,由于其根据局部度量来计算全面描述参数,因而对于区域边界被噪声干扰或被其他目标遮盖而引起边界发生某些间断的情况,它具有很好的容错性和鲁棒性。多年来,专家们对Hough变换的理论性质和应用方法进行了深入而广泛的研究, 并取得了许多有价值的成果。

Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下, 这种变换有着理想的效果。但是,一旦参数空间增大,计算量便会急剧上升,同时耗费巨大的存储空间,耗时也随之猛增。就此,多年来国内外众多学者针对具体情况对常规Hough变换进行了多方面的探索,并提出了许多有价值的改进方法。

MATLAB中的实现方法:

1、打开MATLAB软件,在其主界面的编辑器中写入下列代码:

I=imread('H:\snsm\a2.jpg');     %读图
rotI=rgb2gray(I);               %rgb转灰度图
subplot(2,2,1);               %显示灰度图
imshow(rotI);
title('灰度图像');
axis on;
BW=edge(rotI,'prewitt');
subplot(2,2,2);
imshow(BW);
title('prewitt算子边缘检测 后图像');
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 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','yellow');
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');

2、代码保存至自定义路径下,点击运行,结果如下:

如图所示,prewitt算子对灰度图进行边缘检测,茶叶的部分图像边缘就十分清晰了,再通过Hough变换后就显示其线性比例在对应像素值的输入,最后是霍夫变换 图像检测的图片,基本介绍完毕,请大家继续关注!!

猜你喜欢

转载自blog.csdn.net/dyq1995/article/details/86541518