色抽出
[色彩検査]


関数

INT FVALGAPI fnFIE_color_extraction (const FHANDLE hsrc, FHANDLE hdst, const F_COLOR_CHART *charts, INT num_chart, enum f_colorcheck_norm_type norm_type, const DOUBLE *weight, const DOUBLE *tolerance, INT back_clear)
 色抽出

関数

INT FVALGAPI fnFIE_color_extraction ( const FHANDLE  hsrc,
FHANDLE  hdst,
const F_COLOR_CHART charts,
INT  num_chart,
enum f_colorcheck_norm_type  norm_type,
const DOUBLE *  weight,
const DOUBLE *  tolerance,
INT  back_clear 
)

色抽出

指定した色票リスト(複数の色票)を基に、色抽出を実行します。 以下に、指定した1つの色票に対して色抽出結果を示します。 出力画像の上図は、出力画像の画素タイプが入力画像と同じ場合、下図は、出力画像が2値画像の場合の結果です。 なお色票リストを利用せずに、任意の閾値を指定して色抽出をしたい場合には、 fnFIE_band_threshold_ch() を使用してください。

color_extraction.png

入力画像
  • 入力画像は、画素タイプが F_IMG_UC8 / F_IMG_US16 / F_IMG_DOUBLE のいずれかでなければなりません。
  • チャネル数は、3でなければいけません。
出力画像
  • 画素タイプは、入力画像と画素タイプが同じか2値画像(F_IMG_BIN)でなければなりません。
  • チャネル数は、入力画像と同じ画素タイプでは3、2値画像では1でなければなりません。
  • サイズは、入力画像と同じでなければいけません。
  • back_clear により、色抽出領域以外の画素の指定方法を決定します。
ノルムタイプ
以下に、各ノルムタイプの特徴を挙げます。
  • ユークリッドノルム、マンハッタンノルム、チェビシェフノルムの違いは 距離空間 の項を参照してください。
  • 同じ許容範囲を指定した場合には、マンハッタンノルム、ユークリッドノルム、チェビシェフノルムの順で、大抵の場合、抽出される領域が大きくなります。
  • 許容範囲基準において、すべての許容範囲が同じ値の場合、同値の許容範囲を指定したチェビシェフノルムの結果と同じになります。
  • 分散基準ではチャネル毎に、 $\sigma\times tolerance[0 \sim 2]$ の範囲で色抽出がなされます。
重み付きユークリッドノルムの重み係数
weight は、重み付きユークリッドノルムの計算に使用されます。 それ以外のノルムでは指定しても使用されません。 norm_type に F_CC_WEIGHTED_EUCLIDEAN 以外を指定する場合には使用されませんので weight にはNULL を指定してください。 ただし、NULL以外を指定してもエラーにはなりません。 また weight には、要素数3の配列でなければなりません。 要素数が3未満の場合の動作は保証されません。
許容範囲
tolerance により、色抽出の範囲が決定されます。 使用される tolerance のすべての要素は0以上の値でなければなりません。 また tolerance は要素数3の配列でなければなりません。 要素数が3未満の場合の動作は保証されません。 tolerance の意味は norm_type の指定により代わり、それぞれ次のようになります。
  • F_CC_VARIANCE と F_CC_TOLERANCE 以外を指定した場合:
    tolerance 配列は tolerance[0] の値のみが使用されます。
  • F_CC_VARIANCE 又は F_CC_TOLERANCE を指定した場合:
    tolerance[0] 〜 tolerance[2] を使用します。
引数:
[in] hsrc 入力画像(type:uc8,us16,double / ch:3)
[out] hdst 出力画像(type:uc8,us16,double / ch:3, type:bin / ch:1)
[in] charts 色票配列
[in] num_chart 色票数
[in] norm_type ノルムタイプ
  • F_CC_EUCLIDEAN(ユークリッドノルム)
  • F_CC_WEIGHTED_EUCLIDEAN(重み付きユークリッドノルム)
  • F_CC_MAHALANOBIS(マハラノビスノルム)
  • F_CC_MANHATTAN(マンハッタンノルム)
  • F_CC_CHEBYSHEV(チェビシェフノルム)
  • F_CC_VARIANCE(分散基準)
  • F_CC_TOLERANCE(許容範囲基準)
