列挙型 | |
enum | f_color_space { F_CS_RGB, F_CS_GRAY, F_CS_XYZ, F_CS_YUV, F_CS_YIQ, F_CS_I1I2I3, F_CS_HSV_SMITH, F_CS_HSV_JOBLOVE, F_CS_LAB, F_CS_HSV_FAST, F_CS_LAB_FAST } |
色空間の種類の指定 [詳細] | |
関数 | |
INT FVALGAPI | fnFIE_color_convert (const FHANDLE src, enum f_color_space src_color_space, FHANDLE dst, enum f_color_space dst_color_space, const FHANDLE cs_table) |
色空間変換処理 | |
FHANDLE FVALGAPI | fnFIE_open_color_convert_mathtbl (VOID) |
数値テーブルの生成 | |
INT FVALGAPI | fnFIE_img_hsv_to_gray (FHANDLE hsrc, FHANDLE hdst, DOUBLE hue_base, DOUBLE hue_range, DOUBLE sat_low, DOUBLE sat_high) |
色彩特徴量画像の生成(HSV色空間基準) |
enum f_color_space |
INT FVALGAPI fnFIE_color_convert | ( | const FHANDLE | src, | |
enum f_color_space | src_color_space, | |||
FHANDLE | dst, | |||
enum f_color_space | dst_color_space, | |||
const FHANDLE | cs_table | |||
) |
色空間変換処理
指定された色空間変換処理を行います。 対応する色空間変換をFig1に示します。 本ライブラリでは 色空間を基準色空間と定義しています。
からその他色空間、その他色空間から
への変換が可能です。 同一色空間同士の変換を除いて、その他色空間からその他色空間への変換はできません。
Fig1. 各色空間変換の対応一覧
入力画像の色空間が かその他色空間かどうかにより、スケーリング、オフセットに対応する画素タイプが異なるため注意が必要です。 これは、基準色空間が
と定義したことに起因しています。 スケーリングとオフセット値は、入力、出力共に画素値の範囲が
の範囲であると定義して決定されます。 入力画像が
の場合、
で、出力画像も
の範囲に収まります。 ただし、入力画像が
以外の色空間である場合は注意が必要です。 この色空間は、
の範囲の
から変換されたことを前提にしています。 そのため、スケーリングとオフセット値は、この前提があることを考慮して決定されています。 変換されたその他色空間では、必ずしも
のすべての組合せが存在するとは限りません。 例えば、
色空間では、
の範囲である
色空間から変換されている限りは、
という値になることはありません。 そのため、この前提を無視した組合せの値の入力画像からの変換では、 出力画像では、
とならないことがあります。 その場合は、
の範囲でサチュレーション処理がなされます。 もちろん、入力画像の色空間が
でも、
の範囲外を指定した場合は、 出力画像ではサチュレーション処理がなされます。 なお、サチュレーション処理が実行されるのは、出力画像オブジェクトの画素タイプがF_IMG_UC8の場合です。
Fig2. 画素タイプの対応とスケーリング、オフセットの有無
Fig3. 画素タイプ別の演算精度
色空間 | チャネル0 | チャネル1 | チャネル2 |
---|---|---|---|
F_CS_RGB | R | G | B |
F_CS_XYZ | X | Y | Z |
F_CS_YUV | Y | U | V |
F_CS_YIQ | Y | I | Q |
F_CS_I1I2I3 | I1 | I2 | I3 |
F_CS_HSV_SMITH | H | S | V |
F_CS_HSV_JOBLOVE | H | S | V |
F_CS_LAB | L* | a* | b* |
F_CS_HSV_FAST | H | S | V |
F_CS_LAB_FAST | L* | a* | b* |
[in] | src | 入力画像オブジェクト(type:uc8,double) |
[in] | src_color_space | 入力画像オブジェクトの色空間
|
[out] | dst | 出力画像オブジェクト(type:uc8,double) |
[in] | dst_color_space | 出力画像オブジェクトの色空間
|
[in] | cs_table | FIEオブジェクト(数値テーブル)のハンドル 必要がない場合は NULL を指定 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された。 不正な色空間を指定した。 不正な数値テーブルが渡された。 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが渡された。 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい。 #include "fie.h" // 画像オブジェクトの画素タイプがF_IMG_DOUBLE同士の変換 VOID rgb_dbl_to_lab_dbl() { FHANDLE hsrc = NULL, hdst = NULL; // カラー画像同士の変換の場合、画像オブジェクトのチャネル数、 // 幅、高さが同じである必要がある // カラー画像は3チャネルである必要がある hsrc = fnFIE_img_root_alloc( F_IMG_DOUBLE, 3, 256, 256 ); hdst = fnFIE_img_root_alloc( F_IMG_DOUBLE, 3, 256, 256 ); // この変換では数値テーブルは使用されないため、NULLを指定しても問題ない fnFIE_color_convert( hsrc, F_CS_RGB, hdst, F_CS_LAB, NULL ); fnFIE_free_object( hsrc ); fnFIE_free_object( hdst ); } // 画像オブジェクトの画素タイプがF_IMG_UC8同士の変換 VOID rgb_uc8_to_lab_uc8() { FHANDLE hsrc = NULL, hdst = NULL, htbl = NULL; // カラー画像同士の変換の場合、画像オブジェクトのチャネル数、 // 幅、高さが同じである必要がある // カラー画像は3チャネルである必要がある hsrc = fnFIE_img_root_alloc( F_IMG_UC8, 3, 256, 256 ); hdst = fnFIE_img_root_alloc( F_IMG_UC8, 3, 256, 256 ); // 数値テーブルを生成する htbl = fnFIE_open_color_convert_mathtbl(); // この変換では数値テーブルが使用される // もしNULLを指定した場合は、エラーとなる fnFIE_color_convert( hsrc, F_CS_RGB, hdst, F_CS_LAB, htbl ); fnFIE_free_object( hsrc ); fnFIE_free_object( hdst ); fnFIE_free_object( htbl ); return; } // カラー画像からグレースケール画像への変換 VOID rgb_dbl_to_gray_uc8() { FHANDLE hsrc = NULL, hdst = NULL; // カラー画像からグレースケール画像への変換のため、 // 画像オブジェクトのチャネル数は異なる // 幅、高さが同じである必要がある // カラー画像は3チャネル、グレースケール画像は1チャネルである必要がある hsrc = fnFIE_img_root_alloc( F_IMG_DOUBLE, 3, 256, 256 ); hdst = fnFIE_img_root_alloc( F_IMG_UC8, 1, 256, 256 ); // この変換では数値テーブルは使用されないため、NULLを指定しても問題ない fnFIE_color_convert( hsrc, F_CS_RGB, hdst, F_CS_GRAY, NULL ); fnFIE_free_object( hsrc ); fnFIE_free_object( hdst ); return; } // 画素タイプの異なる同一色空間画像間の変換 VOID xyz_uc8_to_xyz_dbl() { FHANDLE hsrc = NULL, hdst = NULL; // カラー画像同士の変換の場合、画像オブジェクトのチャネル数、 // 幅、高さが同じである必要がある // カラー画像は3チャネルである必要がある hsrc = fnFIE_img_root_alloc( F_IMG_UC8, 3, 256, 256 ); hdst = fnFIE_img_root_alloc( F_IMG_DOUBLE, 3, 256, 256 ); // この変換では数値テーブルは使用されないため、NULLを指定しても問題ない fnFIE_color_convert( hsrc, F_CS_XYZ, hdst, F_CS_XYZ, NULL ); fnFIE_free_object( hsrc ); fnFIE_free_object( hdst ); return; } INT main() { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); rgb_dbl_to_lab_dbl(); rgb_uc8_to_lab_uc8(); rgb_dbl_to_gray_uc8(); xyz_uc8_to_xyz_dbl(); // 終了処理 fnFIE_teardown(); return 0; }
![]() RGB | ![]() R(CH0) | ![]() G(CH1) | ![]() B(CH2) |
![]() XYZ | ![]() X(CH0) | ![]() Y(CH1) | ![]() Z(CH2) |
![]() YIQ | ![]() Y(CH0) | ![]() I(CH1) | ![]() Q(CH2) |
![]() YUV | ![]() Y(CH0) | ![]() U(CH1) | ![]() V(CH2) |
![]() I1I2I3 | ![]() I1(CH0) | ![]() I2(CH1) | ![]() I3(CH2) |
![]() HSV(Smith) | ![]() H(CH0) | ![]() S(CH1) | ![]() V(CH2) |
![]() HSV(Joblove) | ![]() H(CH0) | ![]() S(CH1) | ![]() V(CH2) |
![]() HSV(FAST仕様) | ![]() H(CH0) | ![]() S(CH1) | ![]() V(CH2) |
![]() L*a*b* | ![]() L*(CH0) | ![]() a*(CH1) | ![]() b*(CH2) |
![]() L*a*b*(FAST仕様) | ![]() L*(CH0) | ![]() a*(CH1) | ![]() b*(CH2) |
FHANDLE FVALGAPI fnFIE_open_color_convert_mathtbl | ( | VOID | ) |
数値テーブルの生成
色空間変換処理で使用される数値テーブルを生成します。 このテーブルは一度生成されると、その後変更されないため、再利用することができます。 なお、本テーブルは、本ライブラリにおける、すべての色空間で使用されるわけではありません。 本テーブルが使用されるのは、入力画像と出力画像の画素タイプが共に F_IMG_UC8 である一部の処理で使用されます。 対象となる処理は以下の通りです。 それ以外の場合は、本テーブルを生成する必要はありません。
INT FVALGAPI fnFIE_img_hsv_to_gray | ( | FHANDLE | hsrc, | |
FHANDLE | hdst, | |||
DOUBLE | hue_base, | |||
DOUBLE | hue_range, | |||
DOUBLE | sat_low, | |||
DOUBLE | sat_high | |||
) |
色彩特徴量画像の生成(HSV色空間基準)
入力画像の色相と彩度から、色彩特徴量画像を生成します。
色彩特徴量とは、指定したパラメータにより、カラー画像から特定の色を強調させた濃淡画像です。
色彩特徴量画像の特徴は、以下の通りです。
なお、上記のはそれぞれ
です。ここで、本ライブラリでは、以下のようにしています。
これら色相特徴量と彩度特徴量を用い、色彩特徴量を求めます。
なお、色彩特徴量画像は画像型ごとに決まった範囲に線形的にスケーリングされたものが生成されます。
以下は、出力される画像型ごとの範囲です。
入力画像と出力画像の幅・高さは同じである必要があります。
入力画像がF_IMG_RGBQUAD, F_IMG_RGBTRIPLEの場合、出力画像の型はF_IMG_UC8である必要があります。 それ以外の場合は入力画像と出力画像の画像型は同じである必要があります。
色相を変更した場合の処理結果
[in] | hsrc | 入力画像のハンドル( type : uc8, s16, us16, double, rgbq, float, rgbtri)( channel : 3 ) |
[out] | hdst | 出力画像のハンドル( type : uc8, s16, us16, double, float)( channel : 1 ) |
[in] | hue_base | 色相基準( 0 <= hue_base < 360 )単位:度 |
[in] | hue_range | 色相範囲( 0 <= hue_range <= 180 ) 単位:度 |
[in] | sat_low | 彩度下限( 0 <= sat_low <= 255) |
[in] | sat_high | 彩度上限( 0 <= sat_high <= 255) |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトを渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |