为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > BM3D算法实现图像降噪

BM3D算法实现图像降噪

2021-11-02 2页 doc 5MB 11阅读

用户头像 个人认证

有良

暂无简介

举报
BM3D算法实现图像降噪BM3D算法实现图像降噪BM3D算法实现图像降噪PAGEPAGEPAGE21BM3D算法实现图像降噪广东工业大学《数字图像、数字信号处理及应用》实验报告题目图像处理综合实验院、系(部)自动化学院专业及班级学号姓名日期目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc5"《数字图像、数字信号处理及应用》PAGEREF_Toc5\h0HYPERLINK\l"_Toc6"实验报告PAGEREF_Toc6\h0HYPERLINK\l"_Toc7"2实验要求PAGER...
BM3D算法实现图像降噪
BM3D算法实现图像降噪BM3D算法实现图像降噪PAGEPAGEPAGE21BM3D算法实现图像降噪广东工业大学《数字图像、数字信号处理及应用》实验报告目图像处理综合实验院、系(部)自动化学院专业及班级学号姓名日期目录TOC\o"1-3"\h\z\uHYPERLINK\l"_Toc5"《数字图像、数字信号处理及应用》PAGEREF_Toc5\h0HYPERLINK\l"_Toc6"实验报告PAGEREF_Toc6\h0HYPERLINK\l"_Toc7"2实验要求PAGEREF_Toc7\h4HYPERLINK\l"_Toc8"3实验设备PAGEREF_Toc8\h4HYPERLINK\l"_Toc0"4实验原理PAGEREF_Toc0\h4HYPERLINK\l"_Toc1"利用拉普拉斯算子实现图像锐化PAGEREF_Toc1\h4HYPERLINK\l"_Toc2"利用分段线性函数实现对比度扩展PAGEREF_Toc2\h5HYPERLINK\l"_Toc3"余弦变换(DCT)PAGEREF_Toc3\h6HYPERLINK\l"_Toc4"BM3D降噪算法(BlockMatching3DFilterAlgorithm)PAGEREF_Toc4\h7HYPERLINK\l"_Toc5"5软件设计PAGEREF_Toc5\h8HYPERLINK\l"_Toc6"总体设计PAGEREF_Toc6\h8HYPERLINK\l"_Toc7"详细设计PAGEREF_Toc7\h9HYPERLINK\l"_Toc8"6测试与分析PAGEREF_Toc8\h15HYPERLINK\l"_Toc9"测试步骤PAGEREF_Toc9\h15HYPERLINK\l"_Toc0"比较中值、均值、BM3D滤波信噪比PAGEREF_Toc0\h16HYPERLINK\l"_Toc1"7结论与问题讨论PAGEREF_Toc1\h18HYPERLINK\l"_Toc2"完成设计要求的程度PAGEREF_Toc2\h18HYPERLINK\l"_Toc3"遇到的问题及解决办法PAGEREF_Toc3\h18HYPERLINK\l"_Toc4"存在的不足及改进思路。PAGEREF_Toc4\h19HYPERLINK\l"_Toc5"8参考文献PAGEREF_Toc5\h19HYPERLINK\l"_Toc0"9附录PAGEREF_Toc0\h19HYPERLINK\l"_Toc1"彩色处理结果PAGEREF_Toc1\h201实验目的理解图像平滑和锐化的基本方法;了解图像复原的基本方法;综合使用多种方法改善图像质量。2实验要求(1)利用Photoshop之类的图像处理工具软件,尝试对尽量改善图像质量。(2)综合采用各种合理的方法,编写程序(C/C++/OpenCV、MATLAB、Python……均可)对进行图像质量改善,实现以下目标的权衡折中:a.降低噪声;b.增大对比度;c.锐化增强。3实验设备安装了VC6/VS2010、PSC6、MATLAB的PC机4实验原理利用拉普拉斯算子实现图像锐化锐化处理的目的是突出图像中的细节或者增强被模糊了的细节。锐化处理可以用空间微分来完成。微分算子的响应强度与图像在该点的突变程度有关,图像微分增强了边缘和其他突变(如噪声)而消弱了灰度变化缓慢的区域。由于我们处理的是数字量,最小灰度级的变化是有限的,而且变化发生的最短距离是在两个相邻像素之间。因此,用一阶微分的差值定义一元函数f(x)的二阶微分:二元图像函数f(x,y)的拉普拉斯变换定义为:离散方式:X方向:Y方向:故二维拉普拉斯数字实现由以上两个分量相加:因此拉普拉斯算子用于图像增强的基本方法如下:拉普拉斯算子处理后的图像如下:图SEQ图\*ARABIC1(拉普拉斯处理图像对比图。处理前左,处理后右)利用分段线性函数实现对比度扩展分段线性变换函数的对比度拉伸相对于直方图均衡(直方图均衡只能按照统计特性进行变换)可以更加灵活地控制输出灰度直方图的分布,可以有选择地拉伸某段灰度区间,以改善输出图像。如果一幅图像灰度集中在较暗的区域而导致图像偏暗,可以用灰度拉伸功能来扩展(斜率>1)物体的灰度区间以改善图像;如果图像灰度集中在较亮的区域而导致图像偏亮,也可以用灰度拉伸功能来压缩(斜率<1)物体灰度区间以改善图像质量。如图2所示,线性函数分为3段,转折点在(c,a)和(d,b)。从(0,0)到(c,a)段的斜率为;从(c,a)到(d,b)段的斜率为;从(d,b)到(Mf,Mg)段的斜率为。所以分段函数的达式为:图SEQ图\*ARABIC2(分段线性函数示意图)余弦变换(DCT)离散余弦变换(DiscreteCosineTransform)是与傅里叶变换相关的一种变换,它类似于离散傅里叶变换(DiscreteFourierTransform),但是只使用实数。离散余弦变换相当于一个长度大概是它两倍的离散傅里叶变换,是对实信号定义的一种变换,变换后在频域中得到的也是一个实信号。相比DFT,DCT可以减少一半以上的计算。DCT还有一个很重要的性质(能量集中特性):大多书自然信号(声音、图像)的能量都集中在离散余弦变换后的低频部分,因而DCT在(声音、图像)数据压缩、图像处理等方面得到了广泛的使用。二维余弦变换为:其中f(x,y)是空间域二维向量之元素,x,y=0,1,2,......N-1;F(u,v)是变换系数阵列之元素。式中表示的阵列为N×N二维余弦逆变换为:式中的符号意义同正变换式一样BM3D降噪算法(BlockMatching3DFilterAlgorithm)一些传统的图像视频去噪算法,会在滤除噪声的同时引入人工噪声或对图像有很大的模糊效果,存在很大的局限性。而基于块匹配和三维变换域滤波(BM3D)的图像视频去噪算法则采用了不同的去噪策略。通过搜索相似块并在变换域进行滤波,得到块评估值,最后对图像中每个点进行加权得到最终去噪效果。BM3D算法不仅有一个较高的信噪比,而且视觉效果也很好。因此研究者提出了很多基于BM3D的去噪方法,例如:基于余弦变换的BM3D去噪,基于Anscombe变换域BM3D滤波等等。BM3D算法的大致算法流程为:第1步.初始估计1)逐块估计。对含噪图像中的每一块i)分组。找到它的相似块然后把它们聚集到一个三维数组。ii)联合硬阈值。对形成的三维数组进行三维变换,通过对变换域的系数进行硬阈值处理减弱噪声,然后逆变换得到组中所有图像块的估计值,然后把这些估计值返回到他们的原始位置。2)聚集。对得到的有重叠的块估计,通过对他们进行加权平均得到真实图像的基础估计。第2步.最终估计1)逐块估计。对基础估计图像中的每一块i)分组。通过块匹配找到与它相似的相似块在基础估计图像中的位置,通过这些位置得到两个三维数组,一个是从含噪图像中得到的,一个是从基础估计图像中得到的。ii)联合维纳滤波。对形成的两个三维数组均进行三维变换,以基础估计图像中的能量谱作为能量谱对含噪三维数组进行维纳滤波,然后逆变换得到组中所有图像块的估计,然后把这些估计值返回到他们的原始位置。2)聚集。对得到的有重叠的局部块估计,通过对他们进行加权平均得到真实图像的最终估计。算法大致流程图如下:图SEQ图\*ARABIC3(BM3D算法大致流程图)5软件设计总体设计本次实验主要用到对图像进行了去噪、对比度扩展、锐化增强的处理。其中图像去噪最终使用的是BM3D去噪算法;对比度增强使用的是分段线性对比增强算法;锐化增强是使用拉普拉斯算子实现的。主程序(main函数)的流程图如下图。主函数开始时,先读取如工程目录下面的BMP格式文件的数据。接着按照用户给定的去噪残差进行BM3D算法去噪。BM3D去噪之后的数据再进行分段对比度增强。最后,再对数据进行对比度增强处理。图SEQ图\*ARABIC4(主程序流程图)BM3D算法、对比度增强、锐化增强函数在下一小节(详细设计)里有更加详细的分析,所以这里就不介绍了。详细设计1、锐化增强函数对于锐化增强算子,如果使用普通锐化算子,即由于算子h为常量,所以并不能控制锐化的程度和效果。为了解决这一点,采用MATLAB提供的拉普拉斯锐化算子。在MATLAB命令行中键入:h=fspecial(‘laplacian’,;即可得到算子的值。在MATLAB命令行键入:editfspecial即可查看MATLAB中拉普拉斯算子的详细计算方式。详细的拉普拉斯算子计算方式如下:其中,;;;为用户控制锐化效果的变量,取值在0~1之间(不包含0和1)。详细的代码和注释如下:voidsharp(constBITMAPINFOHEADER*pInfoHead,BYTE*pdata,constDWORDh_len,constdoublegamma){inti,j;doubleG;/*先根据gamma值算出h1,h2,h3*/constdoubleh1=gamma/(gamma+1),h2=1+4/(gamma+1),h3=(1-gamma)/(gamma+1);/*创建临时存储空间,用于存储锐化结果*/BYTE*ptemp=(BYTE*)malloc(sizeof(BYTE)*pInfoHead->biHeight*pInfoHead->biWidth);for(i=1;ibiHeight-1;i++){for(j=1;jbiWidth-1;j++){/*做卷积*/G=pdata[i*h_len+j]*h2-((pdata[(i-1)*h_len+j-1]+pdata[(i-1)*h_len+j+1]+pdata[(i+1)*h_len+j-1]+pdata[(i+1)*h_len+j+1])*h1)-((pdata[(i-1)*h_len+j]+pdata[i*h_len+j-1]+pdata[(i+1)*h_len+j]+pdata[i*h_len+j+1])*h3);/*防止溢出*/if(G>255)ptemp[i*h_len+j]=255;elseif(G<0)ptemp[i*h_len+j]=0;elseptemp[i*h_len+j]=(BYTE)G;}}/*结果复制到输出*/for(i=1;ibiHeight-1;i++){for(j=1;jbiWidth-1;j++){pdata[i*h_len+j]=ptemp[i*h_len+j];}}free(ptemp);}2、中值、均值滤波函数虽然最后的图像去噪算法采用的是BM3D算法,但是因为后面要把BM3D去噪算法与中值滤波算法作比较,所以在这里还是给出详细的设计。中值滤波详细代码及注释如下:voidmedfilt(constBITMAPINFOHEADER*pInfoHead,BYTE*pdata,constDWORDh_len){inti,j,k,z,index;BYTEtemp,nPixel[9];/*创建临时存储空间,用于中值滤波结果*/BYTE*ptemp=(BYTE*)malloc(sizeof(BYTE)*pInfoHead->biHeight*pInfoHead->biWidth);for(i=1;ibiHeight-1;i++){for(j=1;jbiWidth-1;j++){/*先排列9个像素*/nPixel[0]=pdata[(i-1)*h_len+(j-1)];nPixel[1]=pdata[(i-1)*h_len+j];nPixel[2]=pdata[(i-1)*h_len+(j+1)];nPixel[3]=pdata[i*h_len+(j-1)];nPixel[4]=pdata[i*h_len+j];nPixel[5]=pdata[i*h_len+(j+1)];nPixel[6]=pdata[(i+1)*h_len+(j-1)];nPixel[7]=pdata[(i+1)*h_len+j];nPixel[8]=pdata[(i+1)*h_len+(j+1)];/*找中值,这里只需找5次*/for(k=0;k<5;k++){index=0;for(z=0;z<9-k;z++)if(nPixel[index]方案
改为Release模式(否则会造成运行时间多出大概一倍)。3、依次点击“调试”->“开始执行(不调试)”或者“Ctrl+F5”开始图像处理。4、等待4-5分钟,命令行显示“totalfinish!”。如图6所示。5、到工程目录下的“BM3D”夹下打开“”查看处理结果。图SEQ图\*ARABIC6由于要进行彩印,对“”图像处理的结果存放于附录中。比较中值、均值、BM3D滤波信噪比使用MATLAB测试中值、均值、BM3D滤波三个算法的信噪比提高量。信噪比提高量的公式如下:其中,c(x,y)为退化图像;x(x,y)为原始图像;a(x,y)为还原图像。计算信噪比提高量的代码如下:%@imgx:原始图像%@imgc:退化图像%@imga:还原图像functionsnri=snri_cal(imgx,imgc,imga)c_x=imgc-imgx;a_x=imga-imgx;S=sum(sum((c_x-mean(mean(c_x))).^2));N=sum(sum((a_x-mean(mean(a_x))).^2));snri=10*log10(S/N);end接下来先使用MATLAB准备一幅加噪声的图片,编写的MATLAB代码如下:Img=imread(‘’);Imgn=imnoise(cameraman,'gaussian',0,;imwrite(Imgn,‘’);接着在VS2010环境下运行程序,分别对噪声图像“”进行中值、均值、BM3D滤波处理。处理完成之后,编写代码计算信噪比提高量,代码如下:imgx=imread('');%原始图像imgc=imnoise(imgx,'gaussian');%退化图像imga=imread('中值滤波.bmp');%还原图像snri_cal(imgx,imgc,imga)%中值滤波的信噪比提高量imga=imread('均值滤波.bmp');%还原图像snri_cal(imgx,imgc,imga)%均值滤波的信噪比提高量imga=imread('BM3D滤波.bmp');%还原图像snri_cal(imgx,imgc,imga)%BM3D滤波的信噪比提高量以上代码输出的结果如下:中值滤波均值滤波BM3D滤波信噪比提高量(db)从表上的数据可以看出BM3D、均值滤波、中值滤波的信噪比提高量依次递减。其中,BM3D滤波的信噪比提高量最大,所以BM3D的滤波效果比较的好。三种算法的图片如下图所示。图SEQ图\*ARABIC7(原图)图SEQ图\*ARABIC8(中值滤波)图SEQ图\*ARABIC9(均值滤波)图SEQ图\*ARABIC10(BM3D滤波)从上面四个图片的对比来看,中值滤波和均值滤波效果不仅比不上BM3D滤波,而且都使图像模糊化了。所以不管从图像的信噪比提高量来看,或者从图像的处理效果来看,BM3D滤波都远远好于其他两种算法。7结论与问题讨论完成设计要求的程度设计要求:(1)利用Photoshop之类的图像处理工具软件,尝试对尽量改善图像质量。(2)综合采用各种合理的方法,编写程序(C/C++/OpenCV、MATLAB、Python……均可)对进行图像质量改善,实现以下目标的权衡折中:a.降低噪声;b.增大对比度;c.锐化增强。完成设计要求的程度:(1)由于本人对PS的操作技术有限,在用PS对进行处理时,老是感觉不是太过满意,处理结果也残差不齐。(2)综合采用各种合理的方法,编写程序C程序、MATLAB程序对进行了处理。实现了:a.降低噪声;b.增大对比度;c.锐化增强。遇到的问题及解决办法问题1:普通拉普拉斯算子实现锐化增强时无法调整锐化强度。解决:在找了许多资料之后,突然发现MATLAB的锐化算子可以调整锐化强度。虽然不知道里面的原理,但是总算实现了调整锐化强度的效果。问题2:程序运行到free()函数时就崩溃。解决:原因可能有两个:1、连续free了两次内存。2、访问malloc的空间时,越界了。3、free的指针与malloc时的指针位置发生了变化。问题3:在空域对图像进行卷积操作时,结果输出异常。解决:凡是涉及在空域对图像进行卷积操作,都需要先开辟一个与图像大小一致临时空间,处理完之后,再把结果复制到图像中。问题4:对图像处理的过程中,图像出现黑块。解决:需要在图像处理过程中,需要防止或者处理复制长字节变量赋值到短字节变量时产生的精度损失。存在的不足及改进思路。不足1:在对空域卷积时,没有对图像边界进行扩大,而是进行了缩小。也就是不对边界的像素点进行处理。改进思路:先开辟一个与扩大的图像大小相同的临时内存,接着对临时内存清零,再把图像按照对应的位置放入临时内存中不足2:虽然在实验的时候已经对BM3D算法做了许多关于速度方面的优化(比如:去除了几个大循环;两次二维余弦正变换减少到了一次),但是,对“”的处理在release模式下还是要花去4-5分钟。改进思路:可以利用VS的性能探查器查看函数的运行情况,对占用时间多的函数重点优化,才能有的放矢。8参考文献[1]BuadesA,CollB,andMorelJM.Nonlocalimageandmoviedenoising[J].InternationalJournalofComputerVision,2008,76(2):123-139.[2]非局部型三维块匹配去噪算法研究徐忠威[3]改进的BM3D算法在图像重建中的应用杨莹[4]基于离散余弦变换数据压缩算法的图像处理应用张健9附录彩色处理结果图SEQ图\*ARABIC11(原图)图SEQ图\*ARABIC12(的处理图像)该图像使用了BM3D算法滤波、分段线性函数对比度扩展、拉普拉斯数算子对比度增强。
/
本文档为【BM3D算法实现图像降噪】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索