1. 程式人生 > >圖象恢復——(逆濾波,維納濾波)

圖象恢復——(逆濾波,維納濾波)

目的:對獲取影象在頻域用高斯函式進行退化併疊加白噪聲,對退化影象進行逆濾波和維納濾波恢復,比較原始影象和恢復影象,對利用逆濾波和維納濾波恢復方法恢復影象進行比較。

一、基本原理

      影象復原是一種客觀的操作,通過使用退化現象的先驗知識重建或恢復一副退化的影象;影象在形成、傳輸和記錄的過程中,由於受多種原因的影響,影象的質量會有下降,典型表現為影象模糊、失真、有噪聲等,這一降質的過程稱為影象的退化。而影象復原試圖利用退化現象的某種先驗知識(即退化模型),把已經退化了的影象加以重建和復原。其目的就是儘可能地減少或去除在獲取影象過程中發的影象質量的下降(退化),恢復被退化影象的本來面目。
      影象復原基本思路:弄清退化原因,建立退化模型,反向推演,恢復影象。
     逆濾波復原過程:對退化的影象進行二位傅立葉變換;計算系統點擴散函式的二位傅立葉變換;引入H(fx,fy)計算並且對結果進行逆傅立葉變換。

      維納濾波:在一定的約束條件下,其輸出與一給定函式(通常稱為期望輸出)的差的平方達到最小,通過數學運算最終可變為一個託布利茲方程的求解問題。維納濾波器又被稱為最小二乘濾波器或最小平方濾波器,目前是基本的濾波方法之一。維納濾波是利用平穩隨機過程的相關特性和頻譜特性對混有噪聲的訊號進行濾波的方法。

逆濾波:簡單的就是將退化函式去除,直接的逆濾波沒有什麼意義,只處理了靠近直流分量的部分,其他不做處理。如果加入巴特沃斯低通濾波器,效果會好點,可是在運動模糊的圖片中就不好使了。

維納斯濾波:使影象儘可能的平滑,可以消除很嚴重的噪聲,回覆影象。最小二乘濾波器。

二、結果圖分析


     逆濾波和維納濾波演算法簡單,使用靈活,有較高的使用精度。

    在帶有噪聲干擾的情況下,逆濾波的效果隨著噪聲的方差值的變大而變小,維納濾波同樣結果,同時恢復結果都帶有不同程度的振鈴效應。但維納濾波的效果要比逆濾波的效果好,且隨著噪聲的加強對比效果變得更明顯。改變K值可以改善逆濾波但不及維納濾波的效果好。

三、完整程式

clc; 
clear;
x=rgb2gray(imread('C:\Users\lenovo\Desktop\zhang.jpg')); 
x1=x(:,:,1);
x1=double(x1); 
[r,r1]=size(x1); 
y1=fftshift(fft2(x1));
[r,r1]=size(y1); 
figure(1);
imshow(x1,[]);
title('原始的影象') ;
figure(2);
imshow(abs(y1),[0,250000]);
title('原始的影象頻譜');
m=1:r; 
m1=1:r1; 
[m,m1]=meshgrid(m,m1);%生成網格空間 
noise=20.*imnoise(zeros(r,r1),'gaussian',0,0.008);%高斯噪聲 
figure(3);  
subplot(1,2,1);
imshow(noise,[]);
title('白噪聲') ;
a=double(21/100);%x方向的最大移動量為ra的0.21倍,可調 
b=double(21/100);%y方向的最大移動量為ca的0.21倍,可調 
t=double(88/100);%移動到最大所需的時間預設為0.88
f=ones(r,r1);   
g=(m-r/2-1).*a+(m1-r1/2-1).*b+eps;   
f=t.*sin(pi.*g).*exp(-j.*pi.*g)./(pi.*g);
h=f'.*y1; 
tu=ifft2(h);  
tu=abs(tu)+noise; 
subplot(1,2,2);
imshow(tu,[]);
title('退化的影象')%原圖傅立葉變換估計值 
y1=h./f'; 
figure(4)
subplot(1,2,1);
imshow(ifft2(y1),[]);
title('逆濾波的結果');
h=fftshift(fft2(tu));
x=fftshift(fft2(noise));
K=x.*conj(x)./(y1.*conj(y1));%計算K值  
w=(f.*conj(f))'.*h./(f.*(f.*conj(f)+K'))'; 
weina=abs(ifft2(w)); 
subplot(1,2,2);
imshow(weina,[]);
title('維納濾波的結果');