1. 程式人生 > >MATLAB影象處理 Lucy-Richardson演算法deconvlucy函式的使用

MATLAB影象處理 Lucy-Richardson演算法deconvlucy函式的使用

deconvlucy:使用露西理查森方法去模糊復原影象。

J =deconvlucy(I,PSF) 使用Lucy-Richardson演算法去卷積影象 I,返回去模糊的影象J。假定影象是通過用點擴散函式PSF卷積真實影象並可能通過新增噪聲而建立的。

I 可以是N維陣列。

為了改善恢復,可以傳入附加引數(如果中間引數未知,則使用[]作為佔位符):

J = deconvlucy(I,PSF,NUMIT)
J = deconvlucy(I,PSF,NUMIT,DAMPAR)
J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT)
J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT)

J = deconvlucy(I,PSF,NUMIT,DAMPAR,WEIGHT,READOUT,SUBSMPL), where

NUMIT(optional)是迭代次數(預設值為10)。

DAMPAR (optional) 是一個數組,用於指定影象I(根據泊松噪聲的標準偏差)的結果影象的閾值偏差,低於此值會發生阻尼。 對於在DAMPAR值內偏離其原始值的畫素,迭代被抑制。 這可以抑制這些畫素中的噪音,並在其他地方保留必要的影象細節。 預設值為0(無阻尼)。

WEIGHT(optional) 分配給每個畫素以反映相機的拍攝質量。 將一個壞畫素分配給零權值,從而排除該畫素。 您可以根據平場校正的數量來調整自己的體重,而不是給予好畫素的權重。 預設值是與輸入影象I大小相同的單位陣列。

READOUT(可選)是對應於附加噪聲(例如,背景,前景噪聲)和讀出相機噪聲方差的陣列(或值)。 READOUT必須以影象為單位。預設值是0。

SUBSMPL(可選)表示子取樣,當PSF在SUBSMPL時間比影象更精細的網格上給出時使用。預設值是1。

注意,輸出影象J可能會出現由演算法中使用的離散傅立葉變換引入的振鈴。 為了減少鈴聲的使用 I=EDGETAPER(I,PSF)在呼叫deconvlucy之前。

還請注意,去卷積可讓您從早期去卷積執行的結果開始恢復去卷積。 要啟動此語法,輸入影象I必須作為單元格陣列{I}傳入。 然後輸出J成為一個單元陣列,並可以作為輸入陣列傳遞給下一個deconvlucy呼叫。 輸入單元陣列可以包含一個數字陣列(在初始呼叫時)或四個數值陣列(當它是前一次去卷積運算的輸出時)。 輸出J包含四個元素,其中J {1} = I,J {2}是上一次迭代產生的影象,J {3}是前一次迭代前的影象,J {4}是 通過迭代演算法

使用內部的陣列

    Class Support
    -------------
    I and PSF can be uint8, uint16, int16, double, or single. DAMPAR and
    READOUT must have the same class as the input image. Other inputs have to
    be double. The output image (or the first array of the output cell) has
    the same class as the input image.
 
    Example
    -------

       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('A = Blurred and Noisy');
       subplot(222);imshow(J1);
                      title('deconvlucy(A,PSF)');
       subplot(223);imshow(J2);
                      title('deconvlucy(A,PSF,NI,DP)');
       subplot(224);imshow(J3);
                      title('deconvlucy(A,PSF,NI,DP,WT)');