用上述思想实现的灰度图转换功能,执行后的效果图如下:
图3.1 转换后的灰度图像
可以看到转换后的灰度图保留了原图除了颜色之外的所有信息,并且易于实现。而转换之后的位图文件所占存储空间大小只为原图的1/3左右,转换效果也很好。
3.2 图像的平滑滤波
众所周知,实际获取的图像在形成、传输、接受和处理的过程中,不可避免的存在着外部干扰和内部干扰,如光电转换过程中敏感元件灵敏度的不均匀性、数字化过程的量化噪声、传输过程中的误差及人为因素等,均会存在着一定程度的噪声干扰。噪声恶化了图像质量,使图像模糊、特征淹没,给分析带来困难。因此去除噪声,恢复原始图像是图像处理中的一个重要内容。消除图像噪声的工作称之为图像平滑或滤波。平滑的目的有两个:改善图像质量和抽出对象特征。
由于噪声源众多(如光栅扫描、底片颗粒、机械元件、信道传输等),噪声种类复杂(如加性噪声、乘性噪声、量化噪声等),所以相应的平滑方法也多种多样。平滑可以在空间域进行,也可以在频率域进行。这里主要介绍本课题中用到的,空间域上图像平滑的两种常用方法。
3.2.1 噪声消除法
首先介绍本课题中使用的噪声消除法[12],原理代码都很简单但却很实用,在程序中经常使用到。这种去噪方法简单有效。
由传感器或信道或背景粉尘引起的噪声通常呈现孤立的离散性分布,它们常常与邻域像素有着比较明显的差异。噪声消除法平滑的做法是:顺序检测每个像素,如果某个像素的幅度大于其邻域像素平均值一定水平,就认为此像素是噪声,继而用邻域像素平均值取代这一像素值。
我们取一个N×N文(N为奇数)的窗口,设窗口中心像素灰度值为Z,窗口内其他像素值为Zi,Z与Zi灰度值之差为εi,再定义一个统计变量CNT和门限T,CNT初始化为0。将(N2—1)个εi逐个与T比较,如果大于T,CNT就自增,一个窗口处理完毕之后判断CNT的值是否大于约定值Y,如果大于约定值Y,就认为是噪声,用窗口均值代替,否则原值输出。只是有一点要注意:每次处理图像之前都要先用代码拷贝一份原始图片,滤波窗口在原始图片上移动,得到的窗口输出值赋值给拷贝的图片,滤波完成之后再一次性的把新分配图片中的图像数据放回原图片中。也就是说,每次的滤波输出值不能作为下一次滤波窗口中的元素。这样处理整幅图像即可完成噪声消除。噪声消除法原理简单,对单点脉冲噪声有很好的效果,但是要注意门限T的选择,T太大去噪效果不明显,太小又会使图像变得模糊。同时也要注意CNT的个数要根据窗口文数N来选择合适的值,比如N为3时,(N2—1)为8,此时建议CNT选择4左右,N为5时,(N2—1)为24,CNT选择10左右,效果较好。窗口文数N的选择要根据图片中噪声斑点的大小决定,如果噪声斑点大,滤波窗口也就要大一些。反之就小。根据以上分析添加一个对话框用于接收用户关于门限T、CNT计数器、模板文数N的数据输入,然后使用用户输入的参数作为实参调用ImageProcessing.cpp文件中的Noise_Proc函数完成图像的去噪声。
3.2.2 模板平滑
所谓模板平滑[10],就是对于每个像素F(i,j),取以其为中心的模板窗口,把对应于模板窗口每个点的像素F(i±m,j±n)乘以相对应的模板元素T(m,n),求出乘积和:
这个乘积和再乘以每个模板的模板系数,M,N分别为模板窗口高度和宽度的一半。常用的模板有高斯模板和平均模板。模板窗口如下:
图3.2 常用的平滑模板形状 VC++晶片内部缺陷处理+文献综述(5):http://www.751com.cn/jisuanji/lunwen_3066.html