実行
[色空間変換]


列挙型

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色空間基準)

列挙型

色空間の種類の指定

色空間の種類を指定します。

列挙型の値:
F_CS_RGB  RGB
F_CS_GRAY  グレースケール
F_CS_XYZ  XYZ
F_CS_YUV  YUV
F_CS_YIQ  YIQ
F_CS_I1I2I3  I1I2I3
F_CS_HSV_SMITH  HSV Smithの六角錐モデル
F_CS_HSV_JOBLOVE  HSV Jobloveらの双六角錐モデル
F_CS_LAB  L*a*b* 均等色空間
F_CS_HSV_FAST  HSV FAST独自仕様
F_CS_LAB_FAST  L*a*b* 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 
)

色空間変換処理

指定された色空間変換処理を行います。 対応する色空間変換をFig1に示します。 本ライブラリでは $ RGB $ 色空間を基準色空間と定義しています。 $ RGB $ からその他色空間、その他色空間から $ RGB $ への変換が可能です。 同一色空間同士の変換を除いて、その他色空間からその他色空間への変換はできません。

color_convert_01.png

Fig1. 各色空間変換の対応一覧

対応する画素タイプ間の変換とスケーリング、オフセットの有無をFig2に示します。 スケーリング、オフセット処理は $ 0 \sim 255 $ となるようにスケーリングとオフセットがなされます。 処理を行わない場合は、変換式にて求められた値が、そのまま出力画像に保持されます。 値の範囲については、色空間と色空間変換の説明を参照ください。 入力画像の色空間が $ RGB $ で、出力画像の画素タイプがUC8の場合、スケーリングとオフセットがなされる色空間があります。 また入力画像がその他色空間で、入力画像の画素タイプがUC8の場合も同様に、 スケーリングとオフセットがなされる色空間があります。 対応する色空間については、色空間と色空間変換の説明を参照してください。

入力画像の色空間が $ RGB $ かその他色空間かどうかにより、スケーリング、オフセットに対応する画素タイプが異なるため注意が必要です。 これは、基準色空間が $ RGB $ と定義したことに起因しています。 スケーリングとオフセット値は、入力、出力共に画素値の範囲が $ 0 \sim 255 $ の範囲であると定義して決定されます。 入力画像が $ RGB $ の場合、 $ 0 \le R,G,B \le 255 $ で、出力画像も $ 0 \sim 255 $ の範囲に収まります。 ただし、入力画像が $ RGB $ 以外の色空間である場合は注意が必要です。 この色空間は、$ 0 \sim 255 $ の範囲の $ RGB $ から変換されたことを前提にしています。 そのため、スケーリングとオフセット値は、この前提があることを考慮して決定されています。 変換されたその他色空間では、必ずしも $ 0 \sim 255 $ のすべての組合せが存在するとは限りません。 例えば、 $ I1I2I3 $ 色空間では、 $ 0 \sim 255 $ の範囲である $ RGB $ 色空間から変換されている限りは、 $\left(I1,I2,I3\right)=\left(255,255,255\right)$ という値になることはありません。 そのため、この前提を無視した組合せの値の入力画像からの変換では、 出力画像では、$ 0 \le R,G,B \le 255 $ とならないことがあります。 その場合は、$ 0 \sim 255 $ の範囲でサチュレーション処理がなされます。 もちろん、入力画像の色空間が $ RGB $ でも、$ 0 \sim 255 $ の範囲外を指定した場合は、 出力画像ではサチュレーション処理がなされます。 なお、サチュレーション処理が実行されるのは、出力画像オブジェクトの画素タイプがF_IMG_UC8の場合です。

color_convert_02.png

Fig2. 画素タイプの対応とスケーリング、オフセットの有無

演算精度
本ライブラリでは、処理速度の向上のため、入力画像と出力画像の画素タイプが共にF_IMG_UC8の場合、 32ビットの整数演算で処理を行っています。 それ以外の場合は、64ビット浮動小数点演算で処理を行います。 画素タイプ別の演算精度をFig3に示します。 そのため、一部色空間では、浮動小数点演算と比較して、変換精度が落ちることがあります。
color_convert_03.png

