平均模板的模板系数为0.11111;高斯模板系数为0.0625。具体实现代码见ImageProcessing.cpp文件中的Average_Smooth和Gauss_Smooth函数。平均模板和高斯模板的处理是针对灰度图像来完成的,但是经过平滑处理后的灰度图像难以用肉眼发现区别,因此这里用二值图像来显示,效果比灰度图像清晰,效果图如下:
图3.3 边缘检测之后的图片
图3.4 平均模板平滑处理后的图片
图3.5 高斯模板平滑处理后的图片
3.2.3 三种去噪方法的比较
噪声消除法原理、代码都很简单,并且对于单点噪声、脉冲噪声、椒盐噪声效果很好,处理速度也快,是种简单易用的去噪声手段,只是要注意模板文数_v的选择和CNT计数器的选择,并且要注意到CNT的选择和N具有相关性,根据多次实验结果来看,建议CNT的值大约为(N2-l)的一半,同时还要注意判断门限T的大小,太大则去噪声效果不好,太小会使图像模糊。
3.3 常用的几种边缘检测算子
边缘提取,又称为边缘检测,属于数字图像处理和计算机视觉中的基本问题,其目的就是提取数字图像中亮度变化明显的像素点。目前存在很多方法可以用于边缘提取,其中大部分可以分为基于一阶导数的方法和基于二阶导数的方法。
基于一阶导数的方法,就是对图像进行一阶导数的计算,然后根据最大和最小值来确定边缘。其实质就是计算原始数据亮度的梯度,然后再图像的亮度梯度中搜寻峰值。对于梯度的计算,在离散情况下,可以表示为:如果I(x)表示点x的亮度,I’(x)表示点x的一阶导数(亮度梯度),那么就有:
一阶导数往往使用模板的方法进行事先,就是一阶导数(或二阶导数)通过带有掩码的原始数据卷积计算得到。
而基于二阶导数的方法,就是对图像进行二阶导数的计算,然后根据零穿越点来确定边缘,这里零穿越点可以是Laplacian过零点或者是非线性差分表示的过零点。本质上讲是使用了亮度梯度的变化率。在理想的连续变化情况下,二阶导数的过零点就对应着梯度中的局部最大值。其实,屋脊边缘可以看做是两个阶梯边缘的组合,只不过是两个阶梯边缘所对应的梯度方向是相反的,这就是使用二阶导数过零点进行屋脊边缘提取的物理依据。如果I(x)表示点x的亮度,I”(x)表示点x亮度的二阶导数,那么有:
常见的边缘检测算子有Robert边缘检测算子,Sobel边缘检测算子,Prewitt边缘检测算子等,下面介绍Robert算子和Sobel算子两种边缘检测方法的计算公式并给出实验结果。
3.3.1 Robert算子
在计算机视觉中,Robert算子属于最早期的边缘提取算法之一,其具体的实现是通过计算对角相邻像素之间差值的平方和来得到。
Robert算子属于一种梯度算子,其数学公式为:
此公式在多数情况下可转化为:
其中,t(x,y)表示目标图像,s(x,y)表示原始图像。
Robert算子的实现代码见ImageProcessing.cpp文件中的Robert_edge_operator函数。
3.3.2 Sobel算子
Sobel算子是一种离散差分算子,用以计算图像亮度梯度的近似值。在每个图像像素点上,Sobel算子的结果要么是所对应的梯度向量,要么是梯度向量的法向量。
Sobel算子的计算是基于水平和垂直方向上的小的、离散的、整数值的掩码在图像上的卷积,所以在计算量上相对较小。另一方面,Sobel算子所产生的梯度近似值是相对粗糙的,特别是对于图像的高频变化信息。
将原始图像表示为s(X,y),那么根据水平和垂直方向上的倒数近似计算所得到的图像可以分别表示为tH(x,y)和tV(x,y)。使用3x3的掩码,具体公式计算如下: VC++晶片内部缺陷处理+文献综述(6):http://www.youerw.com/jisuanji/lunwen_3066.html