实现用Hough变换检测直线的算法.docx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实现 Hough 变换 检测 直线 算法
- 资源描述:
-
沈阳理工大学数字图像处理课设 1. 设计目的 1) 了解Hought变换的原理; 2) 实现用Hough变换检测直线的算法。 2. 设计要求 3) 找一幅或多幅(两幅以上)包含直线形状的图像,检测出图像中的多条直线; 4) 分析并显示各直线的角度、长度。 3. 设计原理 Hough变换是利用图像全局特性而将边缘像素连接起来组成区域封闭边界的一种方法。在预先知道区域形状的条件下,利用Hough变换可以方便的得到边界曲线而将不连续的像素边缘点连接起来。Hough变换的主要优点是受噪声和曲线间断的影响小。利用Hough变换可以直接检测某些已知形状的目标,如直线。 Hough变换的基本思想是点线的对偶性。一方面,图像空间中共线的点对应在参数空间里相交的线;另一方面,在参数空间中相交于同一个点的所有直线在图像空间里都有共线的点与之对应。因此Hough变换把在图像空间中的直线检测问题转换到参数空间中对点的检测问题,通过在参数空间里进行简单的累加统计完成检测任务。如果参数空间中使用直线方程,当图像空间直线斜率为无穷大时,会使累加器尺寸和变很大,从而使计算复杂度过大。为解决这一问题,采用直线极坐标方程,变换方程如下: ρ=xcosθ+ysinθ (3-1) 根据3-1公式,原图像空间中的点对应新参数空间中的一条正弦曲线,即点- 正弦曲线对偶。检测直线的具体过程就是让θ取遍可能的值,然后计算ρ的值,再根据θ和ρ的值对累加数组累加,从而得到共线点的个数。下面介绍θ和ρ取值范围的确定。设被检测的直线在第一象限,右上角坐标为( m, n) ,则第一象限中直线的位置情况如图3.1所示。 图 3.1 坐标位置 由图3.1可见,当直线从与x轴重合处逆时针旋转时,θ的值开始由0°增大,直到180°,所以θ的取值范围为0°~180°。由直线极坐标方程可知: ρ=x2+y2sin(θ+Φ) (3-1) Φ=sin-1(xx2+y2) (3-2) 所以当且仅当x和y都达到最大且θ+Φ=±90°时(根据<来调整θ的值) ρ=|ρ|max=m2+n2 (3-3) , 即ρ取值范围m2-n2~m2+n2。 由θ、ρ的取值范围和它们的分辨率就可以确定累加器的大小,从而检测直线。 利用Hough变换检测图像中直线的一般步骤应该首先对图像进行二值化,然后进行边缘检测,接着对边缘检测的结果作Hough变换,最后得到直线检测结果。为了简便,算法主要针对图像的Hough变换,所以输入图像采用二值边缘图,具体算法步骤如下: (1)读入一幅256级灰度图(虽然是256级灰度,但实际上仅有0和255两个灰度等级) 。 (2)根据图像尺寸决定Hough变换累加器的大小并分配内存。 (3)对图像作Hough变换,并将变换结果存入Hough变换累加器。 (4)设定阈值,并根据阈值大小将Hough变换累加器中累加值小于阈值的点清零,即认为这些点并不对应图像域中的一条直线。 (5)查找Hough变换累加器中累加值最大的点,记录该点并将其领域清零,继续查找并记录下一个累加值最大的点,直到累加器中所有的累加值都为零,记录的这些点即对应了检测到的图像中的直线。 (6)根据检测到的点在图像域中绘出直线。 4.设计内容 4.1、读入图像 选取有较多直线及部分曲线以作对比的图像作为实验素材,这里我们必须使用彩色图像(有些看似灰度图像的实际属性也是彩色图像),原因下面有详解。 4.2、检测图像边缘 如果一个像素落在图像中某一个物体的边界上,那么它的邻域将成为一个灰度级变化的带。对这种变化最有用的两个特征是灰度的变化率和方向,他们分别用梯度向量的幅度和方向来表示。 边缘检测算子检查每个像素的邻域并对灰度变化率进行量化,通常也包括方向的确定。有若干种算子可以使用,大多数是基于方向导数掩模求卷积的方法。 如Roberts算子,Sobel算子 ,Prewitt算子,Log算子等。这里采用Log算子提取图像边缘,再用均值滤波去除边缘图像噪声。 4.3、实现Houg变换,检测出图像中的直线 Hough变换是一种利用图像的全局特征将特定形状的边缘连接起来,形成连续平滑边缘的一种方法。它通过将源图像上的点影射到用于累加的参数空间,实现对已知解析式曲线的识别。 这里先对边缘图像进行二值化处理,然后再用hough变换提取直线,最后用红色标记之。因为处理过程中需使用灰度图像,但最后无法给灰度图像赋颜色(会出错或效果不好),只能给彩色图像赋颜色,故最初输入时请使用彩色图像。 5.程序代码 clc;clear; %% 录入图像并显示 f=imread('C:\Users\YeSonG\Documents\MATLAB\01.jpg'); %读入彩色图像,注意不能使用灰度图像 o=f; %保留彩色原图 f=rgb2gray(f); %将彩色图像转换为灰度图像 f=im2double(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); %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(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)参数空间,a∈[0,180],p∈[0,2d] a=180; %角度的值为0到180度 d=round(sqrt(m^2+n^2)); %图像对角线长度为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)相应的累加器单元加一 z{k,d+p}=[z{k,d+p},[i,j]'];%存储点坐标 else ap=abs(p)+1;%若p小于0,则将点存储在(0,d)空间 s(k,ap)=s(k,ap)+1;%(a,p)相应的累加器单元加一 z{k,ap}=[z{k,ap},[i,j]'];%存储点坐标 end end end end end %% 显示效果 for i=1:a for j=1:d*2 %检查每个累加器单元中存储数量 if(s(i,j) >70) %将提取直线的阈值设为70 lp=z{i,j};%提取对应点坐标 for k=1:s(i,j)%对满足阈值条件的累加器单元中(a,p)对应的所有点进行操作 o(lp(1,k),lp(2,k),1)=255; %每个点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,'InitialMagnification','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 them lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); figure, imshow(rotf), 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 % highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan'); 6.仿真结果分析 6.1 第一组:读入图像,使用彩色图像,边缘检测并提取边缘图像,均值滤波后对结果进行二值化处理,生成如图6.1的仿真图。 图 6.1 仿真结果 由Hought变换生成检测结果如图6.2 图6.2 检测直线图 图片点的标记是原图片中检测后直线的位置和大小。 变换结果在原图像灰度变化上的标志情况如下图6.3所示 图6.3 灰度图像直接标记 由于第一组的原图像中直接部分太少,仿真出来的结果不是太明显,下面对一幅直线多并比较明显的图像进行Hough变化。 6.2 第二组:和第一组一样读入图像,使用彩色图像,边缘检测并提取边缘图像,均值滤波后对结果进行二值化处理,生成如图6.4的仿真图。 图 6.4 仿真结果 由Hought变换生成检测结果如图6.5 图6.5 检测直线图 图片点的标记是原图片中检测后直线的位置和大小。 变换结果在原图像灰度变化上的标志情况如下图6.6所示 图6。3灰度图像直接标记 6.3 分析 由第一组和第二组对比可以看出,对于直接明显的图像,仿真结果比较清晰。利用Hough变换检测图像中直线的首先对图像进行二值化,然后进行边缘检测,接着对边缘检测的结果作Hough变换,最后得到直线检测结果。 7.结论 通过这次MATLAB的学习,我对MATLAB有了一个基础的认识, MATLAB是一个高级的矩阵/阵列语言,它包含控制语句、函数、数据结构、输入和输出和面向对象编程的特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂程序(M文件)后再一起运行。在这短短的一周内从开始的一头雾水,到自己看书学习,到同学讨论,再进行整个题目的理论分析和计算,参考课程上的代码,写出自己的代码。 常规Hough变换虽然具有显著的优势,但其不足也不容忽视,例如检测速度太慢,无法做到实时控制;精度不够高,期望的信息检测不到反而做出错误判断,进而产生大量的冗余数据。 虽然Hough变换还存在一些技术上的问题,但随着数学领域的不断发展,Hough变换在一些领域上已经有了很好的使用。例如:在生物医学领域,Hough变换已被成功应用于基于人工智能的专家诊断系统;X射线人体照片和CT图像的处理和判读;光学显微镜和电子显微镜中的细胞核自动分析系统;从超声波诊断中提取三维动脉特征;在自动化、机器人视觉领域,Hough变换已被用于运动目标轨迹的检测与识别,高空侦察机、间谍卫星和军事雷达等目标自动识别系统的特征提取。例如应用Hough变换对战斗机的外形特征进行提取和自动识别;应用Hough变换辅以信号检测理论解决并行多运动目标的跟踪问题等等。 总之,由以上分析可见,Hough变换有着广泛的关注程度以及良好的应用前景。在计算机视觉和自动目标识别系统中,Hough变换是一个用于边缘线条特征提取的强有力工具,是值得我不断学习和完善工具。 8.参考文献 (1)薛定宇,陈阳泉,基于MATLAB/Simulnk的系统仿真技术与应用,北京:清华大学出版社,2011 (2)赵广元,MATLAB与控制系统仿真实践,北京:北京航空航天大学出版社,2009 (3)黄永安,马路,刘慧敏.MATLAB 7.0/Simulnk 6.0建模仿真开发与高级工程应用,北京:清华大学出版社,2005 (4)张家祥,方凌江,毛全胜基于MATLAB 6.X的系统分析与设计——虚拟现实,西安电子科技大学出版社,2002 (5) 16展开阅读全文
咨信网温馨提示:1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:0574-28810668;投诉电话:18658249818。




实现用Hough变换检测直线的算法.docx



实名认证













自信AI助手
















微信客服
客服QQ
发送邮件
意见反馈



链接地址:https://www.zixin.com.cn/doc/5897358.html