Fig3. 画素タイプ別の演算精度

数値テーブルの利用
本ライブラリでは、画像オブジェクトの画素タイプが F_IMG_UC8 から F_IMG_UC8 への色空間変換の一部で、 数値テーブルを利用し処理速度の向上を図っています。 数値テーブルを利用する色空間変換は以下の通りです。 これらの色空間変換では、数値テーブルを事前に生成し、パラメータ cs_table を指定してください。 正しく指定されていない場合は、エラーとなります。 それ以外の色空間変換では、パラメータ cs_table は NULL を指定することができます。
  • RGB -> L*a*b*
  • RGB -> HSV(FAST独自仕様)
  • RGB -> L*a*b*(FAST独自仕様)
  • HSV(FAST独自仕様)->RGB
  • L*a*b*(FAST独自仕様) -> RGB
チャネル数
  • gray->gray : 入力、出力画像共に1
  • gray->color : 入力画像1、出力画像3
  • color->gray : 入力画像3、出力画像1
  • color->color : 入力、出力画像共に3
チャネル番号と色成分の対応
各色空間におけるチャネル番号と色成分の対応付けは下記の通りです。
色空間 チャネル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 入力画像オブジェクトの色空間
  • 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
[out] dst 出力画像オブジェクト(type:uc8,double)
[in] dst_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
[in] cs_table FIEオブジェクト(数値テーブル)のハンドル
必要がない場合は NULL を指定
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが渡された。 不正な色空間を指定した。 不正な数値テーブルが渡された。
F_ERR_INVALID_IMAGE 不正な画像オブジェクトが渡された。
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
使用例:
以下に、色空間変換ライブラリの4つの使用例の使用例を示します。 数値テーブルを使用しない変換と、使用しない変換の例、 カラー画像からグレースケール画像への変換、 画素タイプの異なる同一色空間画像間での変換の例です。
// エラー処理は省略しているので注意して下さい。
#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;
}

処理結果例:
fie_color_convert_RGB.png

RGB

fie_color_convert_RGB-0.png

R(CH0)

fie_color_convert_RGB-1.png

G(CH1)

fie_color_convert_RGB-2.png

B(CH2)

fie_color_convert_XYZ.png

XYZ

fie_color_convert_XYZ-0.png

X(CH0)

fie_color_convert_XYZ-1.png

Y(CH1)

fie_color_convert_XYZ-2.png

Z(CH2)

fie_color_convert_YIQ.png

YIQ

fie_color_convert_YIQ-0.png

Y(CH0)

fie_color_convert_YIQ-1.png

I(CH1)

fie_color_convert_YIQ-2.png

Q(CH2)

fie_color_convert_YUV.png

YUV

fie_color_convert_YUV-0.png

Y(CH0)

fie_color_convert_YUV-1.png

U(CH1)

fie_color_convert_YUV-2.png

V(CH2)

fie_color_convert_I1I2I3.png

I1I2I3

fie_color_convert_I1I2I3-0.png

I1(CH0)

fie_color_convert_I1I2I3-1.png

I2(CH1)

fie_color_convert_I1I2I3-2.png

I3(CH2)

fie_color_convert_HSV.png

HSV(Smith)

fie_color_convert_HSV-0.png

H(CH0)

fie_color_convert_HSV-1.png

S(CH1)

fie_color_convert_HSV-2.png

V(CH2)

fie_color_convert_HSV_JOBLOVE.png

HSV(Joblove)

fie_color_convert_HSV_JOBLOVE-0.png

H(CH0)

fie_color_convert_HSV_JOBLOVE-1.png

S(CH1)

fie_color_convert_HSV_JOBLOVE-2.png

V(CH2)

fie_color_convert_HSV_FAST.png

HSV(FAST仕様)

fie_color_convert_HSV_FAST-0.png

H(CH0)

fie_color_convert_HSV_FAST-1.png

S(CH1)

fie_color_convert_HSV_FAST-2.png

V(CH2)

fie_color_convert_LAB.png

L*a*b*

fie_color_convert_LAB-0.png

L*(CH0)

fie_color_convert_LAB-1.png

a*(CH1)

