【图像处理】MATLAB:退化函数及多种复原方法
生活随笔
收集整理的這篇文章主要介紹了
【图像处理】MATLAB:退化函数及多种复原方法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
退化函數建模
??通過點擴散函數 PSF 進行圖像復原的實驗,添加適當的噪聲。
??fspecial函數中,’motion’指的是運動模糊算子。
代碼示例
% checkerboard產生測試板圖像,第一個參數是每個正方形一邊的像素數,第二個參數行數,第三為列數(缺省則等于行數) f = checkerboard(8); % 產生一個一面為8個正方形的測試板 PSF = fspecial('motion',7,45); % 運動模糊,PSF剛好為空間濾波器 gb = imfilter(f,PSF,'circular'); % 減少邊界效應 noise = imnoise(zeros(size(f)),'gaussian',0,0.001); % 高斯噪聲 g = gb + noise; % 添加高斯噪聲構造退化的圖像模型subplot(2,2,1);imshow(pixeldup(f,8),[ ]);title('原圖像'); % 大圖像運算過慢,故選用小圖像來節省時間, subplot(2,2,2);imshow(gb);title('運動模糊圖像'); % 以顯示為目的,可通過像素賦值來放大圖像。 subplot(2,2,3);imshow(noise,[ ]);title('高斯噪聲圖像'); subplot(2,2,4);imshow(g);title('運動模糊+高斯噪聲');- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
運行結果
頻域濾波降低周期噪聲
??周期噪聲本身表現為類似沖擊的串,這種串在傅里葉頻譜中通常是可見的。濾除這些成分的主要途徑是通過陷波濾波。n階巴特沃茲陷波濾波器的傳遞函數如下:
直接逆濾波
維納濾波
代碼示例
f = checkerboard(8); % 產生一個一面為8個正方形的測試板 PSF = fspecial('motion',7,45); % 運動模糊,PSF剛好為空間濾波器 gb = imfilter(f,PSF,'circular'); % 減少邊界效應 noise = imnoise(zeros(size(f)),'gaussian',0,0.001); % 高斯噪聲 g = gb + noise; % 添加高斯噪聲構造退化的圖像模型fr1 = deconvwnr(g,PSF); % 直接逆濾波Sn = abs(fft(noise)).^2; % 噪聲功率譜 nA = sum(Sn(:))/prod(size(noise)); % 平均噪聲功率,prod計算數組元素的連乘積。 Sf = abs(fft2(f)).^2; % 圖像功率譜 fA = sum(Sf(:))/prod(size(f)); % 平均圖像功率 R = nA/fA; % 噪信功率比 fr2 = deconvwnr(g,PSF,R); % 參數維納濾波器NCORR = fftshift(real(ifft2(Sn))); % 自相關函數 ICORR = fftshift(real(ifft2(Sf))); fr3 = deconvwnr(g,PSF,NCORR,ICORR);subplot(2,2,1);imshow(g,[]);title('噪聲圖像'); subplot(2,2,2);imshow(fr1);title('逆濾波結果'); subplot(2,2,3);imshow(fr2);title('使用常數比率的維納濾波的結果'); subplot(2,2,4);imshow(fr3);title('使用自相關函數的維納濾波的結果');- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
運行結果
正則濾波(約束的最小二乘方濾波)
算法另尋…代碼示例
f = checkerboard(8); % 產生一個一面為8個正方形的測試板 PSF = fspecial('motion',7,45); % 運動模糊,PSF剛好為空間濾波器 gb = imfilter(f,PSF,'circular'); % 減少邊界效應 noise = imnoise(zeros(size(f)),'gaussian',0,0.001); % 高斯噪聲 g = gb + noise; % 添加高斯噪聲構造退化的圖像模型fr1 = deconvreg(g,PSF,4); % 正則濾波器 fr2 = deconvreg(g,PSF,0.4,[1e-7 1e7]);subplot(1,3,1);imshow(g);title('運動模糊+高斯噪聲(g)'); subplot(1,3,2);imshow(fr1);title('正則濾波器'); subplot(1,3,3);imshow(fr2);title('正則濾波器(縮小范圍)');- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
運行結果
使用L-R算法的迭代非線性復原
??前面所討論的圖像復原方法都是線性的,而LR算法是非線性方法,又稱Lucy-Richardson算法。
代碼示例
f = checkerboard(8); % 產生64×64像素的方形圖像 PSF = fspecial('gaussian',7,10); % 產生一個大小為7×7且標準偏差為10的高斯PSF SD = 0.01; % 標準偏差 g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2); % 添加均值為0、標準偏差為0.01的高斯噪聲DAMPAR = 10*SD; % 結果圖像與原圖像的偏離閾值 LIM = ceil(size(PSF,1)/2); WEIGHT = zeros(size(g)); % WEIGHT數組大小64×64 WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1; % WEIGHT數組有值為0的4像素寬的邊界,其余像素為1f1 = deconvlucy(g,PSF,5,DAMPAR,WEIGHT); % 迭代5次 f2 = deconvlucy(g,PSF,10,DAMPAR,WEIGHT); % 迭代10次 f3 = deconvlucy(g,PSF,20,DAMPAR,WEIGHT); % 迭代20次 f4 = deconvlucy(g,PSF,100,DAMPAR,WEIGHT); % 迭代100次subplot(2,3,1);imshow(pixeldup(f,8));title('原圖像'); subplot(2,3,2);imshow(g);title('高斯噪聲+運動模糊'); subplot(2,3,3);imshow(f1);title('L-R算法迭代5次'); subplot(2,3,4);imshow(f2);title('L-R算法迭代10次'); % 圖像雖然改進,但依然模糊 subplot(2,3,5);imshow(f3);title('L-R算法迭代20次'); % 迭代20次為合理復原 subplot(2,3,6);imshow(f4);title('L-R算法迭代100次'); % 除了稍微清晰明亮,并無顯著改進- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
運行結果
盲去卷積
??不以PSF知識為基礎的圖像復原方法統稱為盲去卷積算法。
代碼示例
PSF = fspecial('gaussian',7,10); SD = 0.01; g = imnoise(imfilter(f,PSF),'gaussian',0,SD^2);INITPSF = ones(size(PSF)); % 點擴散函數的初始估計 DAMPAR = 10*SD; % 結果圖像與原圖像的偏離閾值 LIM = ceil(size(PSF,1)/2); WEIGHT = zeros(size(g)); % WEIGHT數組大小64×64 WEIGHT(LIM+1:end-LIM,LIM+1:end-LIM)=1; % WEIGHT數組有值為0的4像素寬的邊界,其余像素為1 [fr1,PSFe1] = deconvblind(g,INITPSF,5,DAMPAR,WEIGHT); % 盲去卷積迭代5次 [fr2,PSFe2] = deconvblind(g,INITPSF,10,DAMPAR,WEIGHT); % 盲去卷積迭代10次 [fr3,PSFe3] = deconvblind(g,INITPSF,20,DAMPAR,WEIGHT); % 盲去卷積迭代20次subplot(2,2,1);imshow(pixeldup(PSF,73),[ ]);title('退化函數的PSF'); subplot(2,2,2);imshow(pixeldup(PSFe1,73),[ ]);title('盲去卷積迭代5次'); subplot(2,2,3);imshow(pixeldup(PSFe2,73),[ ]);title('盲去卷積迭代10次'); subplot(2,2,4);imshow(pixeldup(PSFe3,73),[ ]);title('盲去卷積迭代20次'); % 最接近真正PSF- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
運行結果
總結
以上是生活随笔為你收集整理的【图像处理】MATLAB:退化函数及多种复原方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机视觉,图像处理 经典代码paper
- 下一篇: 图像恢复迭代算法的加速