データマトリックス認識
[2Dコード認識]


説明

データマトリックス(DataMatrix)とは

データマトリックスは、マトリックス型二次元データコードの一種で、1987年にID Matrix 社によって開発されました。 QRコードと同様、二次元データコードである データマトリックスは縦横に情報を持っているため、格納できる情報量が多く、サイズも小型化できる特長があり、誤り訂正などの機能にも対応しています。 現在は ISO国際標準規格(ISO/IEC16022)になっています。米国半導体工業会(SEMI)、米国電子工業会(EIA)、米国規格協会(ANSI)等で多く採用されており、半導体、液晶、IC部品等に使用されるケースが多いです。

dm_top.png

fig. データマトリックス(FAST http://www.fast-corp.co.jp/)

データマトリックスの構成

マトリックス型シンボルの二次元データコードである データマトリックスは、セルと呼ばれる1つの要素が正方形状に並んで構成されます。各セルは 1bitの情報を持ち黒と白(暗と明)で表されます。 1つの データマトリックスを構成するセルは偶数×偶数として決められ、正方形シンボルの場合には 10×10〜144×144、長方形シンボルの場合には 8〜16×18〜48 の間に定められています。 セルの配置については、シンボルの持つ情報を格納するデータ領域の他に、格納されている情報に依存しない特定のパタンが配置される領域があり、主にシンボルの検出を安定して行うために利用されます。 以下、黒いセルをデータマトリックスのシンボルを構成する対象として説明を行います。

dm_const.png

fig. データマトリックスの構成(12×12セル(左)と52×52セル(右))

ファインダーパタン
シンボルの位置を特定するために使われるパタンで、シンボルの外周2辺を用いてアルファベット『 L 』の字の様にセルが配置されています。
タイミングパタン
シンボルの外周部、ファインダーパタンの対面の2辺に配置され、1セルごとに明暗が反転する特徴があります。シンボルの位置を特定する他、シンボルのセルのサイズやセル幅を特定することにも用いることができます。
クワイエットゾーン
データマトリックスの読み取りに必要な周囲の余白スペースで、シンボルを構成する色(白or黒)とは反対の色になります。このクワイエットゾーンにより読み取りを安定したシンボル検出が可能になります。なお、一般的には1セル分のクワイエットゾーンが必要とされています。
データ領域
データマトリックスのシンボルの中で、以上に挙げた領域以外がシンボル自体の持つ情報(形式、型番情報、メッセージ等)が格納されるデータ領域となります。 ただし、シンボルサイズが 26×26よりも大きい場合には、サイズの小さいデータマトリックスのブロックに分割します。よって、外周部だけでなく、ここでデータ領域として定義している領域にもファインダーパタン、タイミングパタンと同じ配置のパタンが現れます。
データはある規則に基づいてセル情報として符号化されており、入力データと誤り訂正機能を実現するリードソロモン符号が配置されていますので、シンボル自体が汚れ、欠け、隠蔽等により完全でなくても読み取りを行うことが可能です。 なお、データマトリックスの誤り訂正は、誤り訂正コードワードがシンボルの28.5%から62.5%の範囲でサイズ毎に決められております。 データマトリックスが持つことができるデータの最大値については、次の表1に示します。
表1.データマトリックスのサイズによる収納文字数の違い(ECC200)
数字 英数字 バイナリ
最小情報量(シンボルサイズ10×10) 6 3 1
最大情報量(シンボルサイズ144×144) 3116 2335 1556
注意:
  • 本ライブラリでデコード可能な データマトリックスはECC200のみです。他の仕様(ECC-000,50,80,100,140)の データマトリックスには対応していません。
  • データマトリックスシンボルの鏡映反転読取には対応していません。
  • セル幅の縦横比が異なるデータマトリックスには対応していません。
  • 歪、射影変換等の変形には対応していません。
  • ドットマークのシンボルには対応していません。
  • ファインダパタン、タイミングパタンの隠蔽には対応していません。

サンプルコード

// エラー処理は省略しているので注意して下さい。
#include "fie.h"
#include <stdio.h>

INT main()
{
    INT i;
    FHANDLE hdm = NULL;
    FHANDLE himg = NULL;
    const INT* undecoded_index = NULL;
    INT  num_undecoded;
    const INT* decoded_index = NULL;
    INT  num_decoded;
    const CHAR* message = NULL;
    FMATRIX* corner=NULL;
    INT size_cells_min, size_cells_max;
    DOUBLE width_cell_min, width_cell_max;

    // FIEライブラリの初期化処理
    fnFIE_setup();
    
    // 適当な8ビットグレイ画像を用意する - 画像ファイルは適宜用意すること
    fnFIE_load_bmp( "sample.bmp", &himg, F_COLOR_IMG_TYPE_UC8 );
    
    // データマトリックスオブジェクト生成
    fnFIE_dm_alloc_obj( &hdm );
    
    // データマトリックス 検出対象シンボルサイズを適宜設定
    size_cells_min = 32; size_cells_max = 32;
    fnFIE_dm_set_size_minmax( hdm, size_cells_min, size_cells_max );
    
    // データマトリックス 検出対象シンボルセルサイズを適宜設定
    width_cell_min = 5;  width_cell_max = 10;
    fnFIE_dm_set_cellwidth_minmax( hdm, width_cell_min, width_cell_max );

    // デコード実行
    fnFIE_dm_execute( hdm, himg );

    // デコード数とインデックス番号の参照
    fnFIE_dm_query_decoded( hdm, &decoded_index, &num_decoded );
    
    // デコード結果へのアクセス
    for( i=0; i<num_decoded; i++ ) {
        // デコードメッセージ取得
        message = NULL;
        fnFIE_dm_query_message( hdm, decoded_index[i], &message, NULL );
        
        // メッセージ表示
        printf(message);

        // 必要に応じて、データマトリックスの情報を取得して下さい。
        corner = NULL;
        fnFIE_dm_query_corner( hdm, decoded_index[i], &corner );
        //...
    }

    // デコードに失敗した結果(検出はできた)へのアクセス
    fnFIE_dm_query_undecoded( hdm, &undecoded_index, &num_undecoded );
    
    for( i=0; i<num_undecoded; i++ ){
        //メッセージは存在しません。

        // 必要に応じて、情報を取得してください
        corner = NULL;
        fnFIE_dm_query_corner( hdm, undecoded_index[i], &corner );
    }
    
    // オブジェクト解放
    fnFIE_free_object( hdm );
    fnFIE_free_object( himg );

    // FIEライブラリの終了処理
    fnFIE_teardown();

    return 0;
}

参考文献:


列挙型

enum  f_dm_color_type { F_DM_DARK_ON_LIGHT = 0, F_DM_LIGHT_ON_DARK = 1 }
 データマトリックス検出色 [詳細]
enum  f_dm_symbol_type {
  F_DM_SYMBOL_SQUARE = 1, F_DM_SYMBOL_RECTANGLE = 2,
  F_DM_SYMBOL_ALL = 3
}
 データマトリックス検出シンボル形状 [詳細]

関数

INT FVALGAPI fnFIE_dm_alloc_obj (FHANDLE *hdm)
  [[OSS]] データマトリックスオブジェクトの生成
INT FVALGAPI fnFIE_dm_execute (FHANDLE hdm, FHANDLE himg)
  [[OSS]] データマトリックス デコード実行関数
INT FVALGAPI fnFIE_dm_query_decoded (FHANDLE hdm, const INT **decoded_index, INT *num_decoded)
  [[OSS]] データマトリックス 検出数とインデックス配列の取得
INT FVALGAPI fnFIE_dm_query_undecoded (FHANDLE hdm, const INT **undecoded_index, INT *num_undecoded)
  [[OSS]] データマトリックス 検出したが、読み取ることができなかったデータマトリックス数とインデックス配列の取得
INT FVALGAPI fnFIE_dm_query_message (FHANDLE hdm, INT id, const CHAR **message, INT *message_length)
  [[OSS]] データマトリックス指定したインデックス番号にあるデータマトリックスのメッセージを取得
INT FVALGAPI fnFIE_dm_query_center (FHANDLE hdm, INT id, DOUBLE *center_x, DOUBLE *center_y)
  [[OSS]] データマトリックス読み取りに成功したデータマトリックスの中心位置を取得
INT FVALGAPI fnFIE_dm_query_size (FHANDLE hdm, INT id, INT *size_cells_x, INT *size_cells_y)
  [[OSS]] データマトリックス シンボルサイズの取得
INT FVALGAPI fnFIE_dm_query_cellwidth (FHANDLE hdm, INT id, DOUBLE *cell_width, DOUBLE *cell_height)
  [[OSS]] データマトリックス セル幅の取得
INT FVALGAPI fnFIE_dm_query_cellones (FHANDLE hdm, INT id, FMATRIX **cell_ones)
  [[OSS]] データマトリックス 読み取りに成功したデータマトリックスのセル位置情報の参照
INT FVALGAPI fnFIE_dm_query_corner (FHANDLE hdm, INT id, FMATRIX **corner)
  [[OSS]] データマトリックス シンボルのコーナー位置情報の取得
INT FVALGAPI fnFIE_dm_add_offsets (FHANDLE hdm, INT offset_x, INT offset_y)
  [[OSS]] データマトリックス 検出位置に加味するオフセット量の設定
INT FVALGAPI fnFIE_dm_set_slant_allowance (FHANDLE hdm, INT slant_allowance)
  [[OSS]] データマトリックス 直交ずれ許容値の設定
INT FVALGAPI fnFIE_dm_get_slant_allowance (FHANDLE hdm, INT *slant_allowance)
  [[OSS]] データマトリックス 直交ずれ許容値の取得
INT FVALGAPI fnFIE_dm_set_size_minmax (FHANDLE hdm, INT size_cells_min, INT size_cells_max)
  [[OSS]] データマトリックス 検出するシンボルのシンボルサイズの設定
INT FVALGAPI fnFIE_dm_get_size_minmax (FHANDLE hdm, INT *size_cells_min, INT *size_cells_max)
  [[OSS]] データマトリックス 検出するシンボルサイズの取得
INT FVALGAPI fnFIE_dm_set_cellwidth_minmax (FHANDLE hdm, DOUBLE width_cell_min, DOUBLE width_cell_max)
  [[OSS]] データマトリックス 検出するセル幅の設定
INT FVALGAPI fnFIE_dm_get_cellwidth_minmax (FHANDLE hdm, DOUBLE *width_cell_min, DOUBLE *width_cell_max)
  [[OSS]] データマトリックス 検出するセル幅の取得
INT FVALGAPI fnFIE_dm_set_minvar (FHANDLE hdm, INT min_var)
  [[OSS]] データマトリックス シンボル検出のための濃度分散下限しきい値の設定
INT FVALGAPI fnFIE_dm_get_minvar (FHANDLE hdm, INT *min_var)
  [[OSS]] データマトリックス シンボル検出のための濃度分散下限分散しきい値の取得
INT FVALGAPI fnFIE_dm_set_color (FHANDLE hdm, enum f_dm_color_type color)
  [[OSS]] データマトリックス 検出セル色の設定
INT FVALGAPI fnFIE_dm_get_color (FHANDLE hdm, enum f_dm_color_type *color)
  [[OSS]] データマトリックス 検出セル色の取得
INT FVALGAPI fnFIE_dm_set_symbol_type (FHANDLE hdm, enum f_dm_symbol_type symbol_type)
  [[OSS]] データマトリックス 検出シンボルタイプの設定
INT FVALGAPI fnFIE_dm_get_symbol_type (FHANDLE hdm, enum f_dm_symbol_type *symbol_type)
  [[OSS]] データマトリックス 検出シンボルタイプの取得
INT FVALGAPI fnFIE_dm_set_timeout (FHANDLE hdm, DOUBLE timeout)
  [[OSS]] タイムアウトの設定
INT FVALGAPI fnFIE_dm_get_timeout (FHANDLE hdm, DOUBLE *timeout)
  [[OSS]] タイムアウトの取得

列挙型

データマトリックス検出色

データマトリックス検出における検出色です。

列挙型の値:
F_DM_DARK_ON_LIGHT  黒シンボル(背景白)
F_DM_LIGHT_ON_DARK  白シンボル(背景黒)

データマトリックス検出シンボル形状

データマトリックス検出の対象となるシンボル形状(正方形、長方形)です。

列挙型の値:
F_DM_SYMBOL_SQUARE  正方形:縦横のセルサイズ(単位:数)が同じシンボル
F_DM_SYMBOL_RECTANGLE  長方形:縦横のセルサイズ(単位:数)が異なるシンボル
F_DM_SYMBOL_ALL  両方:正方形または長方形シンボル


関数

INT FVALGAPI fnFIE_dm_alloc_obj ( FHANDLE *  hdm  ) 

[[OSS]] データマトリックスオブジェクトの生成

引数:
[out] hdm データマトリックスオブジェクトハンドルへのポインタ。関数エントリー時には *hdm を NULL で初期化してください。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NOMEMORY メモリ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • データマトリックスオブジェクトが不要になったら、必ず fnFIE_free_object() で解放してください。

INT FVALGAPI fnFIE_dm_execute ( FHANDLE  hdm,
FHANDLE  himg 
)

[[OSS]] データマトリックス デコード実行関数

本関数は データマトリックス読み取りの実行関数です。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] himg 入力画像(type:UC8/ch:1)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_IMAGE 画像オブジェクトの異常
F_ERR_NOMEMORY メモリ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_query_decoded ( FHANDLE  hdm,
const INT **  decoded_index,
INT *  num_decoded 
)

[[OSS]] データマトリックス 検出数とインデックス配列の取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] decoded_index 正常に読み取ることができたデータマトリックスインデックス番号の配列への参照ポインタ。関数エントリー時には *decoded_index を NULL で初期化してください。
[out] num_decoded 正常に読み取ることができたデータマトリックス数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • decoded_index で得られたポインタを解放、または内容の変更をしないでください。また、このポインタの内容は fnFIE_dm_execute()fnFIE_free_object() が呼ばれたときには無効になります。
  • 本関数は、 fnFIE_dm_execute() を行った後にコールしてください。 fnFIE_dm_execute() を実行前、または1つのシンボルも検出しない状態で本関数をコールした場合は、戻り値は F_ERR_NONE が返り、num_decoded が 0 となります。
参照:
fnFIE_dm_execute(), fnFIE_dm_query_message(), fnFIE_dm_query_center(), fnFIE_dm_query_size(), fnFIE_dm_query_corner(), fnFIE_dm_query_cellones(), fnFIE_dm_query_cellwidth()

INT FVALGAPI fnFIE_dm_query_undecoded ( FHANDLE  hdm,
const INT **  undecoded_index,
INT *  num_undecoded 
)

[[OSS]] データマトリックス 検出したが、読み取ることができなかったデータマトリックス数とインデックス配列の取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] undecoded_index 正常に読み取ることができなかったデータマトリックスインデックス配列の参照。関数エントリー時には *undecoded_index を NULL で初期化してください。
[out] num_ndecoded 正常に読み取ることができなかったデータマトリックス数
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • undecoded_index で得られたポインタを解放、または内容の変更をしないでください。また、このポインタの内容は fnFIE_dm_execute()fnFIE_free_object() が呼ばれたときには無効になります。
  • 本関数は、 fnFIE_dm_execute() を行った後にコールしてください。 fnFIE_dm_execute() を実行前、または1つのシンボルも検出しない状態で本関数をコールした場合は、戻り値は F_ERR_NONE が返り、num_decoded が 0 となります。
