1. 程式人生 > >影象復原和重建技術

影象復原和重建技術

1、常見的影象噪聲模型

 影象復原是將影象退化的過程加以估計,並補償退化過程造成的失真,以便獲得未經干擾退化的原始影象或原始影象的最優估值,從而改善影象質量的一種方法。
 典型的影象復原方法是根據影象退化的先驗知識建立一個退化模型,以此模型為基礎,採用濾波等手段進行處理,使得復原後的影象符合一定的準則,達到改善影象質量的目的。

 影象復原
沿著質量降低的逆過程來重現真實的原始影象。通過去模糊函式而去除影象模糊。
 特點
影象增強:實際上是一種對比度拉伸,評價的標準是觀察者主觀感受;
影象復原:則是通過定量的去模糊函式而去除影象的模糊成分。

 影象噪聲
影象獲取過程:影象獲取的環境條件和感測器質量。
影象傳輸過程:傳輸通道受到干擾。
 示例


成像系統鏡頭聚焦不準產生的散焦; 
相機與景物之間的相對運動; 
成像系統存在的各種非線性因素以及系統本身的效能;
射線輻射大氣湍流等因素造成的照片畸變;
成像系統的像差、畸變、有限頻寬等; 
底片感光影象顯示時會造成記錄顯示失真; 
成像系統中存在的各種隨機噪聲 ;

 影象噪聲(Probability density function簡稱PDF)

高斯噪聲:

瑞利噪聲:

伽馬噪聲:

指數分佈噪聲:

均勻分佈噪聲:

脈衝噪聲(椒鹽噪聲):

2、空間濾波影象復原

clc; clear all; close all;
% 載入影象
I = imread('cameraman.tif');
% 椒鹽噪聲


J = imnoise(I, 'salt & pepper');
J = double(J);
figure;
subplot(1, 2, 1); imshow(I, []); title('原始影象');
subplot(1, 2, 2); imshow(J, []); title('椒鹽噪聲的影象');
S1 = medfilt2(J);

figure;
subplot(1, 3, 1); imshow(I, []); title('原始影象');
subplot(1, 3, 2); imshow(J, []); title('椒鹽噪聲影象');
subplot(1, 3, 3); imshow(S1, []); title('中值濾波');

% 最大值濾波
S2 = ordfilt2(J, 25, true(5));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始影象');
subplot(1, 3, 2); imshow(J, []); title('椒鹽噪聲影象');
subplot(1, 3, 3); imshow(S2, []); title('最大值濾波');

S3 = ordfilt2(J, 1, true(5));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始影象');
subplot(1, 3, 2); imshow(J, []); title('椒鹽噪聲影象');
subplot(1, 3, 3); imshow(S3, []); title('最小值濾波');

S4 = ordfilt2(J, 5, true(3));
figure;
subplot(1, 3, 1); imshow(I, []); title('原始影象');
subplot(1, 3, 2); imshow(J, []); title('椒鹽噪聲影象');
subplot(1, 3, 3); imshow(S4, []); title('中值濾波');

3、頻域濾波影象復原

clc; close all; clear all;
% 載入影象
I = imread('origin.jpg');
if ndims(I) == 3
    I = rgb2gray(I);
end
% 三次高斯帶阻濾波器
J1 = GsFilter(I, 60, 30);
J2 = GsFilter(J1, 103, 30);
J3 = GsFilter(J2, 150, 20);
figure;
subplot(1,2,1); imshow(I, []); title('濾波前');
subplot(1,2,2); imshow(J3, []); title('濾波後');

4、逆濾波影象復原


5、維納濾波(最小均方誤差濾波)影象復原

●尋找到一個真實影象的估計值,使它們之間的均方誤差最小。

clc; close all; clear all;
% 載入影象
I = im2double(imread('cameraman.tif'));
figure; imshow(I); title('原始影象');
% 運動模糊濾波器
LEN = 21;
THETA = 11;
PSF = fspecial('motion', LEN, THETA);
blurred = imfilter(I, PSF, 'conv', 'circular');
figure; imshow(blurred); title('退化影象');
% 高斯噪聲
noise_mean = 0;
noise_var = 0.0001;
blurred_noisy = imnoise(blurred, 'gaussian', ...
    noise_mean, noise_var);
figure; imshow(blurred_noisy); title('退化+噪聲影象');
% 逆濾波
estimated_nsr = 0;
wnr2 = deconvwnr(blurred_noisy, PSF, estimated_nsr);figure; imshow(wnr2); title('直接逆濾波影象');
estimated_nsr = noise_var / var(I(:));
wnr3 = deconvwnr(blurred_noisy, PSF, estimated_nsr);figure; imshow(wnr3); title('預估逆濾波影象');

6、約束的最小二乘濾波影象復原

在最小二乘復原處理中,常常需要附加某種約束條件。例如令Q為f的線性運算元,那麼最小二乘方復原的問題可以看成使形式為

最小化問題,這種有附加條件的極值問題可以用拉格朗日乘數法來處理。尋找一個  ,使下述準則函式為最小:                                                                                    

clc; clear all; close all;
I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .01;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);
NOISEPOWER = V*numel(I);
[J, LAGRA] = deconvreg(BlurredNoisy,PSF,NOISEPOWER);
subplot(221); imshow(BlurredNoisy);title('模糊及加噪影象');
subplot(222); imshow(J);title('直接處理');
subplot(223); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA/10));title('加入0.1*LAGRA');
subplot(224); imshow(deconvreg(BlurredNoisy,PSF,[],LAGRA*10));title('加入10*LAGRA');

7、Lucy-Richardson影象復原

       L-R演算法是一種迭代非線性復原演算法,它是從最大似然公式引出來的,影象用泊松分佈加以模型化的。當下面這個迭代收斂時模型的最大似然
      函式就可以得到一個令人滿意的方程:


clc; clear all; close all;
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;
J1 = deconvlucy(BlurredNoisy,PSF);
J2 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V));
J3 = deconvlucy(BlurredNoisy,PSF,20,sqrt(V),WT);
subplot(221);imshow(BlurredNoisy);title('模糊及加噪影象');
subplot(222);imshow(J1);title('直接處理');
subplot(223);imshow(J2);title('加入NI,DP');
subplot(224);imshow(J3);title('加入NI,DP,WT');

8、案例演示:盲卷積影象復原

       最後,讓我們演示基於盲卷積影象復原的程式設計實戰。在影象復原過程中,最困難的問題之一是,如何獲得PSF的恰當估計。那些
不以PSF為基礎的影象復原方法統稱為盲區卷積。
      它以MLE為基礎的,即一種用被隨機噪聲所幹擾的量進行估計的最優化策略。工具箱通過函式deconvblind來執行盲區卷積。

clc; clear all; close all;
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));
[J P] = deconvblind(BlurredNoisy,INITPSF,20,10*sqrt(V),WT);
subplot(221);imshow(BlurredNoisy);title('模糊及加噪影象');
subplot(222);imshow(PSF,[]);title('實際的PSF');
subplot(223);imshow(J);title('復原影象');
subplot(224);imshow(P,[]);title('重構的PSF');