はじめに
skimage.color.adapt_rgbでRGB画像にグレースケール画像用フィルタを適用する方法を説明する。
コード
コードをダウンロード(.pyファイル)
コードをダウンロード(.ipynbファイル)
解説
グレースケールで機能するフィルターはたくさんある。 しかしそれらのフィルターは、そのままカラーのRGB画像には適用できないので、 scikit-imageの adapt_rgbデコレータを使う。
デコレータを使うには、RGB画像をどのように処理するかを決めなければならない。定義済みなのは2つある。
each_channel:
RGBのチャンネルそれぞれにフィルタを適用して、最後にもとに戻す
hsv_value:
RGBをHSVに変換して、HSVのV(明度)でフィルタを掛けてからRGBに戻す
adapt_rgbの設定
通常使う関数と同じようにこれらの関数を使うことができる。これにより、カラーイメージでフィルタが機能する。
モジュールのインポート
画像のフィルタ処理
plt.imread()で配列として画像ファイルを読み込む。
rgb2hsvでRGB配列をHSV配列に変換する。
sobel_each(im)で定義した関数を実行して、rescale_intensityでコントラストを高めている。
sobel_hsvもsobel_eachと同様。
画像の表示
hsv_valueでフィルタ処理された画像の結果は元の画像の色を保持するが、each_channelでフィルタ処理された画像は色が変なことになっている。
グレースケールに変換してからフィルタ処理
RGB画像をグレースケールにしてから、フィルタをかけることもadapt_rgbで可能。この場合、adapt_rgb用の関数を作成する。* argsと** kwargsを使用して、引数をフィルタに渡すシグネチャを作成して、デコレート関数が任意の数の位置引数とキーワード引数を持つことができるようにすることが重要。
参考
Adapting gray-scale filters to RGB images — skimage 0.24.0 documentation
skimage.color — skimage 0.25.0rc2.dev0 documentation
コメント