参照:
fnFIE_dm_execute(), fnFIE_dm_query_center(), fnFIE_dm_query_size(), fnFIE_dm_query_corner(), fnFIE_dm_query_cellones(), fnFIE_dm_query_cellwidth()

INT FVALGAPI fnFIE_dm_query_message ( FHANDLE  hdm,
INT  id,
const CHAR **  message,
INT *  message_length 
)

[[OSS]] データマトリックス指定したインデックス番号にあるデータマトリックスのメッセージを取得

デコードに成功したデータマトリックスのメッセージを参照します。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] id fnFIE_dm_query_decoded() によって得られたインデックス配列の参照値。
[out] message 読み取ったデータマトリックスメッセージ。関数エントリー時には *message を NULL で初期化してください。
[out] message_length 読み取ったデータマトリックスメッセージの文字列長。メッセージ自体に (終端文字)を含む可能性がある場合には文字列長を取得して message を使用してください。特に必要がないことがわかっている場合には message_length は NULL を指定可能です。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NODATA メッセージがありません(パラメータ id に、検出したがデコードに失敗したインデックス番号を指定しました)
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 本関数は、 fnFIE_dm_execute() にて読み取りを行った後に、 fnFIE_dm_query_decoded() によって得られたインデックス配列の値を参照して使用します。
  • id に指定できる範囲は「位置検出に成功したデータマトリックス数」ですが、指定した id が読取に成功していなかった場合には戻り値に F_ERR_NODATA が返ります。
  • message で得られたポインタを解放、または内容の変更をしないでください。また、このポインタの内容は fnFIE_free_object() か、再度 fnFIE_dm_execute() が呼ばれた場合は無効になります。
  • fnFIE_dm_execute() を実行前、または1つのシンボルも検出しない状態で本関数をコールした場合、戻り値に F_ERR_INVALID_PARAM が返ります。
