実行結果操作
[2値ブローブ解析]


データ構造

struct  F_MEASURE_FILTER_RANGE
 フィルタ条件指定 [詳細]

マクロ定義

#define F_FEATUREFLAG_XYRANGE   0x0000000000000001
#define F_FEATUREFLAG_AREA   0x0000000000000002
#define F_FEATUREFLAG_PERIMETER   0x0000000000000004
#define F_FEATUREFLAG_MOMENT1   0x0000000000000008
#define F_FEATUREFLAG_MOMENT2   0x0000000000000010
#define F_FEATUREFLAG_CENTERG   0x0000000000000020
#define F_FEATUREFLAG_RECT1AREA   0x0000000000000080
#define F_FEATUREFLAG_RECT1LRATIO   0x0000000000000100
#define F_FEATUREFLAG_RECT1SRATIO   0x0000000000000200
#define F_FEATUREFLAG_RECT2SIZE   0x0000000000000400
#define F_FEATUREFLAG_RECT2AREA   0x0000000000000800
#define F_FEATUREFLAG_RECT2LRATIO   0x0000000000001000
#define F_FEATUREFLAG_RECT2SRATIO   0x0000000000002000
#define F_FEATUREFLAG_EQUIELLIPSE   0x0000000000004000
#define F_FEATUREFLAG_DISTANCEP   0x0000000000008000
#define F_FEATUREFLAG_HOLENUM   0x0000000000010000
#define F_FEATUREFLAG_HOLEAREA   0x0000000000020000
#define F_FEATUREFLAG_HOLERATIO   0x0000000000040000

列挙型

enum  f_measure_special_sort_order {
  F_MEASURE_UP_TO_LEFT_RIGHT = 0, F_MEASURE_UP_TO_RIGHT_LEFT = 1,
  F_MEASURE_DOWN_TO_LEFT_RIGHT = 2, F_MEASURE_DOWN_TO_RIGHT_LEFT = 3,
  F_MEASURE_LEFT_TO_UP_DOWN = 4, F_MEASURE_LEFT_TO_DOWN_UP = 5,
  F_MEASURE_RIGHT_TO_UP_DOWN = 6, F_MEASURE_RIGHT_TO_DOWN_UP = 7
}
 ブローブ解析:配置順指定 [詳細]
enum  f_measure_feature_type {
  F_FEATURE_NONE = 0, F_FEATURE_COLOR = 1,
  F_FEATURE_XMIN = 2, F_FEATURE_YMIN = 3,
  F_FEATURE_XMAX = 4, F_FEATURE_YMAX = 5,
  F_FEATURE_XMIN_AT_YMIN = 6, F_FEATURE_XMAX_AT_YMAX = 7,
  F_FEATURE_YMIN_AT_XMAX = 8, F_FEATURE_YMAX_AT_XMIN = 9,
  F_FEATURE_XDIFF = 10, F_FEATURE_YDIFF = 11,
  F_FEATURE_SUMX = 12, F_FEATURE_SUMY = 13,
  F_FEATURE_SUMX2 = 14, F_FEATURE_SUMY2 = 15,
  F_FEATURE_SUMXY = 16, F_FEATURE_AREA = 17,
  F_FEATURE_CENTERX = 18, F_FEATURE_CENTERY = 19,
  F_FEATURE_RECT1AREA = 20, F_FEATURE_RECT1LRATIO = 21,
  F_FEATURE_RECT1SRATIO = 22, F_FEATURE_LSIZE = 23,
  F_FEATURE_WSIZE = 24, F_FEATURE_RECT2AREA = 25,
  F_FEATURE_RECT2LRATIO = 26, F_FEATURE_RECT2SRATIO = 27,
  F_FEATURE_MAJORAXIS = 28, F_FEATURE_MINORAXIS = 29,
  F_FEATURE_AXISTHETA = 30, F_FEATURE_AXISRATIO = 31,
  F_FEATURE_DIAMETER_EQUIDISK = 32, F_FEATURE_DIAMETER_EQUICIRCLE = 33,
  F_FEATURE_CIRCULARITY1 = 34, F_FEATURE_CIRCULARITY2 = 35,
  F_FEATURE_CIRCULARITY3 = 36, F_FEATURE_CONVEX_AREA = 37,
  F_FEATURE_CONVEX_PERIM = 38, F_FEATURE_CONVEX_AREARATIO = 39,
  F_FEATURE_CONVEX_PERIMRATIO = 40, F_FEATURE_FERET_MAX = 41,
  F_FEATURE_FERET_MIN = 42, F_FEATURE_FMAX_THETA = 43,
  F_FEATURE_FMIN_THETA = 44, F_FEATURE_DPMIN = 45,
  F_FEATURE_DPMAX = 46, F_FEATURE_DPAVE = 47,
  F_FEATURE_DPSIGMA = 48, F_FEATURE_DCMAX = 49,
  F_FEATURE_DCMIN = 50, F_FEATURE_DCAVE = 51,
  F_FEATURE_DSMAX = 52, F_FEATURE_DSMIN = 53,
  F_FEATURE_DSAVE = 54, F_FEATURE_NS = 55,
  F_FEATURE_PERIM = 56, F_FEATURE_ST = 57,
  F_FEATURE_SC = 58, F_FEATURE_HOLES = 59,
  F_FEATURE_HRATIO = 60, F_FEATURE_PPS = 61,
  F_FEATURE_AXISTHETA_CYCLIC = 62, F_FEATURE_FMAX_THETA_CYCLIC = 63,
  F_FEATURE_FMIN_THETA_CYCLIC = 64, F_FEATURE_M10 = 12,
  F_FEATURE_M01 = 13, F_FEATURE_M20 = 14,
  F_FEATURE_M02 = 15, F_FEATURE_M11 = 16,
  F_FEATURE_M30 = 65, F_FEATURE_M03 = 66,
  F_FEATURE_M21 = 67, F_FEATURE_M12 = 68,
  F_FEATURE_MG20 = 69, F_FEATURE_MG02 = 70,
  F_FEATURE_MG11 = 71, F_FEATURE_MG30 = 72,
  F_FEATURE_MG03 = 73, F_FEATURE_MG21 = 74,
  F_FEATURE_MG12 = 75, F_FEATURE_HU_MOMENT0 = 76,
  F_FEATURE_HU_MOMENT1 = 77, F_FEATURE_HU_MOMENT2 = 78,
  F_FEATURE_HU_MOMENT3 = 79, F_FEATURE_HU_MOMENT4 = 80,
  F_FEATURE_HU_MOMENT5 = 81, F_FEATURE_HU_MOMENT6 = 82
}
 ブローブ解析:フィルタ種別指定 [詳細]

