[scikit-image] 2. RGB画像のフィルタ処理手法

python

はじめに

RGB画像にフィルタ処理を適用する際、通常のフィルタ関数は直接適用できません。なぜなら、多くのフィルタはグレースケール画像(1チャンネル)用に設計されているからです。scikit-imageライブラリでは、color.adapt_rgb関数を使用することで、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でフィルタ処理された画像は色が不自然になることがあります。

グレースケールに変換してからフィルタ処理

adapt_rgbを使用してRGB画像をグレースケールに変換してからフィルタをかけることも可能です。この場合、adapt_rgb用の専用関数を作成します。関数には*argsと**kwargsを使用して引数をフィルタに渡すシグネチャを実装し、デコレート関数が任意の数の位置引数とキーワード引数を処理できるようにすることが重要です。

まとめ

scikit-imageのcolor.adapt_rgb関数を使用することで、グレースケール画像用に設計されたフィルタをRGB画像に適用できることを学びました。each_channelモードでは各チャンネルに独立してフィルタを適用し、hsv_valueモードではHSV色空間のV(明度)チャンネルのみにフィルタを適用します。これにより、エッジ検出やぼかしなどの処理をカラー画像に対して効果的に実行できます。どちらのモードを選ぶかは、保持したい画像の特性によって異なります。

参考

Adapting gray-scale filters to RGB images — skimage 0.25.2 documentation
skimage.color — skimage 0.26.0rc0.dev0 documentation

コメント