メインコンテンツ

deconvlucy

ルーシー・リチャードソン アルゴリズムを使用したイメージのブレ除去

説明

J = deconvlucy(I,psf) は、点像分布関数 (PSF) psf との畳み込みおよび (場合によっては) 加法性ノイズによって劣化しているイメージ I を復元します。このアルゴリズムは、ポアソン統計に従い、出力イメージ J が元のイメージ I のインスタンスになる尤度を最大化することに基づいています。

deconvlucy では、復元を向上させるため、次に示すオプション パラメーターがサポートされています。[] をプレースホルダーとして使用すると、中間パラメーターの指定を省略できます。

J = deconvlucy(I,psf,iter) は反復回数を iter に指定します。

J = deconvlucy(I,psf,iter,dampar) は、減衰しきい値 dampar で指定される、ノイズと比較して少量の逸脱があるピクセルに対する反復処理を抑えることによって、ノイズ増幅をコントロールします。既定では減衰なしです。

J = deconvlucy(I,psf,iter,dampar,weight) は、入力イメージ I 内のどのピクセルを復元の対象にするかを指定します。weight 配列内の要素の値は、入力イメージ内の対応する位置で考慮に入れるピクセルの数を決定します。たとえば、あるピクセルを対象から除外するには、weight 配列内でこのピクセルに値 0 を割り当てます。各ピクセルに割り当てられる重みの値は、フラットフィールド補正の量に基づいて調整できます。

J = deconvlucy(I,psf,iter,dampar,weight,readout) は、加法性ノイズ (背景ノイズまたは前景ノイズなど) と読み取りカメラ ノイズ readout の分散に対応する値を指定します。

J = deconvlucy(I,psf,iter,dampar,weight,readout,subsample) はサブサンプリングを使用します。PSF がイメージより subsample 倍細かいグリッド上に位置する場合に使われます。

すべて折りたたむ

ブレやノイズのない初期状態のイメージを読み取って表示します。この例ではオプションで、左上 (x,y) 座標が (2,50) にある 256 x 256 のサイズにイメージをトリミングします。

I = imread("board.tif");
I = imcrop(I,[2 50 255 255]);
imshow(I)
title("Original Image")

Figure contains an axes object. The hidden axes object with title Original Image contains an object of type image.

標準偏差 5 とサイズ 5 x 5 のフィルターを使用して、ガウスぼかしを表す PSF を作成します。

PSF = fspecial("gaussian",5,5);

イメージのブレをシミュレートします。

blurred = imfilter(I,PSF,"symmetric","conv");

シミュレートしたゼロ平均のガウス ノイズを加えます。

V = 0.002;
blurred_noisy = imnoise(blurred,"gaussian",0,V);
imshow(blurred_noisy)
title("Blurred and Noisy Image")

Figure contains an axes object. The hidden axes object with title Blurred and Noisy Image contains an object of type image.

deconvlucy を使用して、ブレとノイズを含むイメージを復元します。ブレを作成するときに使用した PSF を指定し、反復回数を 5 に減らします。

luc1 = deconvlucy(blurred_noisy,PSF,5);
imshow(luc1)
title("Restored Image")

Figure contains an axes object. The hidden axes object with title Restored Image contains an object of type image.

サンプル イメージを作成し、ブレを加えます。

I = checkerboard(8);
PSF = fspecial('gaussian',7,10);
V = .0001;
BlurredNoisy = imnoise(imfilter(I,PSF),'gaussian',0,V);

重み配列を作成し、各オプションのパラメーターを使用して deconvlucy を呼び出します。

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)');

Figure contains 4 axes objects. Hidden axes object 1 with title A = Blurred and Noisy contains an object of type image. Hidden axes object 2 with title deconvlucy(A,PSF) contains an object of type image. Hidden axes object 3 with title deconvlucy(A,PSF,NI,DP) contains an object of type image. Hidden axes object 4 with title deconvlucy(A,PSF,NI,DP,WT) contains an object of type image.

入力引数

すべて折りたたむ

不鮮明なイメージ。任意の次元の数値配列として指定します。cell 配列としてイメージを指定して、中断した反復処理を有効にすることもできます。詳細については、ヒントを参照してください。

データ型: single | double | int16 | uint8 | uint16

点像分布関数。数値配列として指定します。

データ型: single | double | int16 | uint8 | uint16

反復回数。正の整数として指定します。

データ型: double

減衰のしきい値。数値スカラーとして指定します。減衰は反復の間にその偏差がしきい値を超えないピクセルに対して発生します。damparI と同じデータ型です。

各ピクセルの重み値。範囲 [0, 1] の値から成る数値配列として指定します。weight は入力イメージ I と同じサイズです。既定では、weight のすべての要素は値 1 です。したがって、すべてのピクセルは復元時に同様に考慮されます。

データ型: double

ノイズ。数値配列または数値スカラーとして指定します。readout の値は、加法性ノイズ (背景ノイズや前景ノイズなど) と読み取りカメラ ノイズの分散に対応します。readoutI と同じデータ型です。

サブサンプリング。正のスカラーで指定します。

データ型: double

出力引数

すべて折りたたむ

ブレ除去イメージ。数値配列または 1 行 4 列の cell 配列として返されます。J (J が cell 配列の場合は J{1}) は I と同じデータ型を持っています。中断された反復処理のために J を cell 配列として返す場合の詳細については、ヒントを参照してください。

ヒント

  • deconvlucy を使用すると、逆畳み込みを前回停止した箇所から再開できます。この機能を使用するには、入力イメージ I を cell 配列 {I} として渡します。これを行う場合、関数 deconvlucy は、出力イメージ J を cell 配列として返します。これを次に呼び出す deconvlucy に入力配列として渡すことができます。出力 cell 配列 J には次の 4 つの要素が含まれています。

    J{1} は元のイメージ I を格納します。

    J{2} は最後の反復の結果を格納します。

    J{3} は最後から 2 番目の反復の結果を格納します。

    J{4} は反復アルゴリズムによって生成される配列です。

  • 出力イメージ J は、アルゴリズムで使用されている離散フーリエ変換に起因するリンギングを示すことがあります。リンギングを軽減するには、deconvlucy を呼び出す前に I = edgetaper(I,psf) を使用してください。

  • deconvlucy は、PSF を正規化しないで double に変換します。

  • deconvlucy は、出力イメージが入力イメージの範囲外の領域に入る場合にも値を返すことができます。

参照

[1] D. S. C. Biggs and M. Andrews, Acceleration of iterative image restoration algorithms, Applied Optics, Vol. 36, No. 8, 1997.

[2] R. J. Hanisch, R. L. White, and R. L. Gilliland, Deconvolutions of Hubble Space Telescope Images and Spectra, Deconvolution of Images and Spectra, Ed. P.A. Jansson, 2nd ed., Academic Press, CA, 1997.

拡張機能

すべて展開する

バージョン履歴

R2006a より前に導入

すべて展開する