関数

INT FVALGAPI fnFIE_measure_get_list (FHANDLE hresult, F_MEASURE_FILTER_RANGE *filters, UINT filter_num, UINT **blob_numbers, UINT *num)
 ブローブ番号配列の取得
INT FVALGAPI fnFIE_measure_refilter_list (FHANDLE hresult, F_MEASURE_FILTER_RANGE *filters, UINT filter_num, UINT *blob_numbers, UINT *num)
 ブローブ番号配列の特徴量に基づくフィルタリング
INT FVALGAPI fnFIE_measure_sort_list (FHANDLE hresult, enum f_measure_feature_type key1st, INT direc1st, enum f_measure_feature_type key2nd, INT direc2nd, enum f_measure_feature_type key3rd, INT direc3rd, UINT *numbers, UINT num)
 ブローブの特徴量に基づくソーティング
INT FVALGAPI fnFIE_measure_specialsort_list (FHANDLE hresult, enum f_measure_special_sort_order order, DOUBLE theta, UINT *numbers, UINT num)
 ブローブの位置情報に基づくソーティング
FHANDLE FVALGAPI fnFIE_measure_get_region (FHANDLE hresult, UINT blobno, INT *exerr)
 REGION取得
INT FVALGAPI fnFIE_measure_get_parent (const FHANDLE hresult, UINT blobno, UINT *parent)
 親ブローブの取得
INT FVALGAPI fnFIE_measure_get_child (const FHANDLE hresult, UINT blobno, UINT *child)
 子ブローブの取得
INT FVALGAPI fnFIE_measure_get_sibling_back (const FHANDLE hresult, UINT blobno, UINT *back)
 1つ後ろの兄弟ブローブの取得
INT FVALGAPI fnFIE_measure_get_sibling_next (const FHANDLE hresult, UINT blobno, UINT *next)
 1つ次の兄弟ブローブの取得
INT FVALGAPI fnFIE_measure_get_is_valid (const FHANDLE hresult, UINT blobno, UINT *invalid)
 ブローブ番号の有効/無効チェック
INT FVALGAPI fnFIE_measure_get_blobnum (const FHANDLE hresult, UINT *num)
 全ブローブ数の取得
INT FVALGAPI fnFIE_measure_get_real_blobnum (const FHANDLE hresult, UINT *num)
 有効BLOB数の取得

マクロ定義

#define F_FEATUREFLAG_XYRANGE   0x0000000000000001

特徴量グループ指定フラグ:座標範囲(xmin, ymin, xmax, ymax, xmin_at_ymin, xmax_at_ymax, ymin_at_xmax, ymax_at_xmin)

#define F_FEATUREFLAG_AREA   0x0000000000000002

特徴量グループ指定フラグ:面積(area)

#define F_FEATUREFLAG_PERIMETER   0x0000000000000004

