2012-11-16 177 views
3

我有兩個圖像,一個是退化的,一個是原始圖像的一部分。我需要使用第二張圖片來增強第一張圖片,並且我需要在frequency domain中執行此操作。我從降級的圖像中截取同一區域,進行FFT,並嘗試計算傳遞函數,但是當我將該函數應用於圖像時,結果非常糟糕。使用MATLAB的圖像去模糊

所以我試着h=fspecial('motion',9,45);是我的傳遞函數,然後用下面給出的代碼重建圖像。

im = imread('home_degraded.png'); 
im = rgb2gray(im); 
h = fspecial('motion',9,45); 
H = zeros(519,311); 
H(1:7,1:7) = h; 
Hf = fft2(H); 
d = 0.02; 
Hf(find(abs(Hf)<d))=1; 
I = ifft2(fft2(im)./Hf); 
imshow(mat2gray(abs(I))) 

我現在有兩個問題:

  1. 怎樣才能通過使用小矩形(我的意思是不使用h=fspecial('motion',9,45);)的傳遞函數?

  2. 我可以使用什麼方法從增強圖像中去除噪點?

Enter image description here

+0

我是否正確地認爲黑色方塊是在模糊之前添加的「基本事實」,因此您可以從清晰圖像中獲得可靠的PSF?還有什麼其他假設在這裏發揮作用?你運動模糊了圖像,使其模糊,或只是使用像平均過濾器? – Bill

+0

@Bill前兩張圖片給我(模糊一個和真正的正方形),我需要增強圖像。問題是我沒有能夠從廣場生成傳遞函數(真實和模糊的一個)所以我做了一個假設並且定義了h = fspecial('motion',9,45);成爲我的psf,工作挺好,因爲右側的增強圖像具有完美的正方形,但它有很多噪音。我怎樣才能擺脫那個或如何使用小方塊來生成傳遞函數。 – extirpation

回答

5

我可以推薦你幾個方法可以做到這一點:

  1. 算術均值濾波:

    f = imfilter(g, fspecial('average', [m n])) 
    
  2. 幾何均值濾波

    f = exp(imfilter(log(g), ones(m, n), 'replicate')) .^ (1/(m*n)) 
    
  3. 調和平均數過濾

    f = (m*n) ./ imfilter(1 ./ (g + eps), ones(m, n), 'replicate'); 
    

    ,其中n和m口罩的大小(例如,你可以設置m = 3n = 3

0

基本上你想要做的事情有兩個步驟(至少):

  1. 通過使用帶有方角的圖像補丁來估計PSF(模糊內核)在其中。
  2. 使用估計內核做卷積到您的模糊圖像

如果你想「猜測」的步驟1中的PSF,這很好,但它更好地計算。

對於第2步,您必須首先使用edgetaper,這會減弱圖像中的振鈴效果,您稱之爲噪聲。

在您使用功能deconvlucy按照以下語法使用非盲解(步驟2):

J = deconvlucy(I,PSF) 

這個反捲積過程增加了一些噪音,特別是如果你的PSF是不是100%準確,但你如果你允許更多的迭代(細節交易,NFL)可以使它更平滑。第一步,如果你不關心你有「銳利」方塊的事實,那麼你可以使用盲解卷積去卷積並得到PSF的一些估計值。 如果您想正確使用並使用銳利的補丁,那麼您可以在任何涉及估計PSF的優化方案中將其用作數據項目標。