一、实验目的
(1)了解图像复原的目的及意义,加深对图像复原理论的认识。
(2)掌握维纳滤波复原基本原理。
(3)掌握约束最小二乘方复原方法。
(4)掌握盲解卷积复原方法
二、实验内容
(1)维纳滤波复原。
(2)约束最小二乘方复原
(3)盲解卷积复原
三、实验代码及结果、分析
(1)维纳滤波复原
- 代码:
I=imread('E:\大三课件\大三下\数字图像处理\实验\实验5\lena.jpg');
I=rgb2gray(I);
noise=5*randn(size(I));
noise = noise - min(min(noise));
J = double(I) +noise;
R1=wiener2(J,[10 10]); %未知噪声
R2=wiener2(J,[10 10],noise); %已知噪声分布
figure
subplot(2,2,1),imshow(uint8(I));title('原始图像');
subplot(2,2,2),imshow(uint8(J));title('退化图像');
subplot(2,2,3),imshow(uint8(R1));title('盲复原');
subplot(2,2,4),imshow(uint8(R2));title('非盲复原');
- 结果:
- 分析:
- 维纳滤波又叫最小均方差滤波,它的目标是找到一个原图像f的估计图像f',使得它们之间的均方误差最小。 e^2 = E((f-f')^2)
- randa()函数是产生随机噪声,nosize应该是一个矩阵,min(min(noise))表示先取每列中的最小值,再取最小值中的最小值
- 关于维纳滤波函数有wiener2和deconvwnr,分别适用于灰度图像和彩色图像
- R1为未知噪声的分布,R2为已知噪声分布
(2)约束最小二乘方复原方法
- 代码:
I=imread('E:\大三课件\大三下\数字图像处理\实验\实验5\lena.jpg');
I=rgb2gray(I);I = im2double(I);[hei,wid,~] = size(I);
PSF = fspecial('motion', 21, 11);%摄像物体逆时针方向以11角度运动了21个像素
blurred = imfilter(I, PSF, 'conv', 'circular');%运动模糊图像
% 逆滤波结果
If = fft2(blurred);Pf = psf2otf(PSF,[hei,wid]);deblurred =ifft2(If./Pf);
% 运动模糊+高斯噪声
noise_mean = 0;noise_var = 0.00001;
blurred_noisy = imnoise(blurred, 'gaussian',noise_mean, noise_var);
% 约束最小二乘法
p = [0 -1 0;-1 4 -1;0 -1 0];P = psf2otf(p,[hei,wid]);
gama = 0.002;%γ设置成0.001左右会有比较好的效果If = fft2(blurred_noisy);numerator = conj(Pf);
denominator = Pf.^2 + gama*(P.^2);
deblurred2 = ifft2( numerator.*If./ denominator );
subplot(2,3,1),imshow(I);title('原始图像');
subplot(2,3,2), imshow(blurred); title('运动模糊图像');
subplot(2,3,3), imshow(deblurred); title('运动模糊复原')
subplot(2,3,4), imshow(blurred_noisy),title('运动模糊+噪声图像')
subplot(2,3,5), imshow(deblurred2),title('无约束最小二乘法复原');
subplot(2,3,6); imshow(deconvreg(blurred_noisy, PSF,0)); title('deconvreg函数复原');%自带的去模糊deconvreg函数
- 结果:
- 分析:
1、fspecial('type', len,theta)函数,用于预定于滤波算子,type=motion为运动算子,theta参数表示逆时针方向的角度,len表示运动了len个像素
2、约束最小二乘方滤波效果比自带的去模糊deconvreg函数好
3、约束最小二乘方滤波对高噪声和中等噪声产生结果要好于维纳滤波,对于低噪声两种滤波产生结果基本相等
(3)盲解卷积复原方
- 代码:
I=checkerboard(8);
PSF=fspecial('gaussian',7,10);
V=.0001;
BlurredNoisy=imnoise(imfilter(I,PSF),'gaussian',0,V);
WT=zeros(size(I));
WT(5:end-4,5:end-4)=1;
INITPSF=ones(size(PSF));
FUN=inline('PSF+P1','PSF','P1');
[J P]=deconvblind(BlurredNoisy,INITPSF,20,10*sqrt(V),WT,FUN,0);
subplot(131);imshow(I);title('原图像');
subplot(132);imshow(BlurredNoisy);title('运动模糊+噪声图像');
subplot(133);imshow(J);title('盲去卷积');
- 结果:
- 分析:
- 盲解卷积复原是指在没有图像退化先验知识、对退化系统了解不足的条件下,通过观察退化图像的多个图像以某种方式抽出退化信息,进行图像复原
- 函数imnoise 是表示添加噪声污染一幅图像,叫做噪声污染图像函数,g=imnoise(f,'localvar',V)将均值为0,局部方差为V的高斯噪声添加到图像f上,其中V是与f大小相同的一个数组,它包含了每一个点的理想方差值
- Inline()函数:定义一个内置函数,本质上说跟function干的是一样的事,只不过它可以直接内嵌在命令行里,不用另外单独定义function