|
●概要 ここで提供している画像の色変換処理 ImageColor メソッドについて解説している。 ●処理内容 主としてカラー画像を単色で表す処理である。モノクロ化は、RGB各値を同じ値にすることで得られる。以下の処理を行っている。 ○Y_ImageYCC 変換し、そのYの値をRGB各値にする。 ○Cb_Image YCC 変換し、Cb (色差 青)の値を、0から255に写像して、RGB各値にする。 Y = 0.299 * R + 0.587 * G + 0.114 * B なので、 Cb = B - (0.299 * R + 0.587 * G + 0.114 * B) Cb の最大値は、B = 255、R = G = 0 のときで、Cbmax = 225.93、最小値は、B = 0、R = G = 255 のときで、Cbmin = -225.93 となる。これを 0から255に写像するには、 Cb' = 255 / (Cbmax - Cbmin) * (Cb - Cbmin) なる線形変換を行う。安全のため閾値処理を追加する。 ○Cr_Image YCC 変換し、Cr (色差 赤) の値を、0から255に写像して、RGB各値にする。 Y = 0.299 * R + 0.587 * G + 0.114 * B なので、 Cr = R - (0.299 * R + 0.587 * G + 0.114 * B) Cr の最大値は、R = 255、G = B = 0 のときで、Crmax = 178.755、最小値は、R = 0、G = B = 255 のときで、Crmin = -178.755 となる。これを 0から255に写像するには、 Cr' = 255 / (Crmax - Crmin) * (Cr - Crmin) なる線形変換を行う。安全のため閾値処理を追加する。 ○H_Image HSL変換し、色相H をそのままで、S = 1、L = 0.5 にして、RGB変換し、その色相における純色にて新しい画像とする。 ○S_Image HSL変換し、彩度S を、0から255に写像して、RGB各値にする。 ○L_Image HSL変換し、明度L を、0から255に写像して、RGB各値にする。 ○R_Image Rをそのままで、G = B = 0 とした画像。 ○G_Image Gをそのままで、R = B = 0 とした画像。 ○B_Image Bをそのままで、R = G = 0 とした画像。 ・R_Image + G_Image + B_Image にて、元のカラー画像になる。 ●高速化 ○Y_Image YCC変換関数を使うと、無駄な演算が含まれるので、直接、Yのみを求める。 ○Cb/Cr_Image YCC変換関数を使うと、無駄な演算が含まれるので、直接、CbやCr を求める。 ○C++ それぞれ、C++版がある。 |