特徴量グループ指定フラグ:周囲長

#define F_FEATUREFLAG_MOMENT1   0x0000000000000008

特徴量グループ指定フラグ:1次モーメント(sumx, sumy)

#define F_FEATUREFLAG_MOMENT2   0x0000000000000010

特徴量グループ指定フラグ:2次モーメント(sumx2, sumy2, sumxy)

#define F_FEATUREFLAG_CENTERG   0x0000000000000020

特徴量グループ指定フラグ:重心(centerx, centery)

#define F_FEATUREFLAG_RECT1AREA   0x0000000000000080

特徴量グループ指定フラグ:外接矩形面積(rect1_area)

#define F_FEATUREFLAG_RECT1LRATIO   0x0000000000000100

特徴量グループ指定フラグ:外接矩形縦横比(rect1_lratio)

#define F_FEATUREFLAG_RECT1SRATIO   0x0000000000000200

特徴量グループ指定フラグ:外接矩形面積比(rect1_sratio)

#define F_FEATUREFLAG_RECT2SIZE   0x0000000000000400

特徴量グループ指定フラグ:外接長方形縦横(lsize, wsize)

#define F_FEATUREFLAG_RECT2AREA   0x0000000000000800

特徴量グループ指定フラグ:外接長方形面積(rect2_area)

#define F_FEATUREFLAG_RECT2LRATIO   0x0000000000001000

特徴量グループ指定フラグ:外接長方形縦横比(rect2_lratio)

#define F_FEATUREFLAG_RECT2SRATIO   0x0000000000002000

特徴量グループ指定フラグ:外接長方形面積比(rect2_sratio)

#define F_FEATUREFLAG_EQUIELLIPSE   0x0000000000004000

特徴量グループ指定フラグ:慣性等価楕円関連(majoraxis, minoraxis, axistheta, axisratio)

#define F_FEATUREFLAG_DISTANCEP   0x0000000000008000

特徴量グループ指定フラグ:外周距離最大最小平均標準偏差

#define F_FEATUREFLAG_HOLENUM   0x0000000000010000

特徴量グループ指定フラグ:穴の数

#define F_FEATUREFLAG_HOLEAREA   0x0000000000020000

特徴量グループ指定フラグ:穴面積

#define F_FEATUREFLAG_HOLERATIO   0x0000000000040000

特徴量グループ指定フラグ:穴面積比


列挙型

ブローブ解析:配置順指定

fnFIE_measure_specialsort_list() における配置順指定のための定数

measure_specialsort_order.png

参照:
fnFIE_measure_specialsort_list()
列挙型の値:
F_MEASURE_UP_TO_LEFT_RIGHT  上の行から、左->右の順に配置
F_MEASURE_UP_TO_RIGHT_LEFT  上の行から、右->左の順に配置
F_MEASURE_DOWN_TO_LEFT_RIGHT  下の行から、左->右の順に配置
F_MEASURE_DOWN_TO_RIGHT_LEFT  下の行から、右->左の順に配置
F_MEASURE_LEFT_TO_UP_DOWN  左の列から、上->下の順に配置
F_MEASURE_LEFT_TO_DOWN_UP  左の列から、下->上の順に配置
F_MEASURE_RIGHT_TO_UP_DOWN  右の列から、上->下の順に配置
F_MEASURE_RIGHT_TO_DOWN_UP  右の列から、下->上の順に配置

ブローブ解析:フィルタ種別指定

fnFIE_measure_sort_list() にて、ソート対象とする特徴量、または F_MEASURE_FILTER_RANGE にてフィルタ対象とする特徴量 を指定するための定数

