このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
デジタルイメージではさまざまなノイズが発生しがちです。ノイズはイメージの作成過程で発生したエラーの結果であり,実際の被写体の本当の強度を反映しないピクセル値です。イメージの作成方法によって異なりますが,イメージにノイズが混入される原因にはいくつかあります。次に例を示します。
イメージがフィルム上の写真からスキャンされる場合,フィルムの粒子がノイズ源になります。フィルムのキズもノイズの原因になります。スキャナ自身がノイズの発生源になる場合もあります。
イメージが直接デジタル形式で収録される場合,データの収集(たとえば,CCDカメラ)機能がノイズの発生源になります。
イメージデータの電気的な送信でもノイズが混入します。
また,上記の問題の影響をシミュレーションするために,ツールボックスには各種のノイズを"付加"できる関数imnoise
が含まれています。ここで紹介する例では,この関数が使用されます。
線形フィルターを使用して除去できるノイズがあります。平均化フィルターまたはガウスフィルターのようなフィルターは,この目的に適しています。たとえば,平均化フィルターは,写真から粒子ノイズを除去するときに役立ちます。各々のピクセルが,その近傍の中のピクセルの平均で設定されているので,粒子が原因となる局所的な変動が減少します。
関数imfilter
を使用する線形フィルター処理方法の詳細については,空間領域でのイメージのフィルター処理とはを参照してください。
この例では,比較のために平均化フィルターとメディアンフィルターを使用してイメージから”ごま塩ノイズ”を除去する方法を説明します。この2種類のフィルター処理はいずれも出力ピクセルの値を,対応する入力ピクセルの近傍の平均ピクセル値に設定します。しかし,メディアンフィルター処理を使うと,出力ピクセルの値は,平均ではなく,近傍の”中央値”になります。中央値は,平均に比べて”外れ値”にあまり敏感ではありません。メディアンフィルター処理は,イメージの鮮明さを劣化させないで,これらの外れ値を取り除くことができます。
メモ:メディアンフィルター処理は順序付き統計フィルター処理の特殊なケースで,ランクフィルター処理とも呼ばれます。順序付き統計フィルター処理の詳細については,関数ordfilt2
のリファレンスページを参照してください。
イメージをワークスペースに読み取って表示します。
我= imread (“eight.tif”);图imshow(我)
この例では,イメージにごま塩ノイズを付加します。この種のノイズは,黒と白(そのデータ範囲での外れ値)がピクセルにランダムに設定されたものです。
J = imnoise(我的盐和胡椒, 0.02);图imshow (J)
ノイズを含むイメージJ
に平均化フィルターを適用し,結果を表示します。この例では3行3列の近傍を使用しています。
Kaverage = filter2 (fspecial (“平均”3), J) / 255;图imshow (Kaverage)
次は,メディアンフィルターを使用してノイズを含むイメージJ
をフィルター処理します。この例でも3行3列の近傍を使用します。フィルター処理された2つのイメージを並べて表示し,比較します。medfilt2
の方が,コインのエッジのボケが少なく,ノイズの除去に優れています。
Kmedian = medfilt2 (J);imshowpair (Kaverage Kmedian,“蒙太奇”)
この例では,関数wiener2
を使用して,ウィーナーフィルター(線形フィルターの1種)を適応的にイメージに適用します。ウィーナーフィルターはイメージの局所分散に適応します。分散が大きい部分では,wiener2
はあまり平滑化を行いません。分散が小さい部分では,wiener2
は,さらなる平滑化を行います。
このアプローチは,しばしば線形フィルター処理よりも良い結果を出します。適応フィルターは,同種の線形フィルターよりも選択的で,イメージのエッジやその他の高周波数部を維持できます。さらに,設計の手間がかかりません。関数wiener2
は,すべての予備的な計算を実行して,入力イメージに対するフィルターを実装します。ただし,wiener2
は線形フィルターよりも計算に時間がかかります。
wiener2
は,ノイズがガウスノイズのような一定パワー(“ホワイト”)の加法性ノイズの場合,最も効率よく機能します。次の例では,ガウスノイズを付加した土星のイメージにwiener2
を適用します。
イメージをワークスペースに読み取ります。
RGB = imread (“saturn.png”);
イメージをトゥルーカラーからグレースケールに変換します。
I = im2gray (RGB);
ガウスノイズをイメージに付加します。
J = imnoise(我“高斯”, 0, 0.025);
ノイズを含むイメージを表示します。イメージがかなり大きいので,イメージの一部のみを表示します。
imshow (J (600:1000 1:6));标题(“添加高斯噪声的部分图像”);
関数wiener2
を使用してノイズを除去します。
K = wiener2(J,[5 5]);
処理後のイメージを表示します。イメージがかなり大きいので,イメージの一部のみを表示します。
图imshow (K (600:1000 1:6));标题(“用维纳滤镜去除噪点的部分图像”);
imfilter
|imguidedfilter
|imgaussfilt
|locallapfilt
|nlfilter
|imbilatfilt