○まずは原理: 色相(H)、彩度について
RGB各色の明度値(0-255)から計算できる。
R、G、Bをそれぞれ3次元の各座標軸に撮った左手系の直交座標を考える。その座標系を白(255,255,255)を手前、原点(黒)(0,0,0)を奥側に重ねてR軸が右方向になるように置く。そのまま見ている方向の(x,y)2次元に投影したとき、R軸(x軸)から反時計回りに測った角度が色相Hであり、RはH=0°、GはH=120°、BはH=240°となる。
この座標系で
(x,y)=(R-G/2-B/2,sqrt(3)G/2-sqrt(3)B/2)
であり、
H=arctan(y/x)=arctan(sqrt(3)(G-B))/(2R-G-B)
である。
参照:非常にわかりやすい解説「色相、彩度、明度の計算方法」
○色演算をする。
ImageMagickのマニュアル該当ページ
色相hueを得るためには
H=arctan(y/x)=arctan(sqrt(3)(G-B))/(2R-G-B)
を計算すれば良いが、0割りがあるので、ifが使えないconvertでは苦しい。
convert a.png -fx “atan2(sqrt(3)*(g-b),2*r-g-b)” a_hue.png
のようにやろうとすると、0割りで異常な値が出る、マイナスの処理をしなければならない、など簡単には解決しない。特に、0割りが入ると全体の値がおかしくなる。
しかし、”hue”で色相が0-255で得られるので、
convert a.png -fx “hue” a_hue.png
のようにすれば良い。ただしhueそのものでは見やすくなるとは限らないので、もう少し演算が必要である。
参考になるページ
○カラー画像からR、G、Bの明度を取り出したり合成したりする。
各色の取り出し
convert a.png -fX R a_R.png
convert a.png -fX G a_G.png
convert a.png -fX B a_B.png
R、G、Bにグレースケール画像を割り当て(これはBとGを入れ替えた例
convert ( a_R.png a_B.png a_G.png ) -set colorspace RGB -combine -set colorspace sRGB a_RBG.png
参考になるページ
ImageMagick についてはググればそれなりに出てくる。