【CV】圖像去模糊(逆濾波)

###Date: 2018.5.8函數

================================================編碼

轉載自:http://www.javashuo.com/article/p-migvxzge-eb.html spa


引言

圖像模糊是一種拍攝常見的現象,我曾在圖像去模糊(維納濾波) 介紹過。這裏再也不詳述,只給出物理模型,這裏咱們仍在頻率域表示 
.net

G(u,v)=H(u,v)F(u,v)+N(u,v)(1)G(u,v)=H(u,v)F(u,v)+N(u,v)(1)

其中提到最簡單的復原方法是直接作逆濾波(Inverse filter)。 
F^(u,v)=G(u,v)H(u,v)(2)F^(u,v)=G(u,v)H(u,v)(2)

該除法是陣列操做,即按位除。 
在含有噪聲狀況下,將(1)式兩端除以 H(u,v)H(u,v)  
F^(u,v)=F(u,v)+N(u,v)H(u,v)(3)F^(u,v)=F(u,v)+N(u,v)H(u,v)(3)

這裏 N(u,v)N(u,v) 未知,式子代表,即便知道退化函數也不能準備復原圖像。還有當退化函數 H(u,v)H(u,v) 是零或者很是小的值,則 N(u,v)H(u,v)N(u,v)H(u,v) 很容易支配整個式子。 
下面我將用代碼說明一下逆濾波,這裏我採用直接編碼形式。對了,前面我提到過,當噪聲信息比 NSR 等於0時,此時維娜濾波等同於逆濾波。所以能夠直接使用matlab自帶deconvwnr函數,將第三個參數 NSR 設置成0便可,省事的同窗能夠試一下。

代碼

 
 
  
  
           
  
  
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
close all; clear all; clc; % Display the original image. I = im2double(imread('lena.jpg')); [hei,wid,~] = size(I); subplot(2,3,1),imshow(I); title('Original Image (courtesy of MIT)'); % Simulate a motion blur. LEN = 21; THETA = 11; PSF = fspecial('motion', LEN, THETA); blurred = imfilter(I, PSF, 'conv', 'circular'); subplot(2,3,2), imshow(blurred); title('Blurred Image'); % Inverse filter If = fft2(blurred); Pf = fft2(PSF,hei,wid); deblurred = ifft2(If./Pf); subplot(2,3,3), imshow(deblurred); title('Restore Image') % Simulate additive noise. noise_mean = 0; noise_var = 0.0001; blurred_noisy = imnoise(blurred, 'gaussian', ... noise_mean, noise_var); subplot(2,3,4), imshow(blurred_noisy) title('Simulate Blur and Noise') % Try restoration assuming no noise. If = fft2(blurred_noisy); deblurred2 = ifft2(If./Pf); subplot(2,3,5), imshow(deblurred2) title('Restoration of Blurred Assuming No Noise'); % Try restoration with noise is known. noisy = blurred_noisy - blurred; Nf = fft2(noisy); deblurred2 = ifft2(If./Pf - Nf./Pf); subplot(2,3,6), imshow(deblurred2) title('Restoration of Blurred with Noise Is Known')

這裏使用了經典的lena圖是灰度圖像,分別對圖像進行運動模糊,逆濾波,運動模糊+高斯噪聲,假定噪聲未知直接逆濾波,噪聲已知逆濾波。3d

效果

result

說明

逆濾波對噪聲很是敏感,除非咱們知道噪聲的分佈狀況(事實上,這也很難知道),逆濾波幾乎不可用,能夠從二排中間看出,恢復圖像效果極差。但若知道噪聲分佈,也是能夠徹底復原信息的。能夠從二排最後一張圖能夠看出。寫做本文的目的也僅是在數學角度上對圖像模糊現象進行分析,後續會介紹更加有效的圖像復原方法,敬請關注。rest

相關閱讀及參考文獻

圖像去模糊(維納濾波) http://blog.csdn.net/bluecol/article/details/46242355 
圖像去模糊(約束最小二乘濾波) http://blog.csdn.net/bluecol/article/details/47359421 
數字圖像處理(第三版) 岡薩雷斯著 chapter 5,圖像復原與重建code

轉載請保留如下信息

做者 日期 聯繫方式
風吹夏天 2015年8月8日 wincoder@qq.com
相關文章
相關標籤/搜索