列挙型の値:
F_FEATURE_NONE  ソート対象無し
F_FEATURE_COLOR  ブローブ色
F_FEATURE_XMIN  xmin
F_FEATURE_YMIN  xmax
F_FEATURE_XMAX  ymin
F_FEATURE_YMAX  ymax
F_FEATURE_XMIN_AT_YMIN  xmin_at_ymin
F_FEATURE_XMAX_AT_YMAX  xmax_at_ymax
F_FEATURE_YMIN_AT_XMAX  ymin_at_xmax
F_FEATURE_YMAX_AT_XMIN  ymax_at_xmin
F_FEATURE_XDIFF  xdiff
F_FEATURE_YDIFF  ydiff
F_FEATURE_SUMX  sumx
F_FEATURE_SUMY  sumy
F_FEATURE_SUMX2  sumx2
F_FEATURE_SUMY2  sumy2
F_FEATURE_SUMXY  sumxy
F_FEATURE_AREA  area
F_FEATURE_CENTERX  centerx
F_FEATURE_CENTERY  centery
F_FEATURE_RECT1AREA  rect1_area
F_FEATURE_RECT1LRATIO  rect1_lratio
F_FEATURE_RECT1SRATIO  rect1_sratio
F_FEATURE_LSIZE  lsize
F_FEATURE_WSIZE  wsize
F_FEATURE_RECT2AREA  rect2_area
F_FEATURE_RECT2LRATIO  rect2_lratio
F_FEATURE_RECT2SRATIO  rect2_sratio
F_FEATURE_MAJORAXIS  majoraxis
F_FEATURE_MINORAXIS  minoraxis
F_FEATURE_AXISTHETA  axistheta
F_FEATURE_AXISRATIO  axisratio
F_FEATURE_DIAMETER_EQUIDISK  diameter_equidisk
F_FEATURE_DIAMETER_EQUICIRCLE  diameter_equicircle
F_FEATURE_CIRCULARITY1  circularity1
F_FEATURE_CIRCULARITY2  circularity2
F_FEATURE_CIRCULARITY3  circularity3
F_FEATURE_CONVEX_AREA  convex_area
F_FEATURE_CONVEX_PERIM  convex_perim
F_FEATURE_CONVEX_AREARATIO  convex_arearatio
F_FEATURE_CONVEX_PERIMRATIO  convex_perimratio
F_FEATURE_FERET_MAX  feretmax
F_FEATURE_FERET_MIN  feretmin
F_FEATURE_FMAX_THETA  fmax_theta
F_FEATURE_FMIN_THETA  fmin_theta
F_FEATURE_DPMIN  dpmin
F_FEATURE_DPMAX  dpmax
F_FEATURE_DPAVE  dpave
F_FEATURE_DPSIGMA  dpsigma
F_FEATURE_DCMAX  dcmax
F_FEATURE_DCMIN  dcmin
F_FEATURE_DCAVE  dcave
F_FEATURE_DSMAX  dsmax
F_FEATURE_DSMIN  dsmin
F_FEATURE_DSAVE  dsave
F_FEATURE_NS  ns
F_FEATURE_PERIM  perimeter
F_FEATURE_ST  st
F_FEATURE_SC  sc
F_FEATURE_HOLES  holes
F_FEATURE_HRATIO  hratio
F_FEATURE_PPS  pps
F_FEATURE_AXISTHETA_CYCLIC  axistheta の巡回判定版
F_FEATURE_FMAX_THETA_CYCLIC  fmax_theta の巡回判定版
F_FEATURE_FMIN_THETA_CYCLIC  fmin_theta の巡回判定版
F_FEATURE_M10  モーメント M10 == F_MEATURE_SUMX
F_FEATURE_M01  モーメント M01 == F_MEATURE_SUMY
F_FEATURE_M20  モーメント M20 == F_MEATURE_SUMX2
F_FEATURE_M02  モーメント M02 == F_MEATURE_SUMY2
F_FEATURE_M11  モーメント M11 == F_MEATURE_SUMXY
F_FEATURE_M30  モーメント M30
F_FEATURE_M03  モーメント M03
F_FEATURE_M21  モーメント M21
F_FEATURE_M12  モーメント M12
F_FEATURE_MG20  重心モーメント MG20
F_FEATURE_MG02  重心モーメント MG02
F_FEATURE_MG11  重心モーメント MG11
F_FEATURE_MG30  重心モーメント MG30
F_FEATURE_MG03  重心モーメント MG03
F_FEATURE_MG21  重心モーメント MG21
F_FEATURE_MG12  重心モーメント MG12
F_FEATURE_HU_MOMENT0  Huモーメント不変量0
F_FEATURE_HU_MOMENT1  Huモーメント不変量1
F_FEATURE_HU_MOMENT2  Huモーメント不変量2
F_FEATURE_HU_MOMENT3  Huモーメント不変量3
F_FEATURE_HU_MOMENT4  Huモーメント不変量4
F_FEATURE_HU_MOMENT5  Huモーメント不変量5
F_FEATURE_HU_MOMENT6  Huモーメント不変量6


関数

INT FVALGAPI fnFIE_measure_get_list ( FHANDLE  hresult,
F_MEASURE_FILTER_RANGE filters,
UINT  filter_num,
UINT **  blob_numbers,
UINT *  num 
)

ブローブ番号配列の取得

指定の特徴量範囲にマッチするブローブのブローブ番号を配列で返します。 なお、背景ブローブ及び無効ブローブの番号は出力ブローブ番号配列には含まれません。 また、フィルタが2種以上指定されているとき( filter_num > 1 )は、 全ての条件のANDでの評価となります。

返される配列は内部で fnOAL_malloc() を使用してメモリを確保し、そのポインタを *blob_numbers にて返します。 関数へのエントリー時、パラメータ blob_numbers の値 *blob_numbers はNULLでなければいけません。 *blob_numbers に返された配列は利用後 fnOAL_free() にてメモリを解放してください。

