実行結果操作
[2値ブローブ解析(拡張版)]


型定義

typedef F_MEASURE_FILTER_RANGE F_MEASURE2_FILTER_RANGE
 フィルタ条件指定(従来版へのシノニム)

関数

INT FVALGAPI fnFIE_measure2_get_list (FHANDLE hresult, F_MEASURE2_FILTER_RANGE *filters, UINT filter_num, UDLONG **blob_numbers, UDLONG *num)
 ブローブ番号配列の取得
INT FVALGAPI fnFIE_measure2_refilter_list (FHANDLE hresult, F_MEASURE2_FILTER_RANGE *filters, UINT filter_num, UDLONG *blob_numbers, UDLONG *num)
 ブローブ番号配列の特徴量に基づくフィルタリング
INT FVALGAPI fnFIE_measure2_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, UDLONG *numbers, UDLONG num)
 ブローブの特徴量に基づくソーティング
FHANDLE FVALGAPI fnFIE_measure2_get_region (FHANDLE hresult, UDLONG blobno, INT *exerr)
 REGION取得
INT FVALGAPI fnFIE_measure2_get_parent (const FHANDLE hresult, UDLONG blobno, UDLONG *parent)
 親ブローブの取得
INT FVALGAPI fnFIE_measure2_get_child (const FHANDLE hresult, UDLONG blobno, UDLONG *child)
 子ブローブの取得
INT FVALGAPI fnFIE_measure2_get_sibling_back (const FHANDLE hresult, UDLONG blobno, UDLONG *back)
 1つ後ろの兄弟ブローブの取得
INT FVALGAPI fnFIE_measure2_get_sibling_next (const FHANDLE hresult, UDLONG blobno, UDLONG *next)
 1つ次の兄弟ブローブの取得
INT FVALGAPI fnFIE_measure2_get_blobnum (const FHANDLE hresult, UDLONG *num)
 全ブローブ数の取得
INT FVALGAPI fnFIE_measure2_get_real_blobnum (const FHANDLE hresult, UDLONG *num)
 有効なブローブ数の取得

型定義

フィルタ条件指定(従来版へのシノニム)

詳細は F_MEASURE_FILTER_RANGE を参照ください。

参照:
fnFIE_measure2_get_list(), fnFIE_measure2_refilter_list()


関数

INT FVALGAPI fnFIE_measure2_get_list ( FHANDLE  hresult,
F_MEASURE2_FILTER_RANGE filters,
UINT  filter_num,
UDLONG **  blob_numbers,
UDLONG *  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_measure2_refilter_list()
example code
// エラー処理は省略しているので注意して下さい。
#include <stdio.h>
#include "oal_aloc.h"
#include "fie.h"

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

    F_MEASURE2_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_MEASURE2_PARAMS) );
    param.color_mode = F_MEASURE2_WHITEFG_BLACKBG;
    param.neighborhood = 8;

    // メジャー実行
    measure_result = fnFIE_measure2_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_measure2_get_list( measure_result, filters, 2, &bloblist, &blobnum );

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


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

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

    // 終了処理
    fnFIE_teardown();

    return 0;
}

INT FVALGAPI fnFIE_measure2_refilter_list ( FHANDLE  hresult,
F_MEASURE2_FILTER_RANGE filters,
UINT  filter_num,
UDLONG *  blob_numbers,
UDLONG *  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 の配列サイズ(単位:要素数)。
入力時には blob_numbers に格納されたブローブ番号の数を指定します。 UI32_MAX 以下でなければなりません。 出力時にはフィルタ後のブローブ番号の数が返されます。
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_INVALID_OBJECT hresult パラメータに指定されたブローブ解析結果(拡張版)ハンドルが不正
F_ERR_INVALID_PARAM パラメータ不正
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_measure2_get_list()
example code
fnFIE_measure2_get_list() の例を参照。

INT FVALGAPI fnFIE_measure2_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,
UDLONG *  numbers,
UDLONG  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_MEASURE2_PARAMS param;
    PNT_T orgin;
    INT exerr;
    UDLONG *bloblist=NULL, blobnum, i;

    // 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_MEASURE2_PARAMS) );
    param.color_mode = F_MEASURE2_WHITEFG_BLACKBG;
    param.neighborhood = 8;

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


    // 面積の小さい順にブローブ番号リストをソートする
    fnFIE_measure2_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( "%llu, ", bloblist[i] );
    printf( "\n" );
    

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

    // 終了処理
    fnFIE_teardown();

    return 0;
}

FHANDLE FVALGAPI fnFIE_measure2_get_region ( FHANDLE  hresult,
UDLONG  blobno,
INT *  exerr 
)

REGION取得

ブローブ解析結果から、指定のブローブの領域情報をリージョンオブジェクトとして取得します。 blobno に指定するブローブ番号は、ブローブ番号範囲(0〜( fnFIE_measure2_get_blobnum() で取得される数-1))内でなければなりません。

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

注意:
  • 指定のブローブを構成するランの数が UI32_MAX 以下であることを想定した計算アルゴリズムとなっています。それ以外の場合はエラーとなります。
引数:
[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_MEASURE_RUN_OVERFLOW ブローブを構成するランの数が UI32_MAX 超
*exerr==F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_measure2_get_parent ( const FHANDLE  hresult,
UDLONG  blobno,
UDLONG *  parent 
)

親ブローブの取得

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

対象ブローブ番号がブローブ番号範囲(0〜( fnFIE_measure2_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_measure2_get_child ( const FHANDLE  hresult,
UDLONG  blobno,
UDLONG *  child 
)

子ブローブの取得

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

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure2_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_measure2_get_sibling_back ( const FHANDLE  hresult,
UDLONG  blobno,
UDLONG *  back 
)

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

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

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure2_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_measure2_get_sibling_next ( const FHANDLE  hresult,
UDLONG  blobno,
UDLONG *  next 
)

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

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

対象ブローブ番号が有効なブローブ番号範囲(0〜( fnFIE_measure2_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_measure2_get_blobnum ( const FHANDLE  hresult,
UDLONG *  num 
)

全ブローブ数の取得

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

有効なブローブの数を取得したい場合は fnFIE_measure2_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_measure2_get_real_blobnum()

INT FVALGAPI fnFIE_measure2_get_real_blobnum ( const FHANDLE  hresult,
UDLONG *  num 
)

有効なブローブ数の取得

有効なブローブの個数を返します。 有効なブローブは背景ブローブ(0番)でないブローブを指し、その個数は全てのブローブ数から1を引いた数です。 全てのブローブ数を取得したい場合は fnFIE_measure2_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_measure2_get_blobnum()


Documentation copyright © 2009-2026 TOKYO ELECTRON DEVICE LIMITED.
Generated on Tue Mar 24 10:10:59 2026 for FIEライブラリ by doxygen 1.5.6-FASTSP-p2