(四)实验4 图像复原 一、实验主题 学习图像复原的相关原理及实现方法,并掌握逆滤波、维纳滤波的原理与程序实现。 二、实验目的 1.掌握图像复原的基本原理和方法。 2.学习使用程序设计环境。 3.使用设计框架构造应用程序。 4.掌握逆滤波、维纳滤波的原理和实现。 三、实验要求 对图像进行退化处理,如加噪、运动干扰等,根据退化模型设计复原滤波器,如逆滤波、维纳滤波,对图像进行复原,对比原始图、退化图、复原图对复原效果进行评估。 四、实验平台 1、编程平台:MATLAB R2020b 2、编程语言:matlab 五、实验代码 1、图像复原主代码:
% 图像复原
function ImageRestore()
img=imread('lena.bmp');
%图像归一化
img=double(img)/double(max(img(:)));
% img = imnoise(img,'gaussian', 0, 0.001); %加噪
%运动模糊,产生一个沿着theta方向运动长度l的卷积核
l=40;
theta=30;
blur=fspecial('motion', l, theta);
blur=fspecial('disk', 100); % 'average'正方形模板 'disk'圆盘模板均值模糊
% imshow(blur,[]);
% imshow(ifft2(fft2(blur,512,512)),[]);
%对图像进行卷积滤波,产生退化图像
degenerate = imfilter(img, blur, 'conv', 'circular');
% degenerate = imnoise(degenerate,'gaussian', 0, 0.0001); %加噪
% degenerate=LFPFilter(degenerate,80); %低通滤波
%采用 deconvwnr 维纳滤波对图像进行复原,deconvreg 最小二乘,deconvlucy使用lucy richard恢复
restore = deconv2(degenerate, blur);
% restore = deconvwnr(degenerate, blur,0.005);
% restore1=LFPFilter(restore,30); %低通滤波
% restore2=ButtLFPFilter(restore,30,10); %巴特沃兹低通滤波
figure
imshow(img,[]);
figure
imshow(degenerate,[]);
figure
imshow(restore,[]);
% figure
% imshow(restore1,[]);
% figure
% imshow(restore2,[]);
end
2、逆滤波相关代码:
%逆滤波
function restore = deconv2(img,blur)
[r,c]=size(img);
f=fft2(img);
blur1=imresize(blur,r,c);
blur1=imshift(blur1,-floor(size(blur)/2));
fb=fft2(blur1);
fmax=max(abs(fb(:)));
for i=1:r*c
if abs(fb(i))r
Img=[Img;zeros(row-r,c)];
end
if rowc
Img=[Img,zeros(row,col-c)];
end
if col |