
数字图像的退化与复原.doc
14页山东建筑大学实验报告学院: 信息与电气工程学院 班级姓名: 学号: 课程:数字图像的退化与复原 实验日期:2013年 12月 31 日 成绩: 一、实验目的1.掌握数字图像的存取与显示方法2.理解数字图像运动模糊、高斯模糊以及其他噪声引起模糊(图像降质现象)的物理本质3.掌握matlab的开发环境4.掌握降质图像的逆滤波复原和维纳滤波复原方法 二、实验原理此实验是对数字图像处理课程的一个高级操作在深入理解与掌握数字图像退化的基础理论上,利用逆滤波与维纳滤波方法对数字图像进行复原图像的退化 数字图像在获取过程中,由于光学系统的像差、光学成像衍射、成像系统的非线性畸变、成像过程的相对运动、环境随机噪声等原因,图像会产生一定程度的退化图像的复原 图像复原是利用图像退化现象的某种先验知识,建立退化现象的数学模型,再根据模型进行反向的推演运算,以恢复原来的景物图像因而图像复原可以理解为图像降质过程的反向过程图像降质的数学模型图像复原处理的关键问题在于建立退化模型输入图像f(x,y)经过某个退化系统后输出的是一幅退化的图像为了讨论方便,把噪声引起的退化即噪声对图像的影响一般作为加性噪声考虑。
原始图像f(x,y)经过一个退化算子或退化系统H(x,y)的作用,再和噪声n(x,y)进行叠加,形成退化后的图像g(x,y)图1表示退化过程的输入和输出关系,其中H(x,y)概括了退化系统的物理过程,就是要寻找的退化数学模型f(x,y)H(x,y)++n (x,y)g(x,y)图1 图像的退化模型数字图像的图像恢复问题可以看作是:根据退化图像g(x,y)和退化算子H(x,y)的形式,沿着反向过程去求解原始图像f(x,y)图像退化的过程可以用数学表达式写成如下形式:g(x,y)=H[f(x,y)]+n(x,y) (1)在这里,n(x,y)是一种统计性质的信息在实际应用中,往往假设噪声是白噪声,即它的频谱密度为常熟,并且与图像不相关在对退化系统进行了线性系统和空间不变系统的近似之后,连续函数的退化模型在空域中可以写成:g(x,y)=f(x,y)*h(x,y)+n(x,y) (2)在频域中可以写成:G(u,v)=F(u,v)H(u,v)+N(u,v) (3)其中,G(u,v)、F(u,v)、N(u,v)分别是退化图像g(x,y)、原图像f(x,y)、噪声信号n(x,y)的傅立叶变换;H(u,v)是系统的点冲击响应函数h(x,y)的傅立叶变换,称为系统在频率域上的传递函数。
可见,图像复原实际上就是已知g(x,y)求f(x,y)的问题或已知G(u,v)求F(u,v)的问题,它们的不同之处在于一个是空域,一个是频域逆滤波逆滤波是非约束复原的一种非约束复原是指在已知退化图像g的情况下,根据对退化系统H和n的一些了解和假设,估计出原始图像,使得某种事先确定的误差准则为最小由于g=Hf+n (4)我们可得:n=g-Hf (5)逆滤波法是指在对n没有先验知识的情况下,可以依据这样的最有准则,即寻找一个,使得H在最小二乘方误差的意义下最接近g,即要使n的模或范数(norm)最小: (6)上式的极小值为: (7)如果我们在求最小值的过程中,不做任何约束,由极值条件可以解出为: (8)对上式进行傅立叶变换得: (9)可见,如果知道g(x,y)和h(x,y),也就知道了G(u,v)和H(u,v).根据上式,即可得出F(u,v),再经过反傅立叶变换就能求出f(x,y)。
逆滤波是最早应用于数字图像复原的一种方法,并用此方法处理过由漫游者、探索者等卫星探索发射得到的图像维纳滤波维纳滤波是最小二乘类约束复原的一种在最小二乘类约束复原中,要设法寻找一个最有估计,使得形式为的函数最小化求这类问题的最小化,常采用拉格朗日乘子算法也就是说,要寻找一个,使得准则函数 (10)为最小求解得到 (11)式中,如果用图像f和噪声的相关矩阵Rf和Rn表示Q,就可以得到维纳滤波复原方法具体维纳滤波复原方法的原理请参考相关图书三、实验仪器和设备1、PC机1台2、原始coins图像文件3、matlab编程软件四、实验内容及步骤(1) 安装Matlab7.5(2) 读取cameraman.tif图像并显示I=imread('cameraman.tif');imshow(I); (3) 设计运动模糊滤波器、设计高斯模糊噪声滤波器运动模糊滤波器:I=imread('cameraman.tif'); noise=0.1*randn(size(I)); psf=fspecial('motion',21,11); blurred=imfilter(I,psf,'circular'); subplot(1,2,2),imshow(blurred); title(‘运动模糊’)subplot(1,2,1),imshow(I);title(‘原图’)显示运动模糊退化图像:修改运动模糊参数及运动模糊图像显示:I=imread('cameraman.tif'); noise=0.1*randn(size(I)); psf=fspecial('motion',50,25); blurred=imfilter(I,psf,'circular'); subplot(1,2,2),imshow(blurred);title(‘运动模糊’) subplot(1,2,1),imshow(I);title(‘原图’)高斯模糊噪声滤波器:I=imread('cameraman.tif'); noise=0.1*randn(size(I)); psf=fspecial('gaussian',21,11); blurred=imfilter(I,psf,'circular'); subplot(1,2,2),imshow(blurred); title(‘高斯模糊’)subplot(1,2,1),imshow(I); title(‘原图’)显示高斯模糊退化图像:高斯模糊噪声滤波器修改参数及显示图像:I=imread('cameraman.tif'); noise=0.1*randn(size(I)); psf=fspecial('gaussian',12,15); blurred=imfilter(I,psf,'circular'); subplot(1,2,2),imshow(blurred);title(‘高斯模糊图像’)subplot(1,2,1),imshow(I);title(‘原图’) (4) 设计逆滤波器,并对降质图像进行复原,比较复原图像与原始图像。
对运动模糊图像进行复原:I=imread('cameraman.tif'); len=10; theta=10; PSF=fspecial('motion',len,theta); Blurredmotion=imfilter(I,PSF,'circular','conv');subplot(2,2,1),imshow(I);title(‘原图’)subplot(2,2,2),imshow(Blurredmotion);title(‘运动模糊图像’) wnr1=deconvwnr(Blurredmotion,PSF); subplot(2,2,3),imshow(wnr1);title(‘复原图像’)对高斯模糊噪声图像进行复原:I=imread('cameraman.tif'); len=10; theta=10; PSF=fspecial('gaussian',len,theta); Blurredgaussian =imfilter(I,PSF,'circular','conv');subplot(2,2,1),imshow(I);title(‘原图’)subplot(2,2,2),imshow(Blurredgaussian);title(‘高斯模糊图像’) wnr1=deconvwnr(Blurredgaussian,PSF); subplot(2,2,3),imshow(wnr1);title(‘复原图像’)(7) 设计维纳滤波器,并对降质图像进行复原,比较复原图像与原始图像。
对运动模糊图像进行复原:I = imread('cameraman.tif');subplot(2,2,1),imshow(I);title(‘原图’)len = 30;theta = 75;PSF = fspecial('motion',len,theta);J = imfilter(I,PSF,'conv','circular');subplot(2,2,2),imshow(J);title(‘运动模糊图像’)wiener_img = deconvwnr(J,PSF);subplot(2,2,3),imshow(wiener_img); title(‘复原图像’)对高斯模糊噪声图像进行复原: I = imread('cameraman.tif'); subplot(2,2,1),imshow(I); title(‘原图’) len = 30; theta = 75; PSF = fspecial('gaussian',len,theta); J = imfilter(I,PSF,'conv','circular'); subplot(2,2,2),imshow(J); title(‘高斯模糊图像’) wiener_img = deconvwnr(J,PSF); subplot(2,2,3),imshow(wiener_img); title(‘复原图像’)(8) 计算退化图像、不同方法复原后图像的信噪比。
I=imread('cameraman.tif');subplot(2,3,1);imshow(I);title('原图');h1 = fspecial('motion',50,50);MotionBlur = imfilter(I,h1);subplot(2,3,2);imshow(MotionBlur);title('运动模糊');h2 = fspecial('motion',20,10);MotionBlur2 = imfilter(I,h2);subplot(2,3,3);imshow(MotionBlur2);title('运动模糊二');B = deconvwnr(MotionBlur2,h2);subplot(2,3,4);imshow(B)。
