ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ノイズ除去

デジタル イメージでは各種のノイズが発生しやすい傾向があります。ノイズはイメージの作成過程で発生したエラーの結果であり、実際の被写体の本当の強度を反映しないピクセル値です。イメージの作成方法によって異なりますが、イメージにノイズが混入される原因にはいくつかあります。以下に例を示します。

  • イメージがフィルム上の写真からスキャンされる場合、フィルムの粒子がノイズ源になります。フィルムのキズもノイズの原因になります。スキャナ自身がノイズの発生源になる場合もあります。

  • イメージが直接デジタル形式で収録される場合、データの収集 (たとえば、CCD カメラ) 機能がノイズの発生源になります。

  • イメージ データの電気的な送信でもノイズが混入します。

また、上記の問題の影響をシミュレーションするために、ツールボックスには各種のノイズを "付加" できる関数 imnoise が含まれています。ここで紹介する例では、この関数が使用されます。

線形フィルター処理によるノイズの除去

線形フィルターを使用して除去できるノイズがあります。平均化フィルターまたはガウス フィルターのようなフィルターは、この目的に適しています。たとえば、平均化フィルターは、写真から粒子ノイズを除去するときに役立ちます。各々のピクセルが、その近傍の中のピクセルの平均で設定されているので、粒子が原因となる局所的な変動が減少します。

関数 imfilter を使用する線形フィルター処理方法の詳細は、「空間領域でのイメージのフィルター処理とは」を参照してください。

メディアン フィルター処理を使用したノイズの除去

この例では、比較のために平均化フィルターと中央値フィルター (medfilt2) を使用してイメージから "ごま塩ノイズ" を除去する方法を説明します。メディアン フィルター処理は、各出力ピクセルが対応する入力ピクセルの近傍のピクセル値の平均に設定される点で、平均化フィルターに似ています。しかし、メディアン フィルター処理を使うと、出力ピクセルの値は、平均ではなく、近傍の "中央値" になります。中央値は、平均に比べて "外れ値" にあまり敏感ではありません。メディアン フィルター処理は、イメージの鮮明さを劣化させないで、これらの外れ値を取り除くことができます。メディアン フィルター処理は "順序付き統計フィルター処理" の特殊なケースで、"ランク フィルター処理" とも呼ばれます。順序付き統計フィルター処理の詳細は、関数 ordfilt2 のリファレンス ページを参照してください。

イメージを読み取り、それを表示します。

I = imread('eight.tif');
imshow(I)

この例では、イメージにごま塩ノイズを付加します。この種のノイズは、黒と白 (そのデータ範囲での外れ値) がピクセルにランダムに設定されたものです。

J = imnoise(I,'salt & pepper',0.02);
figure, imshow(J)

ノイズを含むイメージに平均化フィルターを適用し、結果を表示します。この例では 3 行 3 列の近傍を使用しています。

K = filter2(fspecial('average',3),J)/255;
figure, imshow(K)

メディアン フィルターを使用して、ノイズを含むイメージをフィルター処理し、結果を表示します。この例では 3 行 3 列の近傍を使用しています。medfilt2 の方が、エッジのボケが少なく、ノイズの除去に優れています。

L = medfilt2(J,[3 3]);
figure, imshow(L)

適応フィルター処理によるノイズの除去

関数 wiener2 は、局所的なイメージの変動に合わせてウィーナー フィルター (一種の線形フィルター) を "適応的に" イメージに適用します。分散が大きい部分では、wiener2 はあまり平滑化を行いません。分散が小さい部分では、wiener2 は、もっと平滑化を行います。

このアプローチは、しばしば線形フィルター処理よりも良い結果を出します。適応フィルターは、同種の線形フィルターよりも選択的で、イメージのエッジやその他の高周波数部を維持できます。さらに、設計の手間がかかりません。関数 wiener2 は、すべての予備的な計算を実行して、入力イメージに対するフィルターを実装します。ただし、wiener2 は、線形フィルター処理よりも計算に時間がかかります。

wiener2 は、ノイズがガウス ノイズのような一定パワー ("ホワイト ノイズ") の加法性ノイズの場合、最も効率よく機能します。次の例では、ガウス ノイズを付加した土星のイメージに wiener2 を適用します。

  1. イメージを読み取ります。トゥルーカラー イメージなので、この例ではグレースケールに変換します。

    RGB = imread('saturn.png');
    I = rgb2gray(RGB);
  2. この例では、イメージにガウス ノイズを付加して、そのイメージを表示します。イメージがかなり大きいので、図にはその一部のみが表示されています。

    J = imnoise(I,'gaussian',0,0.025);
    imshow(J)

    ガウス ノイズが付加されたイメージの一部

  3. 関数 wiener2 を使用してノイズを除去します。ここでも、図にはイメージの一部しか表示されていません。

    K = wiener2(J,[5 5]);
    figure, imshow(K)

    ウィーナー フィルターによってノイズが除去されたイメージの一部

この情報は役に立ちましたか?