fie_color_convert_LAB-2.png

b*(CH2)

fie_color_convert_LAB_FAST.png

L*a*b*(FAST仕様)

fie_color_convert_LAB_FAST-0.png

L*(CH0)

fie_color_convert_LAB_FAST-1.png

a*(CH1)

fie_color_convert_LAB_FAST-2.png

b*(CH2)

FHANDLE FVALGAPI fnFIE_open_color_convert_mathtbl ( VOID   ) 

数値テーブルの生成

色空間変換処理で使用される数値テーブルを生成します。 このテーブルは一度生成されると、その後変更されないため、再利用することができます。 なお、本テーブルは、本ライブラリにおける、すべての色空間で使用されるわけではありません。 本テーブルが使用されるのは、入力画像と出力画像の画素タイプが共に F_IMG_UC8 である一部の処理で使用されます。 対象となる処理は以下の通りです。 それ以外の場合は、本テーブルを生成する必要はありません。

  • RGB -> L*a*b*
  • RGB -> HSV(FAST独自仕様)
  • RGB -> L*a*b*(FAST独自仕様)
  • HSV(FAST独自仕様)->RGB
  • L*a*b*(FAST独自仕様) -> RGB
生成された数値テーブルは不要になったら fnFIE_free_object() にて解放してください。

戻り値:
FIEオブジェクトのハンドルを返します。 ライセンスエラー、未初期化エラー、またはメモリ不足などで失敗した場合は、NULLを返します。

INT FVALGAPI fnFIE_img_hsv_to_gray ( FHANDLE  hsrc,
FHANDLE  hdst,
DOUBLE  hue_base,
DOUBLE  hue_range,
DOUBLE  sat_low,
DOUBLE  sat_high 
)

色彩特徴量画像の生成(HSV色空間基準)

入力画像の色相と彩度から、色彩特徴量画像を生成します。 色彩特徴量とは、指定したパラメータにより、カラー画像から特定の色を強調させた濃淡画像です。

なお、入力画像は RGB色空間である必要があります。 関数内部で HSV(Smithの六角錐モデル)に変換された後、色彩特徴量画像が生成されます。

色彩特徴量画像の特徴は、以下の通りです。

  • 特定色の特徴を強調させることで、一般的なグレイ画像では処理が難しかった処理が行えます。
  • カラー画像で処理する必要があった画像を、グレイ画像として処理が行えます。
  • カラー画像に対応していなかった、濃淡画像処理の豊富な関数群が利用可能です。
  • カラー画像を直接処理をするより、データ量や処理時間の低減が望めます。
入力画像と出力画像の幅と高さは同じである必要があります。

色相範囲の設定
色相基準を中心として、±方向の色相範囲内が有効となります。 色相基準と角度が近いほど、特徴量が大きいことを意味します。 詳細については、下図(色相の設定)を参考にしてください。 なお横軸の色相範囲は0〜360、縦軸の色相特徴量の範囲は0〜255となります。 彩度特徴量と組み合わせることで、色彩特徴量を求めます。

fie_color_convert_HSV-hue.png

fie_color_convert_HSV-hue2.png

彩度範囲の設定
彩度の下限値と上限値を設定します。 下限値と上限値の間の濃度が有効となります。 彩度は下限値と上限値の大きさを入れ替えることで反転モードとなります。 詳細については、下図(彩度の設定)を参考にしてください。 なお横軸の濃度の範囲は0〜255、縦軸の彩度特徴量の範囲は0〜255となります。 色相特徴量と組み合わせることで、色彩特徴量を求めます。

fie_color_convert_HSV-saturation.png

fie_color_convert_HSV-saturation2.png

処理結果
fie_color_convert_HSV-result.png

色相を変更した場合の処理結果

覚え書き:
白、黒、灰のような彩度の低いものは、色相が安定しないため使用すべきではありません。
引数:
[in] hsrc 入力画像のハンドル( type : uc8, channel : 3 )
[out] hdst 出力画像のハンドル( type : uc8, 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 ライセンスエラー、または未初期化エラー


Documentation copyright © 2009-2023 FAST Corporation.
Generated on Fri Jan 13 11:09:33 2023 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2