此示例說明如何使用盲反頻域模糊圖像。 當(dāng)不知道有關(guān)失真(模糊和噪聲)的信息時,使用盲逆頻域算法可能是有效的。 該算法可以同時恢復(fù)圖像和點(diǎn)擴(kuò)散函數(shù)(PSF)。 每次迭代都使用加速的 Decay-Lucy 算法。 其他光學(xué)系統(tǒng)(如單反)的特性可以作為輸入?yún)?shù),幫助提高圖像復(fù)原的質(zhì)量。 PSF 約束可以通過用戶指定的函數(shù)傳入。
第一步:讀圖
將灰度圖像讀入工作區(qū)。 函數(shù)可以處理任何維度的字段。
I = imread('cameraman.tif');
figure;imshow(I);title('Original Image');
text(size(I,2),size(I,1)+15, ...
'Image courtesy of Massachusetts Institute of Technology', ...
'FontSize',7,'HorizontalAlignment','right');
第 2 步:模擬模糊
模擬可能模糊的真實(shí)圖像(例如,由于 DSLR 運(yùn)動或缺乏焦點(diǎn))。 此示例通過將高斯混合器與頻域中的真實(shí)圖像相結(jié)合來模擬模糊(使用 )。 之后,高斯混合器表示點(diǎn)擴(kuò)散函數(shù) PSF。
PSF = fspecial('gaussian',7,10);
Blurred = imfilter(I,PSF,'symmetric','conv');
imshow(Blurred)
title('Blurred Image')
第 3 步:使用各種尺寸的 PSF 恢復(fù)模糊圖像
為了說明了解真實(shí) PSF 大小的重要性,此示例執(zhí)行了三個恢復(fù)。 每個 PSF 重建都以一個統(tǒng)一字段(鏈表)開始。
第一次恢復(fù) J1 和 P1,使用較小的字段作為 PSF 的初始猜測。 字段的每個維度規(guī)范都比真實(shí) PSF 少 4 個像素。
UNDERPSF = ones(size(PSF)-4);
[J1,P1] = deconvblind(Blurred,UNDERPSF);
imshow(J1)
title('Deblurring with Undersized PSF')
第二次恢復(fù) J2 和 P2,對原始 PSF 使用由 1 組成的字段摩擦力的圖像分析,其每個位維度的規(guī)格比實(shí)際 PSF 長 4 個像素。
OVERPSF = padarray(UNDERPSF,[4 4],'replicate','both');
[J2,P2] = deconvblind(Blurred,OVERPSF);
imshow(J2)
title('Deblurring with Oversized PSF')
第三個恢復(fù) J3 和 P3,使用由 1 組成的字段來形成與實(shí)際 PSF 大小完全相同的初始 PSF。
INITPSF = padarray(UNDERPSF,[2 2],'replicate','both');
[J3,P3] = deconvblind(Blurred,INITPSF);
imshow(J3)
title('Deblurring with INITPSF')
第 4 步:剖析恢復(fù)的 PSF
所有三個減少也形成 PSF。 右圖顯示了對構(gòu)造的 PSF 的剖析如何幫助猜測初始 PSF 的正確大小。 在真正的 PSF(高斯混合器)中,最大值位于中心(紅色)并在邊界處減小(藍(lán)色)。
figure;
subplot(2,2,1)
imshow(PSF,[],'InitialMagnification','fit')
title('True PSF')
subplot(222)
imshow(P1,[],'InitialMagnification','fit')
title('Reconstructed Undersized PSF')
subplot(2,2,3)
imshow(P2,[],'InitialMagnification','fit')
title('Reconstructed Oversized PSF')
subplot(2,2,4)
imshow(P3,[],'InitialMagnification','fit')
title('Reconstructed true PSF')
在第一次恢復(fù)中重組的 PSFP1 似乎不符合約束規(guī)范。 邊界處的信號差異很大。 與模糊圖像相比,相應(yīng)的圖像 J1 沒有顯示出任何改進(jìn)的清晰度。
在第二個補(bǔ)丁中重建的 PSFP2 具有非常平滑的邊緣。 這意味著恢復(fù)可以處理較小格式的 PSF。 相應(yīng)的圖像 J2 顯示出一些去模糊,但被振鈴嚴(yán)重?fù)p壞。
最后,在第三個補(bǔ)丁中重構(gòu)的 PSFP3 位于 P1 和 P2 之間。 陣列 P3 非常類似于真實(shí)的 PSF。 對應(yīng)圖像J3明顯提升; 并且它一直被振鈴效應(yīng)破壞。
第五步:提高修復(fù)效果
恢復(fù)圖像J3中的振鈴出現(xiàn)在圖像中硬度對比鮮明的區(qū)域和圖像邊界處。 此示例說明如何通過指定加權(quán)函數(shù)來增加振鈴。 該算法在恢復(fù)圖像和 PSF 時根據(jù)數(shù)組對每個像素進(jìn)行加權(quán)。 在我們的例子中摩擦力的圖像分析,我們首先使用邊緣函數(shù)來尋找“清晰”的像素。 通過反復(fù)試驗,我們確定理想的閾值水平為 0.08。
WEIGHT = edge(Blurred,'sobel',.08);
為了擴(kuò)大面積,我們使用并傳入一個結(jié)構(gòu)元素se。
se = strel('disk',2);
WEIGHT = 1-double(imdilate(WEIGHT,se));
靠近邊界的像素也被參數(shù)化為 0。
WEIGHT([1:3 end-(0:2)],:) = 0;
WEIGHT(:,[1:3 end-(0:2)]) = 0;
figure
imshow(WEIGHT)
title('Weight Array')
通過使用鏈表調(diào)用函數(shù)并減少迭代次數(shù) (30) 來恢復(fù)圖像。 幾乎所有的振鈴效應(yīng)都被抑制了。
[J,P] = deconvblind(Blurred,INITPSF,30,[],WEIGHT);
imshow(J)
title('Deblurred Image')
第 6 步:對 PSF 恢復(fù)使用附加約束
此示例說明如何在 PSF 上指定其他約束。 下面的函數(shù) FUN 返回更改后的 PSF 字段,用于下一次迭代。
在這種情況下,F(xiàn)UN 刪除 PSF 的每個維度中的 P1 和 P2 個素數(shù),然后用零填充以確保數(shù)組保持其原始大小。 這個操作并沒有改變PSF中心的值,有效的減少了PSF的大小2*P1和2*P2像素。
P1 = 2;
P2 = 2;
FUN = @(PSF) padarray(PSF(P1+1:end-P1,P2+1:end-P2),[P1 P2]);
傳入匿名函數(shù) FUN。 有關(guān)為函數(shù)提供附加參數(shù)的信息,請參閱文檔中函數(shù) FUN 的“參數(shù)化函數(shù)”部分。
在此示例中,初始 PSF 的大小比實(shí)際 PSF 大 4 個像素。 在 FUN 上設(shè)置 P1=2 和 P2=2 作為參數(shù),使有價值的空間與真正的 PSF 大小相同。 因此,生成的 JF 和 PF 類似于反頻域結(jié)果(步驟 4 中的 J 和 P),具有正確的 PSF 大小并且沒有 FUN 調(diào)用。
[JF,PF] = deconvblind(Blurred,OVERPSF,30,[],WEIGHT,FUN);
imshow(JF)
title('Deblurred Image')
如果我們使用過大的初始 PSF,但缺少約束函數(shù) FUN,則得到的圖像將類似于步驟 3 中得到的不令人滿意的結(jié)果 J2。
請注意,可以省略 FUN 之前的任何未指定參數(shù),例如本例中不必要的占位符 ([])。
注:本文根據(jù)官網(wǎng)內(nèi)容有所改動。
以下免費(fèi)視頻教程的特點(diǎn)是無PPT,無水,直接編程環(huán)境下的實(shí)戰(zhàn)課程:
歡迎您進(jìn)一步了解以下系列文章: