はじめに
このページでは、scikit-imageライブラリのskimage.transform.match_histograms
関数を使用したRGB画像のヒストグラムマッチングについて解説します。この手法を使うと、ある画像の色調を別の画像に合わせることができ、写真の色味を統一したり、画像処理パイプラインでの色調整に役立ちます。
コード

解説
モジュールのインポート
画像データの読み込み
変換したい画像として「obesa.jpg」を読み込み、色味を合わせる参照画像として猫の画像を読み込みました。obesaの画像は以下のようになります。

RGBのヒストグラムを合わせる
match_histograms(image, reference, multichannel=True)
関数では、imageパラメータに変換したい元画像を、referenceパラメータに色味を合わせたい参照画像を指定します。multichannel=True
を設定することで、RGB画像の各チャネル(赤・緑・青)それぞれに対して個別にヒストグラム調整が適用されます。
画像の表示
aa.set_axis_off()で軸などを非表示としています。
RGB、それぞれのヒストグラムの表示

コード内には入れ子のfor文があるため構造がやや複雑ですが、図は以下の順序で作成されます:元画像のR・G・B、参照画像のR・G・B、マッチング後の画像のR・G・Bチャネル。
exposure.histogram
関数を使って画像のヒストグラムを作成します。image[...,0]
が赤、image[...,1]
が緑、image[...,2]
が青のチャネルを表します。ここでの「…」はEllipsisオブジェクトであり、[...,0]
は[:,:,0]
と同じ意味です。
画像のヒストグラムは棒グラフで表示されます。 また、cumulative_distribution
関数を使用して、画像の累積ヒストグラムを作成できます。 参照画像(reference)とマッチング後の画像(matched)の累積ヒストグラムがほぼ同じ形状になっていることが確認できます。
コメント