参照:
fnFIE_dm_execute(), fnFIE_dm_query_decoded()

INT FVALGAPI fnFIE_dm_query_center ( FHANDLE  hdm,
INT  id,
DOUBLE *  center_x,
DOUBLE *  center_y 
)

[[OSS]] データマトリックス読み取りに成功したデータマトリックスの中心位置を取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] id fnFIE_dm_query_decoded() , fnFIE_dm_query_undecoded() によって得られたインデックス配列の参照値。
[out] center_x データマトリックスの中心 X 座標
[out] center_y データマトリックスの中心 Y 座標
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
参照:
fnFIE_dm_execute(), fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded(), fnFIE_dm_add_offsets()
dm_center.png

fig. fnFIE_dm_query_center() によって得られた中心座標に対して×マークを描画した例

INT FVALGAPI fnFIE_dm_query_size ( FHANDLE  hdm,
INT  id,
INT *  size_cells_x,
INT *  size_cells_y 
)

[[OSS]] データマトリックス シンボルサイズの取得

8〜144 までのデータマトリックスのシンボルサイズを取得します。 得られるセルの数は、データマトリックスシンボルのファインダーパタンがL字を描くように配置された状態での値です。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] id fnFIE_dm_query_decoded() , fnFIE_dm_query_undecoded() によって得られたインデックス配列の参照値。
[out] size_cells_x 横方向セル数(必要の無い場合にはNULLを指定)
[out] size_cells_y 縦方向セル数(必要の無い場合にはNULLを指定)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 縦横のシンボルサイズが異なるデータマトリックスを検出するためには fnFIE_dm_set_symbol_type() で長方形を検出対象としてください。
  • size_cells_xsize_cells_y の両方を同時に NULL指定した場合には F_ERR_INVALID_PARAM を返します。
