matlab 模糊图像恢复 数字图像处理

更新时间:2024-05-09 12:51:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验六 模糊图像恢复

一、实验目的

本实验是一个综合性实验,要求学生巩固学习多个知识点和内容,主要有: 1、理解掌握运动图像的退化模型; 2、掌握维纳滤波法的原理和实现方法;

3、在不同的噪声和点扩散函数参数下进行恢复,并比较结果; 4、通过分析和实验得出相应的结论。 二、实验准备

1、运动模糊退化模型:运动模糊是图像退化的一种,可以用数学表达式刻画出来。对线性移(空)不变系统,退化模型可表示为:g(x,y)=h(x,y)*f(x,y)+n(x,y)。对匀速直线运动而言,退化图像为:

g?x,y??T?f?x?x?t?,y?y?t??dt

000

其中x0(t)和y0(t)分别表示x和y方向的运动分量。并假设退化系统是线性移不变的,光学成像过程是完善的,快门开关是瞬间完成的。

对上式进行傅立叶变换,则得频域表达式为

??????G?u,v??g?x,y?exp??j2??ux?vy??dxdy??f?x?x0?t?,y?y0?t??exp??j2??ux?vy??dxdy?dt?????0???????

????T??????F?u,v?exp??j2??ux0?t??vy0?t???dt?F(u,v)H(u,v)T?0其中

H?u,v??exp??j2??ux0?t??vy0?t???dt

T?0假设景物只在x方向匀速运动,在T时间内共移动距离是a,即x0(t)=at/T,y0(t)=0,则 H?u,v???exp??j2?u0T??at?Tdt?sin??ua?exp??j?ua? ?T??ua在Matlab中可用滤波器卷积的方法仿真出运动模糊图像。

h=fspecial(‘motion’,len,theta),表示在theta方向移动len长度,产生运动模糊的点扩散函数h。

blurred=imfilter(I,h,'circular’,’conv’),产生运动模糊图像。 2、维纳滤波法恢复图像:

此方法也叫最小均方误差滤波法,是建立在图像和噪声都是随机过程,图像和噪声不

相关,其中之一的均值为零,灰度估计值与退化图像中的灰度值成线性关系。其基本思想是

?(x,y),使得估计与原图像之间的均方误差在统计意义上最找到原图像f(x,y)的一个估计f小。

?(x,y)]2} e2?E{[f(x,y)?f

?(x,y)在频域的表达其中E{.}表示数学期望,当上式取得最小值时,所得到的估计值f式为:

????Hu,v??F?u,v????G?u,v? 2??H?u,v??Sn?u,v?/Sf?u,v???

其中H(u,v)是点扩散函数h(x,y)的傅里叶变换,H*(u,v)是退化函数H(u,v)的复共轭,Sn (u,v)=|N(u,v)|2、Sf(u,v)=|S(u,v)|2分别是噪声和原图像的功率谱。

而在实际当中,Sn(u,v)、Sf(u,v)未知,特别是Sf(u,v),上式无法直接运用。解决的方法

之一是令Sn(u,v)/ Sf(u,v)等于某个常数k。上式就成了

?H??u,v????u,v???F?G?u,v? 2??H?u,v??k??在Matlab中有专门的函数可以实现维纳滤波法恢复。wn1=deconvwnr(blurred,h),参数部分有多种选择的方法,这个表示用真实的点扩散函数进行恢复。

为了对比,可取不同的参数,以及加入噪声,再恢复,噪声可用imnoise或randn函数生成。细节可参阅matlab相关资料。 三、实验内容与要求

参照以上知识点和过程仿真一幅运动模糊图像,用不同的参数,不同的噪声等情况下进

行恢复,并探讨各量对恢复结果的影响。(可参照教材中插图的参数) 四、实验报告

1、提交经调试正确的程序源代码及相关文档。 2、总结调试程序时遇到的问题及解决方案。 实验程序:

%%%%%两幅图片相加可以使用函数 imadd

I = imread('rice.png'); J = imread('cameraman.tif');

K = imadd(I,J); %%%%%%%%

I = imread('rice.png'); Iplus50 = imadd(I,50);

%h=fspecial(‘motion’,len,theta),表示在theta方向移动len长度,而产生运动模糊的点扩散函数h

I = imread('I:\\lena.bmp');

subplot(2,2,1);imshow(I);title('Original Image——原始图像');

H = fspecial('motion',20,45);%定义的运动模型 MotionBlur = imfilter(I,H,'replicate');

subplot(2,2,2);imshow(MotionBlur);title('Motion Blurred Image——运动模糊图像');

H = fspecial('disk',10);

%blurred=imfilter(I,h,'circular’,’conv’),产生运动模糊图像 blurred = imfilter(I,H,'replicate');

subplot(2,2,3);imshow(blurred);title('Blurred Image——模

糊图像');

H = fspecial('unsharp');

sharpened = imfilter(I,H,'replicate');

subplot(2,2,4);imshow(sharpened);title('Sharpened Image——锐化图像'); %%%%%%%%

I = im2double(imread('I:\\lena.bmp'))/255; subplot(221) imshow(I);

title('Original Image ——原始图像'); % Simulate a motion blur.

LEN = 21;%像素值 THETA = 11;%角度

PSF = fspecial('motion', LEN, THETA);%产生运动模糊的点扩散函数PSF

%blurred=imfilter(I,h,'circular’,’conv’),产生运动模糊图像 blurred = imfilter(I, PSF, 'conv', 'circular'); % Simulate additive noise. noise_mean = 0; noise_var = 0.0001;

blurred_noisy = imnoise(blurred, 'gaussian', ... %高斯噪声 noise_mean, noise_var); subplot(222), imshow(blurred_noisy) title('Simulate Blur and Noise')

% Try restoration assuming no noise. estimated_nsr = 0;

wnr2 = deconvwnr(blurred_noisy, PSF, estimated_nsr); subplot(223), imshow(wnr2)

title('Restoration of Blurred, Noisy Image Using NSR = 0') % Try restoration using a better estimate of the noise-to-signal-power % ratio.

estimated_nsr = noise_var / var(I(:));

wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr); subplot(224), imshow(wnr3)

title('Restoration of Blurred, Noisy Image Using Estimated NSR');

本文来源:https://www.bwwdw.com/article/7aag.html

Top