引数:
[in] hresult ブローブ解析結果ハンドル
[in] filters 取得条件フィルタ配列
filter_num == 0 の場合は NULL を指定できます。
[in] filter_num filters の配列サイズ(単位:要素数, filter_num > 0)
[out] blob_numbers ブローブ番号配列 (*blob_numbers=NULL)
[out] num blob_numbers の配列サイズ(単位:要素数)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult パラメータに指定されたブローブ解析結果ハンドルが不正
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_measure_refilter_list()
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "oal_aloc.h"
#include "fie.h"

INT main()
{
    FHANDLE himg=NULL;
    FHANDLE measure_result;
    F_MEASURE_PARAMS param;
    PNT_T orgin;
    INT exerr;
    UINT *bloblist=NULL, blobnum, i;

    F_MEASURE_FILTER_RANGE filters[2];

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

    // 適当な2値画像を用意する - 画像ファイル名は適宜変更すること
    fnFIE_load_bmp( "test.bmp", &himg, F_COLOR_IMG_TYPE_UC8 );

    // 座標原点の指定
    orgin.x = 0;
    orgin.y = 0;

    // パラメータ設定
    memset( &param, 0, sizeof(F_MEASURE_PARAMS) );
    param.color_mode = F_MEASURE_WHITEFG_BLACKBG;
    param.neighborhood = 8;

    // メジャー実行
    measure_result = fnFIE_measure_execute( himg, orgin, &param, &exerr );


    // 面積が 10〜1000 で、且つ xdiffが 2〜10 のブローブのブローブ番号リストを取得。
    filters[0].type = F_FEATURE_AREA;
    filters[0].min = 10;
    filters[0].max = 1000;
    filters[1].type = F_FEATURE_XDIFF;
    filters[1].min = 2;
    filters[1].max = 10;
    fnFIE_measure_get_list( measure_result, filters, 2, &bloblist, &blobnum );

    // 得られたブローブ番号列を表示
    printf( "FILTER1: " );
    for( i=0; i<blobnum; i++ ) printf( "%d, ", bloblist[i] );
    printf( "\n" );


    // さらに ydiff が 2〜10 のブローブを取り出す。
    filters[0].type = F_FEATURE_YDIFF;
    filters[0].min = 2;
    filters[0].max = 10;
    fnFIE_measure_refilter_list( measure_result, filters, 1, bloblist, &blobnum );
    
    // 得られたブローブ番号列を表示
    printf( "FILTER2: " );
    for( i=0; i<blobnum; i++ ) printf( "%d, ", bloblist[i] );
    printf( "\n" );

    
    // ブローブ番号配列は使い終わったらユーザー側で解放しなければならない。
    // 解放には必ず fnOAL_free を使うこと。
    fnOAL_free( bloblist );
    
    fnFIE_free_object( measure_result );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_measure_refilter_list ( FHANDLE  hresult,
F_MEASURE_FILTER_RANGE filters,
UINT  filter_num,
UINT *  blob_numbers,
UINT *  num 
)

ブローブ番号配列の特徴量に基づくフィルタリング

blob_numbers に渡されたブローブ番号配列から、 filters にて指定される 特徴量範囲にマッチしないブローブのブローブ番号を取り除きます。 なお、背景ブローブ及び無効ブローブの番号は出力ブローブ番号配列には含まれません。 また、フィルタが2種以上指定されているとき( filter_num > 1 )は、 全ての条件のANDでの評価となります。

フィルタ後の配列は前方に詰められ、残りの部分は不定領域になります。

measure_filter_by_features.png

Fig. 処理説明(num=15の時の例)

引数:
[in] hresult ブローブ解析結果ハンドル
[in] filters 取得条件フィルタ配列
filter_num == 0 の場合は NULLを指定できます。
[in] filter_num filters の配列サイズ(単位:要素数, filter_num > 0)
[in,out] blob_numbers ブローブ番号配列
[in,out] num blob_numbers の配列サイズ(単位:要素数)
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_INVALID_OBJECT hresult パラメータに指定されたブローブ解析結果ハンドルが不正
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_measure_get_list()
example code
fnFIE_measure_get_list() の例を参照。

INT FVALGAPI fnFIE_measure_sort_list ( FHANDLE  hresult,
enum f_measure_feature_type  key1st,
INT  direc1st,
enum f_measure_feature_type  key2nd,
INT  direc2nd,
enum f_measure_feature_type  key3rd,
INT  direc3rd,
UINT *  numbers,
UINT  num 
)

ブローブの特徴量に基づくソーティング

numbers パラメータにて渡されたブローブ番号の配列を、 それぞれのブローブの指定特徴量に従ってソートします。

ソートキーには下記の値のうち、何れかを指定します。 下記にリストされていない値を指定した場合は、F_FEATURE_NONE が指定された場合と同じになります。

ソート対象の特徴量は key1st, key2nd, key3rd にて3番目まで指定することが出来ます。 まず key1st でソートし key1st で同じ値だった物は key2nd でソートされ、 さらに key2nd でも同じだった物は key3rd でソートされます。 ソートキーが3つも必要ない場合は、下記のように指定します。これに従わなかった場合はパラメータエラーとなります。

  • ソートキーが1つで良い場合は key1st にキーを設定し、key2nd, key3rd には F_FEATURE_NONE を指定。
  • ソートキーが2つで良い場合は key1st, key2nd にキーを設定し key3rd には F_FEATURE_NONE を指定。
なお、3つのソートキーが全てF_FEATURE_NONEに設定された場合はパラメータエラーとなります。

direc1st, direc2nd, direc3rd は各キーでのソート順(昇順or降順)を決めるパラメータです。 昇順にソートする場合は 0 を、 降順にソートする場合は 1 を指定してください。

注意:
numbers に渡すブローブ番号は、すべて有効ブローブのブローブ番号でなければなりません。 無効ブローブのブローブ番号が含まれていた場合には、パラメータエラーとなります。
角度特徴量
角度特徴量をソート対象とした場合、(下記にリストされるソートキー)ソートは各特徴量の値そのままに行われます。
  • F_FEATURE_AXISTHETA axistheta
  • F_FEATURE_AXISTHETA_CYCLIC F_FEATURE_AXISTHETA が指定された場合と同じ動作をします
  • F_FEATURE_FMAX_THETA fmax_theta
  • F_FEATURE_FMAX_THETA_CYCLIC F_FEATURE_FMAX_THETA が指定された場合と同じ動作をします
  • F_FEATURE_FMIN_THETA fmin_theta
  • F_FEATURE_FMIN_THETA_CYCLIC F_FEATURE_FMIN_THETA が指定された場合と同じ動作をします
つまり、これらの特徴量の値域は $ \frac{-\pi}{2} \le \theta < \frac{\pi}{2} $ ですので、 昇順にソートした場合、 $-\frac{\pi}{2}$ が最初の要素に、 $\frac{\pi}{2}$ が 最後の要素になるよう並び替えられることになります。
引数:
[in] hresult ブローブ解析結果
[in] key1st 最優先ソートキー(ソート対象特徴量)
[in] direc1st key1stのソート順
[in] key2nd 2番目に優先されるソートキー(ソート対象特徴量)
[in] direc2nd key2ndのソート順
[in] key3rd 3番目に優先されるソートキー(ソート対象特徴量)
[in] direc3rd key3rdのソート順
[in,out] numbers ソート対象ブローブ番号配列
[in] num numbersの要素数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが指定された。
F_ERR_INVALID_OBJECT hresutl に渡された結果ハンドルが不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "oal_aloc.h"
#include "fie.h"

INT main()
{
    FHANDLE himg=NULL;
    FHANDLE measure_result;
    F_MEASURE_PARAMS param;
    PNT_T orgin;
    INT exerr;
    UINT *bloblist=NULL, blobnum, i;

    F_MEASURE_FILTER_RANGE filters[2];

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

    // 適当な2値画像を用意する - 画像ファイル名は適宜変更すること
    fnFIE_load_bmp( "test.bmp", &himg, F_COLOR_IMG_TYPE_UC8 );

    // 座標原点の指定
    orgin.x = 0;
    orgin.y = 0;
    // パラメータ設定
    memset( &param, 0, sizeof(F_MEASURE_PARAMS) );
    param.color_mode = F_MEASURE_WHITEFG_BLACKBG;
    param.neighborhood = 8;

    // メジャー実行
    measure_result = fnFIE_measure_execute( himg, orgin, &param, &exerr );
    // 有効なブローブのブローブ番号リストを取得
    fnFIE_measure_get_list( measure_result, filters, 2, &bloblist, &blobnum );


    // 面積の小さい順にブローブ番号リストをソートする
    fnFIE_measure_sort_list( measure_result,
                             F_FEATURE_AREA, 0, F_FEATURE_NONE, 0, F_FEATURE_NONE, 0,
                             bloblist, blobnum );

    // 得られたブローブ番号列を表示
    printf( "SORTBY AREA: " );
    for( i=0; i<blobnum; i++ ) printf( "%d, ", bloblist[i] );
    printf( "\n" );


    // 配置順でソートし直す
    fnFIE_measure_specialsort_list( measure_result,
                                    F_MEASURE_UP_TO_LEFT_RIGHT, 0.0,
                                    bloblist, blobnum );

    // 得られたブローブ番号列を表示
    printf( "SORTBY ARRANGEMENT: " );
    for( i=0; i<blobnum; i++ ) printf( "%d, ", bloblist[i] );
    printf( "\n" );
    

    // ブローブ番号配列は使い終わったらユーザー側で解放しなければならない。
    // 解放には必ず fnOAL_free を使うこと
    fnOAL_free( bloblist );
    
    fnFIE_free_object( measure_result );

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_measure_specialsort_list ( FHANDLE  hresult,
enum f_measure_special_sort_order  order,
DOUBLE  theta,
UINT *  numbers,
UINT  num 
)

ブローブの位置情報に基づくソーティング

当社の従来ライブラリ(FVL, FVX など)と同様のアルゴリズムによって、 ブローブ列を2次元座標情報に基づいて並べ替えます。

並べ替えの方向は order パラメータと theta パラメータによって決まります。 order は並び順の方向を決める物で、下図のような意味となります。

measure_specialsort_order.png

thetaorder で指定する並び順を任意の角度に傾けるパラメータです。

measure_specialsort_order_theta.png

order==UP_TO_LEFT_RIGHT, theta==π/6 の場合の例

注意:
numbers に渡すブローブ番号は、すべて有効ブローブのブローブ番号でなければなりません。 無効ブローブのブローブ番号が含まれていた場合には、パラメータエラーとなります。
引数:
[in] hresult ブローブ解析結果ハンドル
[in] order 並び替え順
[in] theta 回転角
[in,out] numbers 並び替えるブローブ番号の配列
[in] num ブローブ番号配列( numbers )の要素数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 不正なパラメータが指定された。
F_ERR_INVALID_OBJECT hresutl に渡された結果ハンドルが不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
example code
fnFIE_measure_sort_list() の例を参照

FHANDLE FVALGAPI fnFIE_measure_get_region ( FHANDLE  hresult,
UINT  blobno,
INT *  exerr 
)

REGION取得

ブローブ解析結果から、指定のブローブの領域情報をリージョンオブジェクトとして取得します。 blobno に指定するブローブ番号は、有効ブローブの番号でなければなりません。

単色解析モードの場合
単色解析モード 時は ブローブ番号0番(背景)は番号は存在するが、解析は行われていない仮想ブローブになるため、 取得不可能です。
連結性について
取得されるリージョンオブジェクトの連結性設定( fnFIE_region_set_connection ) は ブローブの連結性設定を受け継ぎます。
例:8連結、白前景-黒背景でブローブ解析を行ったとき
  • 前景ブローブ -> リージョンは8連結
  • 背景ブローブ -> リージョンは4連結
特徴量について
ブローブ解析で既に計算済みで保存されている特徴量については、 取得されるリージョンオブジェクトにも計算結果がコピーされます。 計算済みの際にコピーされる特徴量は下記の通りです。
オフセットについて
ブローブ解析 fnFIE_measure_execute() の実行時、 offset パラメータに(0,0)以外を 設定すると、本関数で取得されるリージョンにもこのオフセット値が適用されます。 このような場合、取得したリージョンを解析画像へそのままデコードすると描画位置が 元のブローブ位置とはずれることになります。チャイルド画像を適切に配置するか、 または fnFIE_region_geotrans_shift() を使ってオフセット分を相殺する処理を行うと この問題は解決することができます。
取得したリージョンオブジェクトは不要になったら fnFIE_free_object() にて解放してください。

引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno リージョンを取得したいブローブのブローブ番号
[out] exerr エラーコード。エラーコードを受け取る必要の無い場合は、NULLを指定します。
戻り値:
正常に終了した場合は、生成したリージョンオブジェクトのハンドルを返す。 エラーが発生し、処理に失敗した場合は、NULLを返します。 正常、異常、どちらの場合も exerr パラメータにエラーコード受け取り先変数のポインタが 渡された場合は、そこにエラーコードを代入して返す。返されるエラーコードは下記の何れかです。
戻り値:
*exerr==F_ERR_NONE 正常終了
*exerr==F_ERR_NOMEMORY メモリ不足エラー
*exerr==F_ERR_INVALID_PARAM パラメータエラー, blobno に指定されたブローブ番号が不正
*exerr==F_ERR_INVALID_OBJECT パラメータエラー, hresult に指定されたハンドルが不正
*exerr==F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_parent ( const FHANDLE  hresult,
UINT  blobno,
UINT *  parent 
)

親ブローブの取得

対象ブローブの親ブローブのブローブ番号を取得します。 対象ブローブが背景BLOBの場合は、0を返します。

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure_get_blobnum() で取得される数-1))外か、 無効ブローブである場合は F_ERR_INVALID_PARAM を返します。 なお、エラー発生時は parent の値は変更されません。

