RGBカラー画像をグレースケールへ色空間変換する原理や特徴、計算式についてまとめました。
RGBからグレースケールへの変換
グレースケール変換とは、以下のようにカラー画像をモノクロ調に変換する処理です。
→変換→
単に「写真をレトロな雰囲気にしたい」という画像加工的な使い方でも用いられますが、以下のとおり画像解析でも重要なテクニックとなります。
画像中から顔を探索するなど、計算コストの重い処理を行う場合、カラー画像(24ビット、RGB)をグレースケール画像(8ビット)に変換することで計算効率を向上させることが多いです。
(1画素あたりのデータ量が24bitから8bitとなるため、単純に考えると処理速度は3倍になります)
→変換→
→顔を探索→
参考:【Python版OpenCV】Haar Cascadeで顔検出、アニメ顔検出、顔にモザイク処理
カラー画像の画素値をグレースケールに変換する場合、RGBのいずれか1つの要素値を抽出、RGBの値の平均値を用いるなど様々な方法があります。
解説動画
変換式の例(加重平均法)
代表例としては、RGB各要素に一定の重み付けをして平均をとるNTSC(テレビ放送規格)加重平均法があります。計算式は以下のとおりです。
$$ Gray = (Red\times 0.30) + (Green\times 0.59) + (Blue\times 0.11) $$
Red(赤)、Green(緑)、Blue(青)はRGBカラー画像の画素値、Grayはグレースケール画像の画素値です。
計算例
例えば、Red(0, 0)=255, Green(0, 0)=12, Blue(0, 0)=35のとき、Gray(0, 0)の画素値は以下のように87となります。
$$ Gray(0, 0)=Red(0, 0)\times 0.3 + Green(0, 0)\times 0.59 + Blue(0, 0)\times 0.11 $$
$$ =(255 \cdot 0.3) + (12 \cdot 0.59) + (35 \cdot 0.11)=87.43\simeq 87 $$
グレースケール変換のアルゴリズムについては、以下ページで詳細を解説しています。

プログラムでの実装例
Python版OpenCVで画像データをRGBからグレースケールに変換するプログラムを実装する方法を以下ページで解説しています。

その他の画像処理アルゴリズムについては、以下ページで解説しています。

コメント