[in] weight 重み付きユークリッドノルムの重み係数 norm_type に F_CC_WEIGHTED_EUCLIDEAN 以外を指定する場合は 本パラメータには NULL を指定してください。
[in] tolerance 許容範囲
[in] back_clear 背景処理法
  • TRUE 領域外になる画素は0クリア
  • FALSE 領域外になる画素は処理しない
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_IMAGE 不正な画像オブジェクトが渡された
F_ERR_INVALID_OBJECT 不正なオブジェクトが渡された
F_ERR_INVALID_PARAM 不正なパラメータが渡された
F_ERR_NOMEMORY メモリ不足
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_band_threshold_ch()
使用例
// エラー処理は省略しているので注意して下さい。
#include "fie.h"

VOID color_extraction_euclidean()
{
    F_COLOR_CHART charts[2];
    FHANDLE       hsrc = NULL;
    FHANDLE       hdst = NULL;
    FHANDLE       hchild = NULL;
    INT           type, channel, width, height;
    DOUBLE        tolerance;

    // 画像ファイルを読み込む
    fnFIE_load_png( "fie_colorcheck1.png", &hsrc, F_COLOR_IMG_TYPE_UC8 );

    fnFIE_img_get_params( hsrc, &channel, &type, NULL, &width, &height );
    hdst = fnFIE_img_root_alloc( type, channel, width, height );

    // 色票リストを作成する(色票の個数が2つ)
    hchild = fnFIE_img_child_alloc( hsrc, 165, 350, 25, 25 );
    fnFIE_colorchart_calc_image( hchild, NULL, &(charts[0]) );
    fnFIE_free_object( hchild );
    hchild = NULL;

    hchild = fnFIE_img_child_alloc( hsrc, 320, 215, 25, 25 );
    fnFIE_colorchart_calc_image( hchild, NULL, &(charts[1]) );
    fnFIE_free_object( hchild );
    hchild = NULL;

    tolerance = 10.0;

    // 色抽出(ユークリッドノルム基準)の実行する
    // tolerance[0]のみ使用する
    fnFIE_color_extraction( hsrc, hdst, charts, 2, F_CC_EUCLIDEAN, NULL, &tolerance, TRUE );

    fnFIE_free_object( hsrc );
    fnFIE_free_object( hdst );
    fnFIE_free_object( hchild );

    return;
}

VOID color_extraction_variance()
{
    F_COLOR_CHART charts[2];
    FHANDLE       hsrc = NULL;
    FHANDLE       hdst = NULL;
    FHANDLE       hchild = NULL;
    INT           type, channel, width, height;
    DOUBLE        tolerance[3];

    // 画像ファイルを読み込む
    fnFIE_load_png( "fie_colorcheck1.png", &hsrc, F_COLOR_IMG_TYPE_UC8 );

    fnFIE_img_get_params( hsrc, &channel, &type, NULL, &width, &height );
    hdst = fnFIE_img_root_alloc( type, channel, width, height );

    // 色票リストを作成する(色票の個数が2つ)
    hchild = fnFIE_img_child_alloc( hsrc, 165, 350, 25, 25 );
    fnFIE_colorchart_calc_image( hchild, NULL, &(charts[0]) );
    fnFIE_free_object( hchild );
    hchild = NULL;

    hchild = fnFIE_img_child_alloc( hsrc, 320, 215, 25, 25 );
    fnFIE_colorchart_calc_image( hchild, NULL, &(charts[1]) );
    fnFIE_free_object( hchild );
    hchild = NULL;

    tolerance[0] = 1.0;
    tolerance[1] = 2.0;
    tolerance[2] = 3.0;

    // 色抽出(分散基準)の実行する
    // すべてのtoleranceの要素を使用する
    fnFIE_color_extraction( hsrc, hdst, charts, 2, F_CC_VARIANCE, NULL, tolerance, TRUE );

    fnFIE_free_object( hsrc );
    fnFIE_free_object( hdst );
    fnFIE_free_object( hchild );

    return;
}

INT main()
{
    // FIEライブラリの使用前に必ずコールする必要があります。
    fnFIE_setup();

    color_extraction_euclidean();
    color_extraction_variance();

    // 終了処理
    fnFIE_teardown();

    return 0;
}


Documentation copyright © 2009-2024 FAST Corporation.
Generated on Fri Aug 9 16:38:48 2024 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2