単色解析モードの場合
単色解析モード 時は親子関係を構築しないため、 本関数は常に0を parent に返します。
引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno 対象ブローブのブローブ番号
[out] parent 親ブローブのブローブ番号
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM blobno に指定されたブローブ番号が不正, parent に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_child ( const FHANDLE  hresult,
UINT  blobno,
UINT *  child 
)

子ブローブの取得

対象ブローブの子ブローブのブローブ番号を取得します。 対象ブローブに子ブローブが無い場合は、自分自身のブローブ番号を返します。

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure_get_blobnum() で取得される数-1))外か、 無効ブローブである場合は F_ERR_INVALID_PARAM を返します。 なお、エラー発生時は child の値は変更されません。

単色解析モードの場合
単色解析モード 時は親子関係を構築しないため、 本関数は常に自分自身のブローブ番号を child に返します。
引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno 対象ブローブのブローブ番号
[out] child 子ブローブのブローブ番号
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM blobno に指定されたブローブ番号が不正, child に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_sibling_back ( const FHANDLE  hresult,
UINT  blobno,
UINT *  back 
)

1つ後ろの兄弟ブローブの取得

対象ブローブの1つ後ろの兄弟ブローブのブローブ番号を取得します。 兄弟ブローブが存在しない場合は、自分自身のブローブ番号となります。

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure_get_blobnum() で取得される数-1))外か、 無効ブローブである場合は F_ERR_INVALID_PARAM を返します。 なお、エラー発生時は back の値は変更されません。