参照:
fnFIE_dm_execute(), fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded(), fnFIE_dm_set_symbol_type()

INT FVALGAPI fnFIE_dm_query_cellwidth ( FHANDLE  hdm,
INT  id,
DOUBLE *  cell_width,
DOUBLE *  cell_height 
)

[[OSS]] データマトリックス セル幅の取得

データマトリックスシンボルの1セルの幅(画素)を取得します。 得られるセル幅は、データマトリックスシンボルのファインダーパタンがL字を描くように配置された状態での値です。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] id fnFIE_dm_query_decoded() , fnFIE_dm_query_undecoded() によって得られたインデックス配列の参照値。
[out] cell_width Xセル幅(画素)
[out] cell_height Yセル幅(画素)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 縦横のセル幅が異なるデータマトリックスには対応していません。(ただし、cell_widthcell_height の出力値が一致するとは限りません)
参照:
fnFIE_dm_execute(), fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded()

INT FVALGAPI fnFIE_dm_query_cellones ( FHANDLE  hdm,
INT  id,
FMATRIX **  cell_ones 
)

[[OSS]] データマトリックス 読み取りに成功したデータマトリックスのセル位置情報の参照

セルが存在する位置情報(x,y)を取得します。
得られる位置情報はデータマトリックスを構成するセルのみです。つまりクワイエットゾーンと異なる色を持つ箇所のみ位置が得られます。 位置座標は、列ベクトル(3×n の行列で、n は列の数)として値を参照し、各列には、$ \left[ \begin{array}{ccc} \bf{x_i} & \bf{y_i} & \bf{1} \end{array} \right]^t $ のように座標が格納されます。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] id fnFIE_dm_query_decoded() , fnFIE_dm_query_undecoded() によって得られたインデックス配列の参照値。
[out] cell_ones セルが存在する位置情報(x,y)の列ベクトルの参照。関数エントリー時には *cell_ones を NULL で初期化してください。 なお、位置情報の格納順は、ファインダパタンL字の左上部から、タイミングパタンの方向(Lを基準にX方向)にラスタ走査を行うように格納されます。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 本関数は、 fnFIE_dm_execute() にて読み取りを行った後に、 fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded() によって得られたインデックス配列の値を参照して使用します。
  • cell_ones で得られたポインタを解放、または内容の変更をしないでください。また、このポインタの内容は fnFIE_free_object() か、再度 fnFIE_dm_execute() が呼ばれた場合は無効になります。
  • fnFIE_dm_execute() を実行前、または1つのシンボルも検出しない状態で本関数をコールした場合、戻り値に F_ERR_INVALID_PARAM が返ります。
