数字图像中的Hough变换应用直线的检测_第1页
数字图像中的Hough变换应用直线的检测_第2页
数字图像中的Hough变换应用直线的检测_第3页
数字图像中的Hough变换应用直线的检测_第4页
数字图像中的Hough变换应用直线的检测_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈阳理工大学数字图像处理课程设计摘 要Hough变换是一种使用表决原理的参数估计技术。其原理是利用图像空间和Hough参数空间的点线对偶性,把图像空间中的检测问题转换到参数空间。通过在参数空间里进行简单的累加统计,然后在Hough参数空间寻找累加器峰值的方法检测直线。Hough变换的实质是将图像空间内具有一定关系的像元进行聚类,寻找能把这些像元用某一解析形式联系起来的参数空间累积对应点。在参数空间不超过二维的情况下,这种变换有着理想的效果。 理论与实践向来是形影不离,相辅相成,Hough变换之所以有如此长足的发展,主要原因还是在于实践应用上的广泛需求。而在实践中所暴露出的不足又进而促进了它的发

2、展,循环往复,就如同生命的演化。Hought变换主要应用在生物医学、自动化、机器人视觉空间技术、军事防御办公自动化等方面。本文主要是根据所学的数字图象处理知识,在MATLAB环境下,通过系统编程的方式,实现用Hough变换检测直线的算法。关键词:Hough变换;对偶性;MATLAB目 录1 课程设计目的与要求11.1课程设计目的11.2课程设计要求12 Hough直线检测的原理23 设计内容43.1 读入图像43.2 检测图像边缘43.3 实现Houg变换,检测出图像中的直线44 程序代码55 仿真结果分析95.1 仿真结果95.2分析11结束语12参考文献131 课程设计目的与要求1.1课程

3、设计目的 (1)熟悉和掌握MATLAB程序设计方法;  (2)学习和熟悉MATLAB图像处理工具箱;  (3)学会运用MATLAB工具箱对图像进行处理和分析;  (4)了解Hought变换的原理; (5)实现用Hough变换检测直线的算法。1.2课程设计要求利用Hough变换检测直线通常先进行边缘检测,得到只包含边缘的二值图像。再通过Hough变换,在参数空间检测图像共线点的数量得到直线参数,从而实现直线检测。具体步骤如下: (1)读入图像(图像需有直线或直线性边缘); (2)进行图像边缘,得到二值图像; (3)实现Hough变换,检测出图像中的直线方程; (4)

4、得到检测出直线后的图像;2 Hough直线检测的原理Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参

5、数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如下: (3-1)根据3-1公式,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让取遍可能的值,然后计算的值,再根据和的值对累加数组累加,从而得到共线点的个数。下面介绍和取值范围的确定。设被检测的直线在第一象限,右上角坐标为( m, n) ,则第一象限中直线的位置情况如图3.1所示。 图 3.1 坐标位置由图3.1可见,当直线从与x轴重合处逆时针旋转时,的值开始由

6、0°增大,直到180°,所以的取值范围为0°180°。由直线极坐标方程可知: (3-1) (3-2)所以当且仅当x和y都达到最大且+=±90°时(根据<来调整的值) (3-3)即取值范围。由、的取值范围和它们的分辨率就可以确定累加器的大小,从而检测直线。利用Hough变换检测图像中直线的一般步骤应该首先对图像进行二值化,然后进行边缘检测,接着对边缘检测的结果作Hough变换,最后得到直线检测结果。为了简便,算法主要针对图像的Hough变换,所以输入图像采用二值边缘图,具体算法步骤如下:(1)读入一幅256级灰度图(虽然是256级

7、灰度,但实际上仅有0和255两个灰度等级)。(2)根据图像尺寸决定Hough变换累加器的大小并分配内存。(3)对图像作Hough变换,并将变换结果存入Hough变换累加器。(4)设定阈值,并根据阈值大小将Hough变换累加器中累加值小于阈值的点清零,即认为这些点并不对应图像域中的一条直线。(5)查找Hough变换累加器中累加值最大的点,记录该点并将其领域清零,继续查找并记录下一个累加值最大的点,直到累加器中所有的累加值都为零,记录的这些点即对应了检测到的图像中的直线。(6)根据检测到的点在图像域中绘出直线。3 设计内容3.1 读入图像选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们

8、必须使用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。3.2 检测图像边缘如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别用梯度向量的幅度和方向来表示。 边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。如Roberts算子,Sobel算子 ,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。3.3 实现Houg变换,检测出图像中的直线 Hough变换是一

9、种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。 这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。4 程序代码clc;clear; % 录入图像并显示f=imread('D:000.jpg'); %读入彩色图像,注意不能使用灰度图像o=f; %保留彩色原图f=rgb2gray(f); %将彩色图像转换为灰度图像f=im2

