運動模糊影象復原
阿新 • • 發佈:2018-11-20
1.維納濾波
deconvwnr 用wiener濾波器實現影象去模糊
deconvreg 用regularized濾波器實現影象去模糊
deconvlucy 用Lucy-Richardson濾波器實現影象去模糊
deconvbind 用盲反捲積演算法實現影象去模糊
題目是已知模糊核的,我們需要自己嘗試不同的方差找到最合適的。
img=imread('motion.bmp');
img=im2double(img);
subplot(2,2,1),imshow(img),title("initial")
len=30;
theta=11;
PSF=fspecial("motion" ,len,theta);
sVar=var(img(:));
wnr1=deconvwnr(img,PSF,0);
subplot(2,2,2),imshow(wnr1),title("without using NSR")
wnr2=deconvwnr(img,PSF,0.0001/sVar);
subplot(2,2,3),imshow(wnr2),title("with using NSR=0.0001");
wnr3=deconvwnr(img,PSF,0.001/sVar);
subplot(2,2,4),imshow(wnr3),title("with using NSR=0.001");
figure(2 ),imshow(wnr2)
h=fspecial('average');
f=filter2(h,wnr2);
figure(3),imshow(f)
處理之後發現取0.001時效果最好,把影象去除,加以均值濾波(對於高斯噪聲來說略優)。
2.模糊及逆濾波
使用imnoise對模糊後的影象加高斯噪聲。
fspecial是定義核所用的,非常重要。
img=imread('work.jpg');
img=rgb2gray(img);
img=im2double(img);
len=28;
theta=14;
PSF=fspecial("motion",len,theta);
blurred= imfilter(img,PSF,'circular');
% motion blur
subplot(2,3,1),imshow(img),title("原圖")
subplot(2,3,2),imshow(blurred),title("運動模糊")
If=fft2(blurred);
Pf=fft2(PSF,500,500);
deblurred=ifft2(If./Pf);
subplot(2,3,3),imshow(deblurred),title("直接逆濾波")
mean=0;
var=0.0001;
noised=imnoise(blurred,'gaussian',mean,var);
subplot(2,3,4),imshow(noised),title("模糊加噪聲")
Ifn=fft2(noised);
deblurredn=ifft2(Ifn./Pf);
subplot(2,3,5),imshow(deblurredn),title("直接逆濾波")
呵呵,逆濾波不能處理有噪聲的影象哦。