[scikit-image] 41. 非局所平均フィルタによる画像のノイズ低減(skimage.restoration denoise_nl_means)

python

はじめに

画像処理において、ノイズの低減は重要な課題の一つです。scikit-imageのrestrationモジュールに含まれるdenoise_nl_means関数は、非局所平均(Non-Local Means)フィルタを用いて画像のノイズを効果的に低減します。非局所平均フィルタは、画像内の類似したパッチを見つけて平均化することで、エッジや細部の構造を保持しながらノイズを除去する手法です。この記事では、denoise_nl_means関数の使用方法と、パラメータ調整によるノイズ低減効果の違いについて説明します。

コード

解説

モジュールのインポート

画像データの読み込みと型変更

マミラリア・満月の画像を読み込み、データ形式を0-1のfloat型に変換します。

ノイズの乗った画像の生成

random_noise()関数の分散(var)パラメータを指定することで、ノイズが加わった画像を生成できます。sigmaの値を大きくすると、画像に付加されるノイズの強度も大きくなります。

ノイズのsigma値の推測

estimate_sigma関数を使用すると、ノイズが含まれた画像からノイズのsigma値を推測できます。

非局所平均フィルタによるノイズの低減

非局所平均フィルタは画像のエッジを保持しながらノイズを除去するフィルタです。特定範囲内のデータに重み付けしてブレンドすることで、画像を効果的に滑らかにします。

patch_sizeはノイズ除去に使用されるパッチのサイズを指定します。

patch_distanceはノイズ除去に使用するパッチを検索する最大距離です。例えば、値が6の場合、13×13の領域内でパッチが検索されます。

hはカットオフ値で、値を大きくすると画像は滑らかになりますが、エッジがぼやけてしまいます。標準偏差σのガウスノイズの場合、hの値をσよりわずかに小さく設定すると良好な結果が得られることが多いです。

sigmaパラメータを適切に設定することで、ノイズ除去性能を向上させることができます。

fast_modeをTrueに設定すると、アルゴリズムが変更され処理速度が向上します。

画像の表示

コードをダウンロード(.pyファイル)

コードをダウンロード(.ipynbファイル)

まとめ

scikit-imageのdenoise_nl_means関数は、非局所平均フィルタによって画像のノイズを効果的に低減します。パッチサイズ、パッチ距離、h値などのパラメータを適切に調整することで、画像の特性やノイズの種類に応じた最適なノイズ低減が可能です。このフィルタは、エッジや細部の構造を保持しながらノイズを除去できる点が特徴であり、医療画像処理や天体画像処理など、ノイズの影響が大きい画像処理タスクに特に有効です。ただし、計算コストが高いため、処理時間とノイズ低減効果のバランスを考慮したパラメータ設定が重要となります。

参考

Non-local means denoising for preserving textures — skimage 0.25.2 documentation
Non-local Means Filterの実装 - Qiita
この記事はレイトレ合宿4!?アドベントカレンダー5週目の記事になります。 レイトレ合宿!? レイトレ合宿は、お手製のレンダラーを持ち寄る集会です。 今回初参加させてもらうことになりました。よろしくお願いします。 残り1か月ほどで、そろそろ時...

コメント