単色解析モードの場合
単色解析モード 時は親子関係を構築しないため、 全てのブローブが背景ブローブ(0番ブローブ)を親とするブローブになり、同じ兄弟関係にあります。
引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno 対象ブローブのブローブ番号
[out] back 1つ後ろの兄弟ブローブのブローブ番号
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM blobno に指定されたブローブ番号が不正, back に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_sibling_next ( const FHANDLE  hresult,
UINT  blobno,
UINT *  next 
)

1つ次の兄弟ブローブの取得

対象ブローブの1つ次の兄弟ブローブのブローブ番号を取得します。 兄弟ブローブが存在しない場合は、自分自身のブローブ番号となります。

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure_get_blobnum() で取得される数-1))外か、 無効ブローブである場合は F_ERR_INVALID_PARAM を返します。 なお、エラー発生時は next の値は変更されません。

単色解析モードの場合
単色解析モード 時は親子関係を構築しないため、 全てのブローブが背景ブローブ(0番ブローブ)を親とするブローブになり、同じ兄弟関係にあります。
引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno 対象ブローブのブローブ番号
[out] next 1つ次の兄弟ブローブのブローブ番号
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM blobno に指定されたブローブ番号が不正, next に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_is_valid ( const FHANDLE  hresult,
UINT  blobno,
UINT *  invalid 
)

