计算机体系结构 图像的滤波处理图像的滤波处理——第二次编程练习第二次编程练习概述:概述:有关程序:有关程序:程序运行的时候先输入 MSE PSNR 的输出文件地址,再输入希望滤波的图 片地址,接着输入原来未污染的图片地址,这时输出受污染的图片与原图的 MSE, PSNR, 接着选择滤波器类型,输出滤波图片保存位置,同时写入滤波后的 MSE,PSNR这时用户可 以选择重新换一张图片滤波或者对同一张图片进行不同滤波处理 有关报告:有关报告:报告第一部分介绍程序实现的主要功能,第二部分介绍滤波实现理论思路, 第三部分对滤波的结果进行量化分析(对提供的 10 张图片分别进行不同窗口大小的均值, 中值滤波,改进的自适应中值滤波,以及双边滤波,并对结果分析,计算滤波后的 MSE,PSNR,并附表格第四部分主要是编程的心得体会一一. 主要编程实现的功能主要编程实现的功能主要对输入的图像进行了基于 3*3 窗口,以及 5*5 窗口的线性均值滤波;基于 3*3 窗口, 以及 5*5 窗口的非线性的中值滤波在提高部分,性滤波的基础之上,采用了同时考 虑像素点与中心像素点距离,以及像素值差距的双边滤波器;在非线性的中值滤波器的基 础上,采用了自适应的中值滤波器,也即根据窗口中噪声点的多少自动地调节滤波窗口的 大小,这两种改进的滤波方法都在滤除噪声点的同时保护边缘特性,其中双边滤波器对高 斯噪声的滤波效果较为明显,而自适应的中值滤波器对于椒盐噪声的滤波效果较好。
二二. 设计思路设计思路 (一)对图片进行基本的打开,保存等操作(一)对图片进行基本的打开,保存等操作 在刚开始编程的时候,没有了解到可以调用 opencv 的库函数进行图片的调用,就采取 了直接读取图片的文件头信息头的方式,进行图片的读入以及写入操作在这个过程中, 我也了解到了位图的信息头,文件头,像素点的表达方式 位图文件由三部分组成:文件头 + 位图信息 + 位图像素数据,如下为位图文件头的 结构体 typedef struct tagBITMAPFILEHEADER { WORD bfType; DWORD bfSize; WORD bfReserved1; WORD bfReserved2; DWORD bfOffBits; } BITMAPFILEHEADER;位图信息中所记录的值用于分配内存,设置调色板信息,读取像素值等如下为位图的 信息结构体, typedef struct tagBITMAPINFO {BITMAPINFOHEADER bmiHeader;RGBQUAD bmiColors[1]; } BITMAPINFO;位图信息头包含了单个像素所用字节数以及描述颜色的格式,此外还包括位图的宽度、计算机体系结构 高度、目标设备的位平面数、图像的压缩格式。
以下是位图信息头结构的定义:typedef struct tagBITMAPINFOHEADER{ // bmih DWORD biSize; LONG biWidth; LONG biHeight; WORD biPlanes; WORD biBitCount DWORD biCompression; DWORD biSizeImage; LONG biXPelsPerMeter; LONG biYPelsPerMeter; DWORD biClrUsed; DWORD biClrImportant; } BITMAPINFOHEADER;在实际的操作中,我们可以通过定义位图的信息头,文件头等结构体,通过读入的方式, 来引用结构体中像素点的像素值,图片的长度,宽度等下图为使用读入的方法查看图片 的信息然而在之后,我了解到可以使用 opencv 的库函数进行操作,就直接使用 cvLoadImage, 这个函数进行图片的读入,使用 image->imageData 的方式来引用图片的像素点值,从而进 行滤波的操作二)不同滤波器实现原理(二)不同滤波器实现原理 1. 均值滤波器均值滤波器 ((1)原理)原理 均值滤波也称为线性滤波,其采用的主要方法为邻域平均法。
线性滤波的基本原理是计算机体系结构 用均值代替原图像中的各个像素值,即对待处理的当前像素点(x,y) ,选择一个模板,该 模板由其近邻的若干像素组成,求模板中所有像素的均值,再把该均值赋予当前像素点(x,y) ,作为处理后图像在该点上的灰度值 g(x,y) ,即,m 为1g( , )( , )x yf x ym该模板中包含当前像素在内的像素总个数 (2)模板采用 均值滤波的时候,采用不同大小的掩膜不同系数的掩膜,得到的滤波效果会有很大的差 别根据公式, i jyHX其中 H 为的掩膜的系数矩阵,X 为以为中心点周围大小的矩阵的像素点的值n n, i jyn n模板一 当采用 3*3 的模板的时候 -1-1-1-18-1-1-1-1从模板的系数可以看出,这里计算得到的是中间像素点与周围临近的-1 个像素点n n 像素值之间的差距,因而在第一次尝试中,主要的计算方法是,该模板计算得到的数 值加上中间像素点的值,也即就是像素点的值由其与周围-1 个像素点的像素值的n n 区别决定,而得到的图像的滤波效果十分差。
如下图(对 lena 图进行 3*3 的均值滤波 处理)我又重新仔细考虑了原因,根据以上的计算方法,由于噪声点的像素值与周围点的像 素值差距十分大,假设周围像素点的值都接近 255,而中间噪声点的值接近 0,这时得到的 中间点的像素值就应该为负值,由于位图的像素点值为 0-255 无符号整数,因而会直接变 为 0,这样的点多了,就会使得图像失去原来的性质计算机体系结构 为了解决以上的问题,我开始想到为所有的像素点加一个偏移量,或者是在计算结束 后,将得到的负数的值按照一定的规律映射到 0-255,但是都没有得到十分理想的结果 我之后考虑到,由于我们计算得到的是中心像素点相对于邻近点的偏移量,又考虑到 噪声相对于邻近点的像素差距很大,因而,可设定一个阈值,如果计算得到的偏移量超过 了该阈值,则认为该点是噪声点,使用周围-1 个点的像素值(去除噪声点像素值对于n n 均值的影响)的均值替代中心像素点的像素值如果在阈值范围内,就认为是信号点,不 改变该点的像素值,得到了较好的滤波效果如下图图片相对于原图的均方误差 MSE=110.007835;峰值信噪比 PSNR= 27.716567dB模板二1/91/91/91/91/91/91/91/91/9对于均值滤波还可以采取如上图的滤波掩模系数,也就是将 9 个点的像素值加起来求平 均。
下图为 lena 图的中值滤波效果计算机体系结构 图像的 MSE=99.638870;PSNR=28.146516((3)存在的问题)存在的问题 均值滤波器作为一种线性的滤波器,将邻近点的像素的均值作为中心点的像素值,在 滤除噪声的同时,也使得图像的边缘或者一些细节的信息丢失,当滤波窗口增大时,滤波 的效果增强,但是边缘的模糊程度加深,难以在滤除噪声点的同时保持图像的边缘等细节 信息2. 中值滤波器中值滤波器 ((1)原理)原理 中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声 这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成 的观察窗实现这项功能观察窗口中的数值进行排序,位于观察窗中间的中值作为输出 然后,丢弃最早的值,取得新的采样,重复上面的计算过程它对于斑点噪声(en:speckle noise)和椒盐噪声(en:salt-and-pepper noise)来说尤其有用2)实现)实现 采用的滤波窗口,对窗口内的像素点根据像素值进行排序,我这里采用的是冒泡排n n 序的方法,在排序结束之后取中间值作为中心像素点的像素值。
(这里的滤波窗口需要为奇 数) 由于中值滤波并没有将像素点像素值取平均,对边缘的保护程度要稍强于均值滤波 下图为 lena 图 3*3 的中值滤波效果计算机体系结构 图片相对于原图的均方误差 MSE=136.439793;PSNR=26.781393可以看到图片的滤波效果并不是很理想,对于高斯噪声,中值滤波器并不能够很好的滤 除噪声,而对于脉冲噪声,如椒盐噪声,由于噪声点的值一般为 255 或 0,一般为滤波窗 口的极大值或者极小值,滤波效果会有很大的改善如下图相对于原图的 MSE=32.402124 PSNR=33.025069dB((3)存在的问题)存在的问题 中值滤波当图片受到噪声污染较为严重的时候,如果一个滤波窗口中的像素点超过 20%(经验值) ,由于噪声的影响,滤波的效果就会变得很差,很多噪声点会难以滤除,如 果这时将滤波的窗口加大,就可能使得边缘等细节的信息丢失,使得图像变得模糊简单 的中值滤波很难解决滤波窗口大小的问题计算机体系结构 3. 双边滤波器双边滤波器 ((1)原理)原理双边滤波可以保持边缘,滤波算法中,目标点上的像素值通常是由其所在位置上的周围 的一个小局部邻居像素的值所决定。
在 2D 高斯滤波中的具体实现就是对周围的一定范围 内的像素值分别赋以不同的高斯权重值,并在加权平均后得到当前点的最终结果而这里 的高斯权重因子是利用两个像素之间的空间距离(在图像中为 2D)关系来生成通过高斯 分布的曲线可以发现,离目标像素越近的点对最终结果的贡献越大,反之则越小其公式 化的描述一般如下所述:1( )( )( ) ( , )h xkxfcx d ( )( , )dkxcx d 为基于空间距离的高斯权重,是对结果进行归一化cdk但是如果只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息 这里的边缘主要是指图像中灰度值剧烈变化的边界,而双边滤波就是在高斯滤波中加入了 另外的一个权重分部来解决这一问题双边滤波中对于边缘的保持通过下述表达式来实现:1( )( )( ) ( ( ),( ))rh xkxfs ff x d ( )( ( ),( ))rkxs ff x d 为基于像素间相似度的高斯权重,用于归一化s( )rkx当将两中考量的方式进行综合的时候,就可以得到双边滤波法。
如下式1( )( )( ) ( , ) ( ( ),( ))h xkxfcx s ff其中 21( , )()2( , )ddx cxe 21(( ),( ))()2( , )rff sxe 在代码中只要实现根据公式计算高斯空间权重,与高斯像素点权重,就可以实现计算每 个像素点的像素值,滤波的效果与均值滤波有了比较大的提升,如下图为 cameraman 图当 高斯空间均方差取 50,高斯像素点均方差也取 50,窗口大小为 3,得到的滤波图像计算机体系结构 图片与原图相。