参照:
fnFIE_dm_execute(), fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded(), fnFIE_dm_add_offsets()
記述例
    // ※サンプルコードは結果の描画部のみの記述です。

    ...
    decoded_index = NULL;
    fnFIE_dm_query_decoded( hdm, &decoded_index, &num_decoded ) );
    
    for( i=0; i<num_decoded; i++ ){
        //クワイエットゾーンと違う色を持つセル部描画情報の取得
        cell_ones = NULL;
        fnFIE_dm_query_cellones( hdm, decoded_index[i], &cell_ones );
        
        fnFIE_dm_query_cellwidth( hdm, decoded_index[i], &cell_width, &cell_height );
        
        rc = (cell_width + cell_height)/4; //描画半径(任意)
        
        for( c=0; c<cell_ones->col; c++ ){
            xc = cell_ones->m[0][c];    //各セルのX座標
            yc = cell_ones->m[1][c];    //各セルのY座標
            
            draw_circle( xc, yc, rc );  //描画関数(各自用意)
        }
    }
    ...

dm_cellones.png

fig. fnFIE_dm_query_cellones() によって得られた点情報を中心にセルサイズを加味して円を描画した例

INT FVALGAPI fnFIE_dm_query_corner ( FHANDLE  hdm,
INT  id,
FMATRIX **  corner 
)

[[OSS]] データマトリックス シンボルのコーナー位置情報の取得

シンボルのコーナー位置情報4点 $ \left( \bf{x_i} , \bf{y_i} \right) $ を取得します。
位置座標は、列ベクトル(3×4 の行列で、4 は列の数)として値を参照し、各列には、$ \left[ \begin{array}{ccc} \bf{x_i} & \bf{y_i} & \bf{1} \end{array} \right]^t $ のように座標が格納されます。

引数:
[in] hdm データマトリックスオブジェクト
[in] id fnFIE_dm_query_decoded() , fnFIE_dm_query_undecoded() によって得られたインデックス配列の参照値。
[out] corner コーナー位置情報(x,y)の列ベクトルの参照。関数エントリー時には *corner を NULL で初期化してください。
なお、位置情報の格納順は、ファインダパタンL字の左上部から、そのままLを描く方向に一周するように格納されます。
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 本関数は、 fnFIE_dm_execute() にて読み取りを行った後に、 fnFIE_dm_query_decoded(), fnFIE_dm_query_undecoded() によって得られたインデックス配列の値を参照して使用します。
  • corner にて得られたポインタを解放、または内容の変更をしないでください。また、このポインタの内容は fnFIE_free_object() か、再度 fnFIE_dm_execute() が呼ばれた場合は無効になります。
  • fnFIE_dm_execute() を実行前、または1つのシンボルも検出しない状態で本関数をコールした場合、戻り値に F_ERR_INVALID_PARAM が返ります。
記述例
    // ※サンプルコードは結果の描画部のみの記述です。

    ...
    decoded_index = NULL;
    fnFIE_dm_query_decoded( hdm, &decoded_index, &num_decoded ) );
    
    for( i=0; i<num_decoded; i++ ){
        //データマトリックスシンボル外周描画
        corner = NULL;
        fnFIE_dm_query_corner( hdm, decoded_index[i], &corner );
        
        for( c=0; c<corner->col; c++ ){
            xs = corner->m[0][(c  )%corner->col];   // 境界線始点X座標
            ys = corner->m[1][(c  )%corner->col];   // 境界線始点Y座標
            xe = corner->m[0][(c+1)%corner->col];   // 境界線終点X座標
            ye = corner->m[1][(c+1)%corner->col];   // 境界線終点Y座標
            
            draw_line( xs, ys, xe, ye );    //描画関数(各自用意)
        }
    }
    ...

dm_corner.png

fig. fnFIE_dm_query_corner() の描画例(赤○マークは先頭位置)

INT FVALGAPI fnFIE_dm_add_offsets ( FHANDLE  hdm,
INT  offset_x,
INT  offset_y 
)

[[OSS]] データマトリックス 検出位置に加味するオフセット量の設定