ブローブ番号の有効/無効チェック

対象ブローブが無効ブローブであるか、有効ブローブであるかを取得します。 無効ブローブとは、BLOBの解析中に他のBLOBと連結するなどして、 「途中まで存在していたが、最後には無くなってしまったBLOB」です。

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure_get_blobnum() で取得される数-1))外 で有る場合はエラーとなり F_ERR_INVALID_PARAM を返します。 なお、エラー発生時は invalid の値は変更されません。

引数:
[in] hresult ブローブ解析結果ハンドル
[in] blobno 対象ブローブのブローブ番号
[out] invalid 有効==0, 無効==1。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM blobno に指定されたブローブ番号が不正, invalid に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure_get_blobnum ( const FHANDLE  hresult,
UINT *  num 
)

全ブローブ数の取得

無効ブローブと有効ブローブを合わせた全てのブローブの個数を返します。 他の2値ブローブ解析関数群で、ブローブ番号を指定する際は、 0〜(本関数で取得した数-1) がブローブ番号範囲となります。

有効なブローブの数を取得したい場合は fnFIE_measure_get_real_blobnum() を使用して下さい。

引数:
[in] hresult ブローブ解析結果ハンドル
[out] num 全ブローブ数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT hresult に指定されたオブジェクトハンドルが不正
F_ERR_INVALID_PARAM num に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_measure_get_real_blobnum()

INT FVALGAPI fnFIE_measure_get_real_blobnum ( const FHANDLE  hresult,
UINT *  num 
)

有効BLOB数の取得

有効なブローブの個数を返します。 但し、有効ブローブ数に背景ブローブ(0番)の数は含みません。 無効ブローブを含めた全てのブローブ数を取得したい場合は fnFIE_measure_get_blobnum() を使用して下さい。

引数:
[in] hresult ブローブ解析結果ハンドル
[out] num 有効ブローブ数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT 不正なハンドルが渡された
F_ERR_INVALID_PARAM num に NULL pointer が渡された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_measure_get_blobnum()


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