ウィーナー フィルターを使ったイメージのブレ除去
この例では、ウィーナー デコンボリューションを使用してイメージのブレを除去する方法を示します。ウィーナー デコンボリューションは、イメージと加法性ノイズの周波数特性が少なくともある程度わかっている場合に効果的に使用できます。
初期状態のイメージの読み取り
ブレやノイズのない初期状態のイメージを読み取って表示します。
Ioriginal = imread("cameraman.tif"); imshow(Ioriginal) title("Original Image")

ノイズのない動きによるブレのシミュレーションと復元
カメラの動きによって発生するブレを含むイメージをシミュレートします。まず、関数fspecialを使用し、11 度の角度で 21 ピクセルにわたる線形移動を指定することにより、点像分布関数 PSF を作成します。その後、imfilter を使用して、点像分布関数とイメージを畳み込みます。
元のイメージのデータ型は uint8 です。uint8 イメージを imfilter に渡すと、この関数は別の uint8 イメージを返すために、出力を量子化します。量子化誤差を低減するために、imfilter を呼び出す前にイメージを double に変換します。
PSF = fspecial("motion",21,11); Idouble = im2double(Ioriginal); blurred = imfilter(Idouble,PSF,"conv","circular"); imshow(blurred) title("Blurred Image")

関数 deconvwnr を使用してブレを含むイメージを復元します。このブレを含むイメージにはノイズが含まれていないため、S/N 比 (NSR) 入力引数を省略できます。
wnr1 = deconvwnr(blurred,PSF);
imshow(wnr1)
title("Restored Blurred Image")
動きによるブレとガウス ノイズのシミュレーションと復元
関数 imnoise を使用して、ブレを含むイメージにゼロ平均のガウス ノイズを追加します。
noise_mean = 0; noise_var = 0.0001; blurred_noisy = imnoise(blurred,"gaussian",noise_mean,noise_var); imshow(blurred_noisy) title("Blurred and Noisy Image")

ノイズ推定を指定せずに deconvwnr を使用して、ブレとノイズを含むイメージを復元してみます。ウィーナー復元フィルターの場合、既定では、NSR が 0 に等しいと仮定されています。この場合、ウィーナー復元フィルターは理想的な逆フィルターと同等であり、入力イメージのノイズに非常に敏感な場合があります。
この例では、この復元におけるノイズは、イメージの内容が失われる程度まで増幅されます。
wnr2 = deconvwnr(blurred_noisy,PSF);
imshow(wnr2)
title("Restoration of Blurred Noisy Image (NSR = 0)")
より現実的な推定ノイズの値を指定した deconvwnr を使用して、ブレとノイズを含むイメージを復元してみます。
signal_var = var(Idouble(:));
NSR = noise_var / signal_var;
wnr3 = deconvwnr(blurred_noisy,PSF,NSR);
imshow(wnr3)
title("Restoration of Blurred Noisy Image (Estimated NSR)")
動きによるブレと 8 ビット量子化ノイズのシミュレーションと復元
視覚的には感知できない量のノイズでも結果に影響を与えることがあります。ノイズの原因の 1 つは、イメージを uint8 表現で操作することによる量子化誤差です。前に、この例で量子化誤差を避けるために、データ型 double で初期状態のイメージからブレを含むイメージをシミュレートしました。ここでは、復元に対する量子化誤差の影響を調査するために、元の uint8 データ型で初期状態のイメージからブレを含むイメージをシミュレートします。
blurred_quantized = imfilter(Ioriginal,PSF,"conv","circular"); imshow(blurred_quantized) title("Blurred Quantized Image")

ノイズ推定を指定せずに deconvwnr を使用して、ブレを含み量子化されたイメージを復元してみます。ノイズは追加されていませんが、この復元では、データ型 double のブレを含むイメージの復元に比べイメージが劣化します。
wnr4 = deconvwnr(blurred_quantized,PSF);
imshow(wnr4)
title("Restoration of Blurred Quantized Image (NSR = 0)");
より現実的な推定ノイズの値を指定した deconvwnr を使用して、ブレを含み量子化されたイメージを復元してみます。
uniform_quantization_var = (1/256)^2 / 12;
signal_var = var(Idouble(:));
NSR = uniform_quantization_var / signal_var;
wnr5 = deconvwnr(blurred_quantized,PSF,NSR);
imshow(wnr5)
title("Restoration of Blurred Quantized Image (Estimated NSR)");
参考
deconvwnr | fspecial | imfilter | imnoise