收藏 分销(赏)

基于opencv的图像滤波实验.docx

上传人:pc****0 文档编号:7428622 上传时间:2025-01-04 格式:DOCX 页数:12 大小:1.15MB 下载积分:10 金币
下载 相关 举报
基于opencv的图像滤波实验.docx_第1页
第1页 / 共12页
基于opencv的图像滤波实验.docx_第2页
第2页 / 共12页


点击查看更多>>
资源描述
计算机体系结构 图像的滤波处理 —第二次编程练习 概述: 有关程序:程序运行的时候先输入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为该模板中包含当前像素在内的像素总个数。 (2)模板采用 均值滤波的时候,采用不同大小的掩膜。不同系数的掩膜,得到的滤波效果会有很大的差别。根据公式 其中H为的掩膜的系数矩阵,X为以为中心点周围大小的矩阵的像素点的值。 l 模板一 当采用3*3的模板的时候 -1 -1 -1 -1 8 -1 -1 -1 -1 从模板的系数可以看出,这里计算得到的是中间像素点与周围临近的-1 个像素点像素值之间的差距,因而在第一次尝试中,主要的计算方法是,该模板计算得到的数值加上中间像素点的值,也即就是像素点的值由其与周围-1个像素点的像素值的区别决定,而得到的图像的滤波效果十分差。如下图(对lena图进行3*3的均值滤波处理) 我又重新仔细考虑了原因,根据以上的计算方法,由于噪声点的像素值与周围点的像素值差距十分大,假设周围像素点的值都接近255,而中间噪声点的值接近0,这时得到的中间点的像素值就应该为负值,由于位图的像素点值为0-255无符号整数,因而会直接变为0,这样的点多了,就会使得图像失去原来的性质。 为了解决以上的问题,我开始想到为所有的像素点加一个偏移量,或者是在计算结束后,将得到的负数的值按照一定的规律映射到0-255,但是都没有得到十分理想的结果。 我之后考虑到,由于我们计算得到的是中心像素点相对于邻近点的偏移量,又考虑到噪声相对于邻近点的像素差距很大,因而,可设定一个阈值,如果计算得到的偏移量超过了该阈值,则认为该点是噪声点,使用周围-1个点的像素值(去除噪声点像素值对于均值的影响)的均值替代中心像素点的像素值。如果在阈值范围内,就认为是信号点,不改变该点的像素值,得到了较好的滤波效果。如下图 图片相对于原图的均方误差MSE=110.007835;峰值信噪比 PSNR= 27.716567dB l 模板二  1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 1/9 对于均值滤波还可以采取如上图的滤波掩模系数,也就是将9个点的像素值加起来求平均。下图为lena图的中值滤波效果 图像的MSE=99.638870;PSNR=28.146516 (3)存在的问题 均值滤波器作为一种线性的滤波器,将邻近点的像素的均值作为中心点的像素值,在滤除噪声的同时,也使得图像的边缘或者一些细节的信息丢失,当滤波窗口增大时,滤波的效果增强,但是边缘的模糊程度加深,难以在滤除噪声点的同时保持图像的边缘等细节信息。 2. 中值滤波器 (1)原理 中值滤波是一种非线性数字滤波器技术,经常用于去除图像或者其它信号中的噪声。这个设计思想就是检查输入信号中的采样并判断它是否代表了信号,使用奇数个采样组成的观察窗实现这项功能。观察窗口中的数值进行排序,位于观察窗中间的中值作为输出。然后,丢弃最早的值,取得新的采样,重复上面的计算过程。它对于斑点噪声(en:speckle noise)和椒盐噪声(en:salt-and-pepper noise)来说尤其有用。 (2)实现 采用的滤波窗口,对窗口内的像素点根据像素值进行排序,我这里采用的是冒泡排序的方法,在排序结束之后取中间值作为中心像素点的像素值。(这里的滤波窗口需要为奇数)。由于中值滤波并没有将像素点像素值取平均,对边缘的保护程度要稍强于均值滤波。下图为lena图3*3的中值滤波效果 图片相对于原图的均方误差MSE=136.439793;PSNR=26.781393。 可以看到图片的滤波效果并不是很理想,对于高斯噪声,中值滤波器并不能够很好的滤除噪声,而对于脉冲噪声,如椒盐噪声,由于噪声点的值一般为255或0,一般为滤波窗口的极大值或者极小值,滤波效果会有很大的改善。如下图 相对于原图的MSE=32.402124 PSNR=33.025069dB (3)存在的问题 中值滤波当图片受到噪声污染较为严重的时候,如果一个滤波窗口中的像素点超过20%(经验值),由于噪声的影响,滤波的效果就会变得很差,很多噪声点会难以滤除,如果这时将滤波的窗口加大,就可能使得边缘等细节的信息丢失,使得图像变得模糊。简单的中值滤波很难解决滤波窗口大小的问题。 3. 双边滤波器 (1)原理 双边滤波可以保持边缘,滤波算法中,目标点上的像素值通常是由其所在位置上的周围的一个小局部邻居像素的值所决定。在2D高斯滤波中的具体实现就是对周围的一定范围内的像素值分别赋以不同的高斯权重值,并在加权平均后得到当前点的最终结果。而这里的高斯权重因子是利用两个像素之间的空间距离(在图像中为2D)关系来生成。通过高斯分布的曲线可以发现,离目标像素越近的点对最终结果的贡献越大,反之则越小。其公式化的描述一般如下所述: 为基于空间距离的高斯权重,是对结果进行归一化。 但是如果只考虑了像素间的空间位置上的关系,因此滤波的结果会丢失边缘的信息。这里的边缘主要是指图像中灰度值剧烈变化的边界,而双边滤波就是在高斯滤波中加入了另外的一个权重分部来解决这一问题。双边滤波中对于边缘的保持通过下述表达式来实现: 为基于像素间相似度的高斯权重,用于归一化。 当将两中考量的方式进行综合的时候,就可以得到双边滤波法。如下式 其中 在代码中只要实现根据公式计算高斯空间权重,与高斯像素点权重,就可以实现计算每个像素点的像素值,滤波的效果与均值滤波有了比较大的提升,如下图为cameraman图当高斯空间均方差取50,高斯像素点均方差也取50,窗口大小为3,得到的滤波图像 图片与原图相比较MSE=147.752670; PSNR=26.435450dB 而均值滤波器得到的MSE=305.86439;PSNR=23.27545 下图为3*3的均值滤波器得到的图像 可以明显地看到,双边滤波相对于均值滤波很好的保护了图像的边缘特性。 (3)存在的问题 双边滤波器需要计算高斯空间权重,高斯像素点权重,计算量较大,当图片较大的时候,运算所需要的空间会比较大,运算的时间复杂度也会较大。双边滤波器主要适用于被高斯噪声污染的图片,对于类似于椒盐噪声污染的图片滤波的效果会稍差。 4. 自适应的中值滤波器 (1)原理 自适应中值滤波的思想是根据噪声密度改变滤波窗口的大小,同时对噪声点和信号点采取不同的处理方法。对噪声点进行中值滤波,对信号点保持其灰度值不变。算法的主要思想:假定最大允许的滤波窗口为,先判断滤波窗口的中值是否为噪声点,也就是如果 < <,认为中心值不为噪声点,进入下一步,否则,认为滤波窗口中的噪声,影响到了中心点的像素值,扩大滤波的窗口直到最大的滤波窗口为止。 在第二步中,判断中心点的像素值是否是噪声,也即当 < <,认为是信号点,输出原来的像素值,当中心点的像素值为滤波窗口的最大像素值或最小像素值时,这时认为该点为噪声点,输出中值。 然而,在计算的过程发现,判断一个点是否为噪声点的主要因素为与,当边缘变化十分剧烈的时候,有可能使得一些细节的边缘信息丢失。 为了避免将高频信号点误分为噪声,引入了最小集合距离MD。值为的像素与集合的MD定义为: MD计算的是中心像素与周围像素点像素的差距,如果差距越小的话,就认为该点为噪声点的可能性越小。当MD小于阈值,则该点认为是信号点。 在窗口自适应的时候,如果该点为根据判断之后的噪声点则扩大窗口,在中值输出的时候,输出除了噪声以外的信号点的像素值。得到了很好的滤波效果,如下图 可以看到毛发等边缘信息保存完好。与原图相比的MSE=25.369306 PSNR=34.087718dB 与中值滤波得到MSE=32.402124 PSNR=33.025069dB,有了改善,如果图片的污染程度进一步提高的话,改善的效果会更加明显。 (3)存在的不足 自适应的中值滤波器对椒盐噪声等脉冲噪声的滤波效果十分好,但是对于高斯噪声的滤波效果不是很明显,因为高斯噪声噪声的像素值大多都在 < <之中,按照算法,这样的点认为是非噪声点。在实际操作中,可以先判断,污染图片的噪声是否是脉冲噪声,再进行自适应的中值滤波,或者双边滤波。 三. 滤波效果分析 在滤波效果的分析中,我主要采用了主观的观察,以及用数据MSE和PSNR计算来评价滤波的效果。 如下是MSE(均方差)的定义,I(I,j),K(I,j)分别是两个图像对应点的像素值。 如下是PSNR(峰值信噪比)的定义 峰值信噪比反映的是像素点信号与噪声的比例,愈高愈好,均方差反映的是图像像素点与未污染像素点之间的差距,愈小愈好。 下表是统计了图片库中图片滤波前的MSE PSNR以及滤波后的MSE PSNR。其中主要采用了3*3均值滤波,5*5均值滤波,3*3中值滤波,5*5中值滤波,双边滤波(参数:窗口为3,空间相关sigma为50,像素点相关sigma为50),自适应滤波(改进的阈值为20,最小窗口3,最大窗口9) 图片名称 滤波方法 滤波前MSE 滤波前PSNR/dB 滤波后MSE 滤波后PSNR/dB 01_gray_lenaG 3*3均值滤波 640.108047 20.069271 99.638870 28.146516 01_gray_lenaG 5*5均值滤波 640.108047 20.069271 99.139305 28.168345 01_gray_lenaG 3*3中值滤波 640.108047 20.069271 136.439793 26.781393 01_gray_lenaG 5*5中值滤波 640.108047 20.069271 101.987553 28.045332 01_gray_lenaG 双边滤波 640.108047 20.069271 99.028755 28.173190 01_gray_lenaG 自适应中值滤波 640.108047 20.069271 319.793377 23.082109 02_cameramanG 3*3均值滤波 579.406952 20.368101 305.86439 23.275457 02_cameramanG 5*5均值滤波 579.406952 20.368101 475.321671 21.351800 02_cameramanG 3*3中值滤波 579.406952 20.368101 287.844162 23.539229 02_cameramanG 5*5中值滤波 579.406952 20.368101 420.013702 21.898169 02_cameramanG 双边滤波 579.406952 20.368101 147.752670 26.435450 02_cameramanG 自适应中值滤波 579.406952 20.368101 441.902328 21.677541 03_manG 3*3均值滤波 579.855262 20.497608 120.538963 27.319529 03_manG 5*5均值滤波 579.855262 20.497608 141.115945 26.635043 03_manG 3*3中值滤波 579.855262 20.497608 147.275208 26.449507 03_manG 5*5中值滤波 579.855262 20.497608 131.768344 26.932693 03_manG 双边滤波 579.855262 20.497608 114.856741 27.529239 03_manG 自适应中值滤波 579.855262 20.497608 310.580153 23.209067 04_audreyG 3*3均值滤波 414.793569 21.952483 185.739394 25.441763 04_audreyG 5*5均值滤波 414.793569 21.952483 303.458451 23.309811 04_audreyG 3*3中值滤波 414.793569 21.952483 149.377912 26.387940 04_audreyG 5*5中值滤波 414.793569 21.952483 190.498266 25.331893 04_audreyG 双边滤波 414.793569 21.952483 173.632912 25.734483 04_audreyG 自适应中值滤波(r=60;d=10) 414.793569 21.952483 152.945000 26.285451 05_FDPS 3*3均值滤波 1350.263257 16.826619 239.99835 24.328748 05_FDPS 5*5均值滤波 1350.263257 16.826619 240.033209 24.328090 05_FDPS 3*3中值滤波 1350.263257 16.826619 55.936300 30.653866 05_FDPS 5*5中值滤波 1350.263257 16.826619 139.731228 26.67869 05_FDPS 双边滤波 1350.263257 16.826619 1308.31725 16.963673 05_FDPS 自适应中值滤波 1350.263257 16.826619 50.521260 31.096062 06_xianghuitangPS 3*3均值滤波 945.503234 18.374173 190.118261 25.340565 06_xianghuitangPS 5*5均值滤波 945.503234 18.374173 211.140528 24.885088 06_xianghuitangPS 3*3中值滤波 945.503234 18.374173 64.197116 30.055648 06_xianghuitangPS 5*5中值滤波 945.503234 18.374173 133.837537 26.865024 06_xianghuitangPS 双边滤波 945.503234 18.374173 717.797223 19.570786 06_xianghuitangPS 自适应中值滤波 945.503234 18.374173 53.520724 30.845584 07_tonglinshidaiPS 3*3均值滤波 1162.985427 17.475061 215.969286 24.786884 07_tonglinshidaiPS 5*5均值滤波 1162.985427 17.475061 202.726446 25.061702 07_tonglinshidaiPS 3*3中值滤波 1162.985427 17.475061 54.616497 30.757565 07_tonglinshidaiPS 5*5中值滤波 1162.985427 17.475061 114.957308 27.525438 07_tonglinshidaiPS 双边滤波 1162.985427 17.475061 1057.062443 17.889797 07_tonglinshidaiPS 自适应中值滤波 1162.985427 17.475061 65.992703 29.935844 08_wolfPS 3*3均值滤波 1142.498048 17.552249 179.701774 25.585280 08_wolfPS 5*5均值滤波 1142.498048 17.552249 145.649604 26.497711 08_wolfPS 3*3中值滤波 1142.498048 17.552249 32.402124 33.025069 08_wolfPS 5*5中值滤波 1142.498048 17.552249 75.762209 29.336277 08_wolfPS 双边滤波 1142.498048 17.552249 999.301387 18.133839 08_wolfPS 自适应中值滤波 1142.498048 17.552249 25.369306 34.087718 09_zhouzongliPS 3*3均值滤波 1194.294621 17.359689 258.367470 24.008425 09_zhouzongliPS 5*5均值滤波 1194.294621 17.359689 279.762699 23.772954 09_zhouzongliPS 3*3中值滤波 1194.294621 17.359689 118.351567 27.399063 09_zhouzongliPS 5*5中值滤波 1194.294621 17.359689 160.536688 26.075061 09_zhouzongliPS 双边滤波 1194.294621 17.359689 1131.168519 17.595531 09_zhouzongliPS 自适应中值滤波 1194.294621 17.359689 321.709704 23.056162 10_TaijiG 3*3均值滤波 618.709951 20.215933 76.085795 29.317768 10_TaijiG 5*5均值滤波 618.709951 20.215933 42.196231 31.878067 10_TaijiG 3*3中值滤波 618.709951 20.215933 110.948563 27.679978 10_TaijiG 5*5中值滤波 618.709951 20.215933 50.928238 31.061217 10_TaijiG 双边滤波 618.709951 20.215933 62.210913 30.192138 10_TaijiG 自适应中值滤波 618.709951 20.215933 303.415747 23.310422 可以看到改进算法(双边滤波,自适应中值滤波),在一定程度上PSNR增加,MSE减少,但由于每个图片的大小不同,根据双边滤波,自适应中值滤波的算法,参数的选取不同可能会对滤波效果产生影响。如双边滤波中空间的sigma,与像素的sigma,在很多次的尝试中,我发现对于大多数图片来说50,50有较好的滤波效果,自适应的阈值的设定,对于大多数图片来说20较好。也可以看到,当图片受到噪声污染严重时,改进算法的优势会更加明显。 对于椒盐噪声,改进的自适应中值算法滤波效果十分好,对于高斯分布的噪声,双边滤波效果很好,因而可以考虑在今后结合自适应的中值滤波,与双边滤波得到一个可以同时适用于高斯噪声与椒盐噪声的滤波算法。 四. 总结 在这次编程中,我学习到了如何使用C语言来读取位图,对位图的信息头,文件头,信息,像素点等有了深入的了解,同时也学习了中值滤波,均值滤波,改进的自适应中值滤波,双边滤波等滤波算法,对于不同的滤波算法有了更多的了解。学习了如何评价一个滤波算法的优劣,计算MSE与PSNR值,对各种滤波算法有了更为客观的理解。 总之,这次编程中,我查阅了很多资料,尤其是在提高部分,了解到了更多更为有效的滤波算法,对位图的结构理解更深入,对矩阵元素的引用也有了了解。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服