検出したすべてのデータマトリックスの検出位置(x,y)に、本関数で設定したオフセット量を足します。 例えば、チャイルド画像を使用してデータマトリックスの読み取りを行った場合に、本関数でチャイルド画像の切り出し始点位置をオフセット値として入力すると、ルート画像上での位置情報として回答を得ることができます。

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] offset_x 検出位置に足されるオフセット量X
[in] offset_y 検出位置に足されるオフセット量Y
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • 本関数は fnFIE_dm_execute() の結果に常に反映される値を設定する関数ではなく、1回の fnFIE_dm_execute() によって格納された位置情報に対して値を加算するものです。 そのため、いつも同じオフセット量を加算する必要がある場合には fnFIE_dm_execute() によって検出を行った後に本関数を連続してコールする必要があります。
  • offset_x, offset_y には負の値も入力可能です。
参照:
fnFIE_dm_query_center(), fnFIE_dm_query_corner(), fnFIE_dm_query_cellones()

INT FVALGAPI fnFIE_dm_set_slant_allowance ( FHANDLE  hdm,
INT  slant_allowance 
)

[[OSS]] データマトリックス 直交ずれ許容値の設定

データマトリックスのファインダーパタンは基本的に直交しています。 この値を変更することで、直交しないファインダーパタンにも対応することが可能です。 ただし、向かい合う辺同士の平行関係は保たれていなければなりません。

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] slant_allowance 直交からの角度許容値(1≦slant_allowance≦45, 初期値10,単位:度)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_get_slant_allowance()

INT FVALGAPI fnFIE_dm_get_slant_allowance ( FHANDLE  hdm,
INT *  slant_allowance 
)

[[OSS]] データマトリックス 直交ずれ許容値の取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] slant_allowance 直交からの角度許容値(1〜45度, 単位:度)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_set_slant_allowance()

INT FVALGAPI fnFIE_dm_set_size_minmax ( FHANDLE  hdm,
INT  size_cells_min,
INT  size_cells_max 
)

[[OSS]] データマトリックス 検出するシンボルのシンボルサイズの設定

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] size_cells_min 検出最小シンボルサイズ(8 ≦ size_cells_min, size_cells_minsize_cells_max, 初期値:8, 単位:個)
[in] size_cells_max 検出最大シンボルサイズ(size_cells_max ≦ 144, size_cells_minsize_cells_max, 初期値:64, 単位:個)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
注意:
  • シンボルとして使用されるシンボルサイズは仕様により決まっています。ここにに記載された値以外は F_ERR_INVALID_PARAM が返ります。(有効サイズ:8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 32, 36, 40, 44, 48, 52, 64, 72, 80, 88, 96, 104, 120, 132, 144)
参照:
fnFIE_dm_get_size_minmax()

INT FVALGAPI fnFIE_dm_get_size_minmax ( FHANDLE  hdm,
INT *  size_cells_min,
INT *  size_cells_max 
)

[[OSS]] データマトリックス 検出するシンボルサイズの取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] size_cells_min 検出最小シンボルサイズ
[out] size_cells_max 検出最大シンボルサイズ
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_set_size_minmax()

INT FVALGAPI fnFIE_dm_set_cellwidth_minmax ( FHANDLE  hdm,
DOUBLE  width_cell_min,
DOUBLE  width_cell_max 
)

[[OSS]] データマトリックス 検出するセル幅の設定

検出するデータマトリックスシンボルの1セルの大きさを指定します

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] width_cell_min 検出最小セル幅(3 ≦ width_cell_min, width_cell_minwidth_cell_max, 初期値:4, 単位:画素)
[in] width_cell_max 検出最大セル幅(width_cell_max ≦ 48, width_cell_minwidth_cell_max, 初期値15, 単位:画素)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_get_cellwidth_minmax()

INT FVALGAPI fnFIE_dm_get_cellwidth_minmax ( FHANDLE  hdm,
DOUBLE *  width_cell_min,
DOUBLE *  width_cell_max 
)

[[OSS]] データマトリックス 検出するセル幅の取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] width_cell_min 検出最小セル幅(単位:画素)
[out] width_cell_max 検出最大セル幅(単位:画素)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_set_cellwidth_minmax()

INT FVALGAPI fnFIE_dm_set_minvar ( FHANDLE  hdm,
INT  min_var 
)

[[OSS]] データマトリックス シンボル検出のための濃度分散下限しきい値の設定

データマトリックスのシンボル検出に使用する、濃度分散の最小値を指定します。 ここで指定した分散下限しきい値以上の画素の情報をシンボル検出に使用します。

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] min_var 分散しきい値 (初期値:1000, 0≦min_var)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_get_minvar()

