机器视觉统计图像中火柴的根数.doc_第1页
机器视觉统计图像中火柴的根数.doc_第2页
机器视觉统计图像中火柴的根数.doc_第3页
机器视觉统计图像中火柴的根数.doc_第4页
机器视觉统计图像中火柴的根数.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

精品文档一题目统计图像中火柴的根数这是我在网上找到火柴的图片。经过我的计数,一共有十五根火柴。一 摘要输入原图像 边缘化 hough变换 合并直线 重构火柴 得出结论三理论知识:边缘化不同图像灰度不同,边界处一般会有明显的边缘,利用此特征可以分割图像。需要说明的是:边缘和物体间的边界并不等同,边缘指的是图像中像素的值有突变的地方,而物体间的边界指的是现实场景中的存在于物体之间的边界。有可能有边缘的地方并非边界,也有可能边界的地方并无边缘。另外,成像过程中的光照和噪声也是不可避免的重要因素。Prewitt算子对噪声有抑制作用。 Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。Hough变换检测直线Hough变换是图像处理中从图像中识别几何形状的基本方法之一。Hough变换的基本原理在于利用点与线的对偶性,将原始图像空间的给定的曲线通过曲线表达形式变为参数空间的一个点。这样就把原始图像中给定曲线的检测问题转化为寻找参数空间中的峰值问题。也即把检测整体特性转化为检测局部特性,比如直线。设已知一黑白图像上画了一条直线,要求出这条直线所在的位置。直线的方程是用y=k*x+b来表示,其中k和b是参数,分别是斜率和截距。过某一点(x0,y0)的所有直线的参数都会满足方程y0=kx0+b。即点(x0,y0)确定了一族直线。方程y0=kx0+b在参数k-b平面上是一条直线,(你也可以是方程b=-x0*k+y0对应的直线)。这样,图像x-y平面上的一个前景像素点就对应到参数平面上的一条直线。我们举个例子说明解决前面那个问题的原理。设图像上的直线是y=x,我们先取上面的三个点:A(0,0),B(1,1),C(2,2)。可以求出,过A点的直线的参数要满足方程b=0,过B点的直线的参数要满足方程1=k+b,过C点的直线的参数要满足方程2=2k+b,这三个方程就对应着参数平面上的三条直线,而这三条直线会相交于一点(k=1,b=0)。同理,原图像上直线y=x上的其它点(如(3,3),(4,4)等)对应参数平面上的直线也会通过点(k=1,b=0)。Hough变换检测直线思想为:在原始图像坐标系下的一个点对应了参数坐标系中的一条直线,同样参数坐标系的一条直线对应了原始坐标系下的一个点,然后,原始坐标系下呈现直线的所有点,它们的斜率和截距是相同的,所以它们在参数坐标系下对应于同一个点。这样在将原始坐标系下的各个点投影到参数坐标系下之后,看参数坐标系下有没有聚集点,这样的聚集点就对应了原始坐标系下的直线。合并直线相似判据我们知道火柴是有一定的宽度,换句话说一根火柴可能会检测出两根直线,那么我们就要合并他。如果两个直线两个峰值点对应的rho之差小于某个值约为70,并且两个峰值点对应的theta角度之差小于大概15度,则认为这两个线段是在同一根火柴棒上的。我们这样做还能将火柴提取出来的平行边缘合并,并且合并了属于同一条直线上的间断的线段。合并的方法是这样的:在检测出已经属于同一根火柴棒的前提下,检测到的长得那根代替短的那根。这样确保一根火柴只有一根线。这样我们在统计火柴个数的时候不会出错。四 实验结果分析:首先读入原始图像然后利用边缘检测算子Prewitt算子分割图像。虽然有可能有边缘的地方并非边界,也有可能边界的地方并无边缘,但是在本题中可以很好的提取图像边缘。第三步:利用hough变换将曲线问题转化为提取峰值点的提取,峰值点个数对应了线段的个数。但是图像经过边缘检测之后所得的图像并不是完美平滑的直线,可能两个峰值代表的是同一根火柴,只是从上图看,他们是断开的。所以提取的峰值点数并不能完全代表火柴的根数,只能算是线段的条数。在这里,我们可以利用houghlines()函数:lines=houghlines(M,theta,rho,peaks,FillGap,35,MinLength,25);将峰值所对应的线段找到。在这里就需要我们检验同一直线上的线段并将它们合并为一条直线。我们知道火柴是有一定的宽度,换句话说一根火柴可能会检测出两根直线,那么我们就要合并他。如果两个直线两个峰值点对应的rho之差小于某个值约为70,并且两个峰值点对应的theta角度之差小于大概10度,则认为这两个线段是在同一根火柴棒上的。我们这样做还能将火柴提取出来的平行边缘合并,并且合并了属于同一条直线上的间断的线段。合并的方法是这样的:在检测出已经属于同一根火柴棒的前提下,检测到的长得那根代替短的那根。这样确保一根火柴只有一根线。这样我们在统计火柴个数的时候不会出错。最后,重构火柴,得出火柴数。我们将保留的线段标记为1,舍弃的标记为0,相加所有的值相加即为火柴的根数。最终火柴数目num=15。五 总结感受: 这次大作业让我全面的了解了图像处理,将以前所学只是融汇贯通。就这一次用了很多原理,比如hough变换,边缘提取。尤其是hough变换,将图像平面的点对应到参数平面上的线让我大开眼界。而边缘提取,采用Prewitt算子,降声噪,这很关键没有这一步,将会出现很多误差峰值点。为了了解他们我去图书馆看了很多书,学习了很多案例。但是还有很多需要自己思考,去尝试。 在自己作业中,for,if语句也让我很头疼理清关系也发费了不少时间。最后火柴数总是不能达到计数值,在一开始总认为是程序出现了问题,忙活了好久,却不能解决问题。最终在观察matlab给出的图形是才发现,误差给的太大,导致峰值点被忽略。在改变了角度之后,终于统计出了所有的火柴,顺利完成了作业。我觉得用这种方法统计火柴根数很方便,但是也会必然的存在误差,在这个程序中rho之差与theta角度之差的确认对于误差的减少至关重要。想要确定无误的统计,还更多的知识需要我去掌握。这次作业让我认识到了自己的很多不足,也让我了解了很多知识。六 附录程序:I=imread(E:1.jpg);I=rgb2gray(I);figure;imshow(I);M=edge(I,prewitt);figure;imshow(M);H,theta,rho=hough(M);figure;imshow(H,XData,theta,YData,rho,InitialMagnification,fit);xlabel(theta),ylabel(rho);axis on,axis normal,hold on;peaks=houghpeaks(H,1000,threshold,45);x=theta(peaks(:,2);y=rho(peaks(:,1);plot(x,y,s,color,red);lines=houghlines(M,theta,rho,peaks,FillGap,35,MinLength,25);for i=1:length(lines) for j=i+1:length(lines) if (abs(lines(i).theta-lines(j).theta)10)&(abs(lines(i).rho-lines(j).rho)norm(lines(j).point1-lines(j).point2) lines(j)=lines(i); else lines(i)=lines(j); end end end end %figure;imshow(I);hold onfor k=1:length(lines) xy=lines(k).point1;lines(k).point2; plot(xy(:,1),xy(:,2),LineWidth,8,Color,blue);end for n=1:length(lines) lines(n).mark=1;endfor n=1:length(lines) if(lines(n).mark=0) continue; end for m=n+1:length(lines) if(lines(n).point1=lines(m).point1) lines(m).mark=0; end endendnum=0;for i=1:length(lines) num=num+lines(i).mark;endnum=nu

温馨提示

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

评论

0/150

提交评论