[scikit-image] 35. 平均化フィルタによる画像の平滑化(skimage.rank mean, mean_percentile, mean_percentile)

python

はじめに

画像処理において、ノイズ除去や平滑化は基本的かつ重要な処理です。scikit-imageのrankモジュールは、画像の平滑化のためのさまざまなフィルタを提供しています。本記事では、mean、mean_percentile、mean_bilateralといった平均化フィルタの使用方法と効果について解説します。これらのフィルタは画像のノイズを軽減しつつ、細部の情報をどの程度保持するかをコントロールできる特徴があります。

コード

解説

モジュールのインポート

画像データの読み込み

下のロフォフォラの画像を読み込み、rgb2grayにより、グレースケール化します。

平均化する範囲の設定

selem_s = np.ones((50, 50))で平均化する領域を設定します。これにより、画像を50×50ピクセルの領域ごとに平均値を計算して平滑化します。

画像の平均化

一般的な平均化

normal_result = rank.mean(image, selem=selem_s) により、image を selem_s の領域で平均化します。

所定のグレーレベルで平均化

rank.mean_percentile(image, selem=selem_s, p0=0.3, p1=0.7)関数を使用すると、画像中の下位30%から上位70%の範囲に含まれる要素のみを対象として平均化処理を行います。

所定の領域を平均化

rank.mean_bilateral(image, selem=selem_s, s0=50, s1=50)は、画像のピクセル値gを中心に、[g-50, g+50]のグレーレベル範囲内で平均化を行います。これにより、グレーレベルの差が小さい連続した領域内でのみ効果的に平均化が実行されます。

画像の表示

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

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

まとめ

scikit-imageのrankモジュールに含まれるmean、mean_percentile、mean_bilateralフィルタを使用することで、画像の平滑化を効果的に行うことができます。通常の平均化フィルタ(mean)はシンプルながら効果的ですが、特定のパーセンタイル範囲での平均化(mean_percentile)や、色の類似度を考慮した平滑化(mean_bilateral)を行うことで、エッジを保持しながらノイズ除去ができます。これらのフィルタを適切に使い分けることで、画像処理の質を向上させることが可能です。

参考

Mean filters — skimage 0.25.2 documentation
skimage.filters.rank — skimage 0.25.2 documentation
skimage.filters.rank — skimage 0.25.2 documentation
skimage.filters.rank — skimage 0.25.2 documentation

コメント