INT FVALGAPI fnFIE_dm_get_minvar ( FHANDLE  hdm,
INT *  min_var 
)

[[OSS]] データマトリックス シンボル検出のための濃度分散下限分散しきい値の取得

現在設定されている濃度分散下限しきい値を取得します。

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] min_var 分散しきい値
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
参照:
fnFIE_dm_set_minvar()

INT FVALGAPI fnFIE_dm_set_color ( FHANDLE  hdm,
enum f_dm_color_type  color 
)

[[OSS]] データマトリックス 検出セル色の設定

データマトリックスシンボルの色を指定します。 シンボル黒(F_DM_DARK_ON_LIGHT)と、シンボル白(F_DM_LIGHT_ON_DARK)で指定します。

dm_color.png

fig. データマトリックス色指定(左:シンボル黒,右シンボル白)

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] color シンボルの色(初期値:F_DM_DARK_ON_LIGHT)
  • F_DM_DARK_ON_LIGHT シンボル色:黒(背景色は白)
  • F_DM_LIGHT_ON_DARK シンボル色:白(背景色は黒)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_get_color ( FHANDLE  hdm,
enum f_dm_color_type color 
)

[[OSS]] データマトリックス 検出セル色の取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] color シンボルの色
  • F_DM_DARK_ON_LIGHT シンボル色:黒(背景色は白)
  • F_DM_LIGHT_ON_DARK シンボル色:白(背景色は黒)
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_set_symbol_type ( FHANDLE  hdm,
enum f_dm_symbol_type  symbol_type 
)

[[OSS]] データマトリックス 検出シンボルタイプの設定

データマトリックスのシンボルタイプを指定します。 縦横のシンボルサイズ(単位:数)が同じ場合は正方形(F_DM_SYMBOL_SQUARE)、異なる場合は長方形(F_DM_SYMBOL_RECTANGLE)とします。 どちらも許す場合は両方(F_DM_SYMBOL_ALL)とします。

引数:
[in,out] hdm データマトリックスオブジェクトハンドル
[in] symbol_type シンボルタイプ(初期値:F_DM_SYMBOL_SQUARE)
  • F_DM_SYMBOL_SQUARE 正方形:縦横のシンボルサイズ(単位:数)が同じシンボル
  • F_DM_SYMBOL_RECTANGLE 長方形:縦横のシンボルサイズ(単位:数)が異なるシンボル
  • F_DM_SYMBOL_ALL 両方:正方形または長方形シンボル
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_get_symbol_type ( FHANDLE  hdm,
enum f_dm_symbol_type symbol_type 
)

[[OSS]] データマトリックス 検出シンボルタイプの取得

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] symbol_type シンボルタイプ(初期値:F_DM_SYMBOL_SQUARE)
  • F_DM_SYMBOL_SQUARE 正方形:縦横のシンボルサイズ(単位:数)が同じシンボル
  • F_DM_SYMBOL_RECTANGLE 長方形:縦横のシンボルサイズ(単位:数)が異なるシンボル
  • F_DM_SYMBOL_ALL 両方:正方形または長方形シンボル
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_OBJECT データマトリックスオブジェクトの異常
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_set_timeout ( FHANDLE  hdm,
DOUBLE  timeout 
)

[[OSS]] タイムアウトの設定

データマトリックスの認識を打ち切る制限時間を設定します。0を指定した場合はタイムアウトは行いません。

初期値:0ms タイムアウト無し

引数:
[in] hdm データマトリックスオブジェクトハンドル
[in] timeout タイムアウト時間(ms) ( timeout >= 0.0 )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 異常終了(パラメータが不正)
F_ERR_INVALID_OBJECT 不正なオブジェクトハンドルが渡されたため、異常終了。
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー

INT FVALGAPI fnFIE_dm_get_timeout ( FHANDLE  hdm,
DOUBLE *  timeout 
)

[[OSS]] タイムアウトの取得

指定したオブジェクトハンドルにて設定されているデータマトリックスの認識を打ち切る制限時間を取得します。

初期値:0ms タイムアウト無し

引数:
[in] hdm データマトリックスオブジェクトハンドル
[out] timeout タイムアウト時間(ms) ( timeout >= 0.0 )
戻り値:
F_ERR_NONE 正常終了
F_ERR_INVALID_PARAM 異常終了(パラメータが不正)
F_ERR_INVALID_OBJECT 不正なオブジェクトハンドルが渡されたため、異常終了。
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー


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