10、double(f); figure(); subplot(2,2,1);imshow(o);title('原图'); % 提取图像边缘m,n=size(f); %得到图像矩阵行数m,列数n for i=3:m-2 for j=3:n-2 %处理领域较大,所以从图像(3,3)开始,在(m-2,n-2)结束l(i,j)=-f(i-2,j)-f(i-1,j-1)-2*f(i-1,j)-f(i-1,j+1)-f(i,j-2)-2*f(i,j-1)+16*f(i,j)-2*f(i,j+1)-f(i,j+2)-f(i+1,j-1)-2*f(i+1,j)-f(i+1,j+1)-f(i+2,j

11、); %LoG算子end end subplot(2,2,2);imshow(l);title('LoG算子提取图像边缘'); % 滤波m,n=size(l); for i=2:m-1 for j=2:n-1 y(i,j)=l(i-1,j-1)+l(i-1,j)+l(i-1,j+1)+l(i,j-1)+l(i,j)+l(i,j+1)+l(i+1,j-1)+l(i+1,j)+l(i+1,j+1); y(i,j)=y(i,j)/9; %LoG算子提取边缘后,对结果进行均值滤波以去除噪声,为下一步hough变换提取直线作准备end end subplot(2,2,3);imshow(

12、y);title('均值滤波器处理后') % 二值化q=im2uint8(y); m,n=size(q); for i=1:m for j=1:n if q(i,j)>80; %设置二值化的阈值为80 q(i,j)=255; %对图像进行二值化处理,使图像边缘更加突出清晰else q(i,j)=0; end end end subplot(2,2,4);imshow(q);title('二值化处理后'); % 检测直线 %Hough变换检测直线,使用(a,p)参数空间,a0,180,p0,2d a=180; %角度的值为0到180度d=round(sqrt

13、(m2+n2); %图像对角线长度为p的最大值s=zeros(a,2*d); %存储每个(a,p)个数z=cell(a,2*d); %用元胞存储每个被检测的点的坐标for i=1:m for j=1:n %遍历图像每个点if(q(i,j)=255)%只检测图像边缘的白点,其余点不检测for k=1:a p = round(i*cos(pi*k/180)+j*sin(pi*k/180);%对每个点1到180度遍历一遍,取得经过该点的所有直线的p值(取整)if(p > 0) %若p大于0,则将点存储在(d,2d)空间s(k,d+p)=s(k,d+p)+1;%(a,p)相应的累加器单元加一zk

14、,d+p=zk,d+p,i,j'%存储点坐标else ap=abs(p)+1;%若p小于0,则将点存储在(0,d)空间s(k,ap)=s(k,ap)+1;%(a,p)相应的累加器单元加一zk,ap=zk,ap,i,j'%存储点坐标end end end end end % 显示效果for i=1:a for j=1:d*2 %检查每个累加器单元中存储数量if(s(i,j) >70) %将提取直线的阈值设为70 lp=zi,j;%提取对应点坐标for k=1:s(i,j)%对满足阈值条件的累加器单元中(a,p)对应的所有点进行操作o(lp(1,k),lp(2,k),1)=2

15、55; %每个点R分量=255,G分量=0,B分量=0 o(lp(1,k),lp(2,k),2)=0; o(lp(1,k),lp(2,k),3)=0; %结果为在原图上对满足阈值要求的直线上的点赋红色end end end end figure,imshow(o);title('hough变换提取直线');rotf = imrotate(f,33,'crop');BW = edge(rotf,'canny');H,T,R = hough(BW);imshow(H,'XData',T,'YData',R,'I

16、nitialMagnification','fit');xlabel('theta'), ylabel('rho');axis on, axis normal, hold on;P = houghpeaks(H,7,'threshold',ceil(0.3*max(H(:);x = T(P(:,2); y = R(P(:,1);plot(x,y,'s','color','white'); % Find lines and plot themlines = houghlines

17、(BW,T,R,P,'FillGap',5,'MinLength',7);figure, imshow(rotf), hold onmax_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

18、9;,'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;

19、endend% highlight the longest line segmentplot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');5 仿真结果分析5.1 仿真结果 读入图像,使用彩色图像,边缘检测并提取边缘图像,均值滤波后对结果进行二值化处理,生成如图5.1的仿真图。图 5.1 仿真结果由Hought变换生成检测结果如图5.2图5.2 检测直线图 图片的横坐标是变换后极坐标的角度,纵坐标是原图片直线上点到原点的距离,图片点的标记是原图片中检测后直线的位置和大小。变换结果在原图像灰度变化上的标志情况如下图5.3所示图5.3 灰度图像直接标记5.2分析利用Hough变换检测图像中直线的首先对图像进行二值化,然后进行边缘检测,接着对边缘检测的结果作Hou

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论