重庆邮电大学本科毕业设计(论文)
此外,在实际应用中,检测效果还与滤波模板大小有关,当N?b2??1时有较好的检测效果。
Canny算子检测方法的优点:①低误码率,很少把边缘点误认为非边缘点;②高定位精度,即精确地把边缘点定位在灰度变化最大的像素上;③抑制虚假边缘。
算法这张照片除了罗伯茨算子中使用一个模板,模板操作是一种图像处理邻域处理,有许多图像效果可以使用模板操作如平滑、中值滤波、油画效果,斜角的形象。在运用模板的计算过程,需要先定义一个可用的模板,模板的大小通常是3*3尺寸的。操作时,模板中心对应于图像的每个像素的位置,然后按照模板对应的中心像素与周围像素的公式计算,计算结果的输出值对应的像素的图像。
这些经典的边缘检测算子,尽管不同,有不同的优势,但他们也有一个共同的特点:每个操作符对应于一组预定义的边缘是最适合使用,也就是说它们的目标。他们的目标应用程序,这是优势可以帮助我们来完成特定的任务。这个操作符的限制,一般问题或未知问题,预定义的利润率可能不会达到最好的结果。
第四章 算法的选择和实现
近年来,人们对图像分析和处理的发展很快,这是一个理论与实践的结合。图像分析是基于和众多的学科领域,在众多不同学科的渗透的结果,理论实践,在高科技领域的学科中占有重要的地位。图像边缘检测,在实践中具有重要的应用一直是热图像边缘检测和困难,到目前为止,许多边缘检测方法,其中Robert算子、Sobel算子、Prewitt算子、Laplace算子、Prewitt算子、Krisdl算子、Canny算子、Gauss边缘检测算子、使用平滑技术来提取图像的边缘,利用微分提取图像边缘和图像边缘提取的方法利用小波分析技术是一种常见的方法,但是算法的结果是不同的。
所以,在本文中,我们会选择电信的图像边缘检测与提取方法:即Canny算子。运用Matlab语句进行编程实现。
第一节 边缘检测与识别算法
基于精明的边缘检测算法程序,基于分类算法为圆形和矩形进展的结果,原始图像的各种特征都是一样的,只是如何变形注释。
识别程序所用的核心程序代码如下:
- 26 -
重庆邮电大学本科毕业设计(论文)
a=max(khoangcach{k}); b=min(khoangcach{k}); c=dt(k).Area; dolech=a-b; vuong = c/(4*b^2)
chunhat=c/(4*b*(a^2-b^2)^0.5); tamgiacdeu=(c*3^0.5)/((a+b)^2); elip =c/(a*b*pi);
thoi= (c*( a^2 - b^2 )^0.5) / (2*a^2*b) if dolech < 10
text(s(k).Centroid(1)-20,s(k).Centroid(2),'圆') elseif (vuong < 1.05 ) & (vuong > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'正方形') elseif (elip < 1.05 ) & (elip > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'椭圆') elseif (thoi < 1.05 ) & (thoi > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'菱形') elseif ((chunhat <1.05) & (chunhat >0.95))
text(s(k).Centroid(1)-20,s(k).Centroid(2),'长方形') elseif (tamgiacdeu < 1.05 ) & (tamgiacdeu > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'三角形')
其中,a为图像中心到边缘的最大距离,b为图像中心到边缘的最小距离。如果图像为标准的话,各公式算出的结果应均为1。本程序允许有5%的误差,所以判断参数的范围都是在0.95到1.05之间。程序中各个公式都是根据各种形状的面积计算的特征来确定的。
如椭圆的面积为s??ab。
对椭圆进行边缘提取,并根据求出的圆形度判断出该图形为椭圆。 判断程序代码如下: a=max(khoangcach{k}); b=min(khoangcach{k}); c=dt(k).Area; elip =c/(a*b*pi);
- 27 -
重庆邮电大学本科毕业设计(论文)
elseif (elip < 1.05 ) & (elip > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'椭圆')
对三角形进行边缘提取,并根据求出的圆形度和矩判断出该图形为三角形。
判断程序代码如下: a=max(khoangcach{k}); b=min(khoangcach{k}); c=dt(k).Area;
tamgiacdeu=(c*3^0.5)/((a+b)^2);
elseif (tamgiacdeu < 1.05 ) & (tamgiacdeu > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'三角形')
对圆进行边缘提取,并根据求出的圆形度和矩判断出该图形为圆。 判断程序代码如下: a=max(khoangcach{k}); b=min(khoangcach{k}); dolech=a-b; if dolech < 10
text(s(k).Centroid(1)-20,s(k).Centroid(2),'圆')
对菱形进行边缘提取,并根据求出的圆形度和矩判断出该图形为菱形。 判断程序代码如下: a=max(khoangcach{k}); b=min(khoangcach{k}); c=dt(k).Area;
thoi= (c*( a^2 - b^2 )^0.5) / (2*a^2*b) elseif (thoi < 1.05 ) & (thoi > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'菱形')
对正方形进行边缘提取,并根据求出的圆形度和矩判断出该图形为正方形。
判断程序代码如下:
- 28 -
重庆邮电大学本科毕业设计(论文)
b=min(khoangcach{k}); c=dt(k).Area; vuong = c/(4*b^2)
elseif (vuong < 1.05 ) & (vuong > 0.95 )
text(s(k).Centroid(1)-20,s(k).Centroid(2),'正方形')
对长方形进行边缘提取,并根据求出的圆形度和矩判断出该图形为长方形。
判断程序代码如下: a=max(khoangcach{k}); b=min(khoangcach{k}); c=dt(k).Area;
chunhat=c/(4*b*(a^2-b^2)^0.5);
elseif ((chunhat <1.05) & (chunhat >0.95))
text(s(k).Centroid(1)-20,s(k).Centroid(2),'长方形')
第二节 仿真实验及结果分析
相对来说,用Sobel算子进行边缘检测得到的图像效果较好,因为Sobel算子提供了精确的边缘方向估计。但是Sobel算子也存在着一些不足,仿真过程中会出现边缘多像素点的问题。相比于Sobel算子,Canny算子具有更好的优势,它能够有效的克服Sobel算子的缺点,并且能减弱噪声对识别性能的影响。
一、仿真实验
选取的原始图像如图4-1所示,通过编写matlab程序,分别利用sobel算法,prewitt算法,roberts算法,Canny算法和log算法对该jpg格式的图片进行边缘提取,所的结果如图4-2和4-3所示。
- 29 -
重庆邮电大学本科毕业设计(论文)
图4-1 原始图像
图4-2(a) sobel算法边缘提取图像
图4-2(b) prewitt算法边缘提取图像
- 30 -