1

Matlab 内で、既知の分散を持つ画像にノイズを追加しています。私は次のようにできることを知っています:

var = 0.01;
i   = im2double(imread('lena.bmp'));
i_n = imnoise(i, 'gaussian',0,var);

結果の画像には明らかにノイズがあります。ただし、ハイパス フィルターの中央値を計算してノイズ分散を推定しようとすると、実際には相関関係が見られません。

k = [1 4 6 4 1]'*[1 4 6 4 1];
kk = k ./sum(sum(k));

var_est = median(median(abs(i_n - imfilter(i_n,kk))))

   var_est(:,:,1) =

   0.0631


   var_est(:,:,2) =

   0.0620


   var_est(:,:,3) =

   0.0625

分散の推定が難しい問題であることは理解していますが、妥当な結果を得たいだけです。たとえば、50% の誤差は許容範囲です。私は何を間違っていますか?

4

2 に答える 2

2

imnoise を使用すると、すべての周波数でコンポーネントを示すホワイト ノイズの近似バージョンが実際に追加されるため、この場合のアプローチは不十分です。ハイパス フィルターを使用すると、ノイズの周波数成分がクリッピングされるため、推定の精度が低下します。

確かに、あなたが言ったように、たった1つの画像からのノイズ推定は単純な問題ではありません。ただし、いくつかのアプローチがあります。たとえば、データの分散を取得して近似できる中央絶対偏差を使用できます (この場合は、カーネルの下のピクセル強度)。

于 2011-08-03T08:46:12.497 に答える
1

ハイパスフィルター処理された画像の分散を計算することができます。var分散を計算するMatlab関数の名前であるため、変数名には使用しないでください。

v = var; % use v instead of var for your variance variable
clear var; % clear your variable "var" so we can use the var function
est_variance = var(reshape(i_n - imfilter(i_n,kk), [], 1));
于 2011-08-03T16:59:33.213 に答える