// エラー処理は省略しているので注意してください。 #include "oal_aloc.h" #include "fie.h" // 低レベル関数による計測ライン(線分)上からの複数エッジ点の検出 VOID edge1d_line() { FHANDLE himg = NULL; // 入力画像用のハンドル DSGMT_T line; // 計測ライン(直線)設定用 INT length; // 計測ラインの長さ DOUBLE *pprj = NULL; // 濃度プロファイル F_ARRAY_INDEX valid_reg; // 濃度プロファイルの有効領域の情報 F_DEDGE *edges = NULL; // エッジ点配列の作業用ポインタ INT edge_num; // 検出されたエッジ点の個数 // 入力画像の読み込み fnFIE_load_png( "fie_edge1d_line.png", &himg, F_COLOR_IMG_TYPE_UC8 ); // 計測ラインを設定する line.st.x = 100.0; line.st.y = 100.0; line.ed.x = 400.0; line.ed.y = 400.0; // 計測ラインの長さを求める fnFIE_edge1d_calc_projection_line_length( line, &length ); // 濃度プロファイル配列のメモリ確保 pprj = (DOUBLE*)fnOAL_malloc( length * sizeof(DOUBLE) ); // 計測ライン(線分)上の濃度投影による濃度プロファイルの作成 fnFIE_edge1d_projection_line( himg, line, 1, pprj, length, &valid_reg ); // エッジ保存配列のメモリ確保 edges = (F_DEDGE*)fnOAL_malloc( valid_reg.size * sizeof( F_DEDGE ) ); // 相関エッジフィルタによるエッジ検出 // 始点からのオフセット量を考慮する必要がある // 検出するエッジの方向 :両極性 // 濃度差しきい値 :相対しきい値 // エッジの保存順 :強度順 fnFIE_edge1d_detect_edges_corr( ( pprj + valid_reg.index ), valid_reg.size, F_DTC_BOTH, F_RELATIVE_THR, 50, F_MAG_SORT, edges, valid_reg.size, &edge_num ); // エッジ座標変換 // 入力画像での座標系に戻す fnFIE_edge1d_trans_coord_line( edges, edge_num, line, valid_reg.index ); fnOAL_free( pprj ); fnOAL_free( edges ); fnFIE_free_object( himg ); return; } // 低レベル関数による計測ライン(円弧)上からの複数エッジ点の検出 VOID edge1d_arc() { FHANDLE himg = NULL; // 入力画像用のハンドル F_ARC arc; // 計測ライン(円弧)設定用 INT length; // 計測ラインの長さ DOUBLE *pprj = NULL; // 濃度プロファイル F_ARRAY_INDEX *valid_reg; // 濃度プロファイルの有効領域の情報(計測ラインの形状が直線とは異なり複数となる) INT vreg_num; // 有効領域情報のサイズ F_DEDGE *edges = NULL; // エッジ点配列の作業用ポインタ INT edge_num; // 検出されたエッジ点の個数 INT max_edge_num; // 検出される可能性のあるエッジ点の最大値個数 INT i; // 入力画像の読み込み fnFIE_load_png( "fie_edge1d_arc.png", &himg, F_COLOR_IMG_TYPE_UC8 ); // 計測ラインを設定する arc.x = 287.0; arc.y = 480.0; arc.radius = 270.0; arc.start_angle = 0.0; arc.sweep_angle = 2.0 * PI; // 計測ラインの長さを求める fnFIE_edge1d_calc_projection_arc_length( arc, &length ); // 濃度プロファイル配列のメモリ確保 pprj = (DOUBLE*)fnOAL_malloc( length * sizeof(DOUBLE) ); // 濃度プロファイルの有効領域情報用構造体のメモリ確保 // 有効領域は最大で、濃度プロファイルの長さの半分の個数だけ生成される可能性がある valid_reg = (F_ARRAY_INDEX*)fnOAL_malloc( (length / 2 + 1) * sizeof(F_ARRAY_INDEX) ); // 計測ライン(線分)上の濃度投影による濃度プロファイルの作成 fnFIE_edge1d_projection_arc( himg, arc, 1, pprj, length, valid_reg, (length / 2 + 1), &vreg_num ); // 有効領域の長さを求める max_edge_num = 0; for( i = 0; i < vreg_num; i++ ) max_edge_num += valid_reg[i].size; // エッジ保存配列のメモリ確保 edges = (F_DEDGE*)fnOAL_malloc( max_edge_num * sizeof( F_DEDGE ) ); // エッジ検出 edge_num = 0; for( i = 0; i < vreg_num; i++ ){ INT edge_num_wk = 0; // DoGフィルタによりエッジ検出 // 始点からのオフセット量を考慮する必要がある // 検出するエッジの方向 :暗→明のエッジ // 濃度差しきい値 :絶対濃度差 // エッジの保存順 :始点からの位置順 fnFIE_edge1d_detect_edges_DoG( ( pprj + valid_reg[i].index ), valid_reg[i].size, F_DRK_TO_BRI, F_ABSOLUTE_THR, 100, F_POS_SORT, ( edges + edge_num ), ( max_edge_num - edge_num ), &edge_num_wk ); // エッジ座標変換 // 入力画像での座標系に戻す // 始点からのオフセット量を考慮する必要がある fnFIE_edge1d_trans_coord_arc( (edges + edge_num), edge_num_wk, arc, valid_reg[i].index ); edge_num += edge_num_wk; } fnOAL_free( pprj ); fnOAL_free( edges ); fnOAL_free( valid_reg ); fnFIE_free_object( himg ); return; } INT main() { // FIEライブラリの使用前に必ずコールする必要があります。 fnFIE_setup(); edge1d_line(); edge1d_arc(); // 終了処理 fnFIE_teardown(); return 0; }
関数 | |
INT FVALGAPI | fnFIE_edge1d_calc_projection_line_length (DSGMT_T line, INT *length) |
計測ライン(線分)の長さを計算 | |
INT FVALGAPI | fnFIE_edge1d_calc_projection_arc_length (F_ARC arc, INT *length) |
計測ライン(円弧)の長さを計算 | |
INT FVALGAPI | fnFIE_edge1d_projection_line (FHANDLE hsrc, DSGMT_T line, INT prj_width, DOUBLE *pprj, INT prj_len, F_ARRAY_INDEX *valid_reg) |
計測ライン(線分)上の濃度投影の作成 | |
INT FVALGAPI | fnFIE_edge1d_projection_arc (FHANDLE hsrc, F_ARC arc, INT prj_width, DOUBLE *pprj, INT prj_len, F_ARRAY_INDEX *valid_reg, INT vreg_len, INT *prj_num) |
計測ライン(円弧)上の濃度投影による濃度プロファイルの作成 | |
INT FVALGAPI | fnFIE_edge1d_detect_edges_DoG (const DOUBLE *pprj, INT prj_len, enum f_edge1d_edge_direction direct_mode, enum f_diff_type diff_type, DOUBLE diff_thr, enum f_edge1d_sort_mode sort_mode, F_DEDGE *edges, INT edge_len, INT *edge_num) |
DoGフィルタによるエッジ検出 | |
INT FVALGAPI | fnFIE_edge1d_detect_edges_corr (const DOUBLE *pprj, INT prj_len, enum f_edge1d_edge_direction direct_mode, enum f_diff_type diff_type, DOUBLE diff_thr, enum f_edge1d_sort_mode sort_mode, F_DEDGE *edges, INT edge_len, INT *edge_num) |
相関エッジフィルタによるエッジ検出 | |
INT FVALGAPI | fnFIE_edge1d_detect_edges_diff (const DOUBLE *pprj, INT prj_len, F_EDGE1D_DIFF_FILTER diff_filter, INT arnd, INT interval, enum f_edge1d_edge_direction direct_mode, enum f_diff_type diff_type, DOUBLE diff_thr, enum f_edge1d_sort_mode sort_mode, F_DEDGE *edges, INT edge_len, INT *edge_num, INT *diff, INT diff_len) |
1次微分によるエッジ検出 | |
INT FVALGAPI | fnFIE_edge1d_trans_coord_line (F_DEDGE *edges, INT edge_num, DSGMT_T line, INT offset) |
計測ライン(線分)上への座標変換 | |
INT FVALGAPI | fnFIE_edge1d_trans_coord_arc (F_DEDGE *edges, INT edge_num, F_ARC arc, INT offset) |
計測ライン(円弧)上への座標変換 |
INT FVALGAPI fnFIE_edge1d_calc_projection_line_length | ( | DSGMT_T | line, | |
INT * | length | |||
) |
計測ライン(線分)の長さを計算
line にて指定された直線形状の計測ライン上の濃度プロファイルを生成するために必要な長さを求めます。
本関数で取得される濃度プロファイルの長さは、濃度プロファイル内の有効領域の長さではありません。 line で指定した始点から終点までの長さとなります。
なお、濃度プロファイルの長さは以下の式で求められます。
[in] | line | 計測ライン(線分)
|
[out] | length | 濃度プロファイルの長さ |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_calc_projection_arc_length | ( | F_ARC | arc, | |
INT * | length | |||
) |
計測ライン(円弧)の長さを計算
arc にて指定された円弧形状の計測ライン上の濃度プロファイルを生成するために必要な長さを求めます。
本関数で取得される濃度プロファイルの長さは、濃度プロファイル内の有効領域の長さではありません。 arc で指定した円弧の長さとなります。
なお、濃度プロファイルの長さは以下の式で求めることができます。
[in] | arc | 計測ライン(円弧)
|
[out] | length | 濃度プロファイルの長さ |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_projection_line | ( | FHANDLE | hsrc, | |
DSGMT_T | line, | |||
INT | prj_width, | |||
DOUBLE * | pprj, | |||
INT | prj_len, | |||
F_ARRAY_INDEX * | valid_reg | |||
) |
計測ライン(線分)上の濃度投影の作成
指定した計測ライン(線分)に垂直方向に濃度投影を実行して得られた濃度プロファイルを作成します。
濃度プロファイルは、計測ラインが完全に入力画像からはみ出していない限り生成されます( 濃度プロファイル )。 つまり、計測ラインの一部が入力画像に含まれている場合に生成されます。 ただし、計測ライン部分が入力画像に含まれておらず、対応する片幅領域のみが入力画像に含まれている場合は、有効領域には含まれません。 あくまで、計測ラインが基準として有効領域が設定されます。 有効領域が存在しない場合、つまり指定された line 全体が入力画像に含まれていない場合は F_ERR_INVALID_PARAM が返されます。
計測ラインが直線の場合、濃度プロファイル内の有効領域は1つとなります。 有効領域の位置は、 valid_reg として濃度プロファイルの先頭からのオフセット量と長さが取得されます。
濃度プロファイルを保存するための配列( pprj )は、本関数内部でメモリ確保しません。 fnFIE_edge1d_calc_projection_line_length() で求められる計測ラインの長さ以上のサイズの メモリを確保した配列を用意してください。 prj_len が fnFIE_edge1d_calc_projection_line_length() で取得される長さ未満の場合は、 F_ERR_INVALID_PARAM が返されます。
[in] | hsrc | 入力画像(type:uc8,s16,us16,double / ch:1) |
[in] | line | 計測ライン(線分)
|
[in] | prj_width | 濃度投影片幅(0以上、単位:画素) |
[out] | pprj | 濃度プロファイル配列 |
[in] | prj_len | 濃度プロファイル配列の長さ
|
[out] | valid_reg | 濃度プロファイルの有効領域
|
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_projection_arc | ( | FHANDLE | hsrc, | |
F_ARC | arc, | |||
INT | prj_width, | |||
DOUBLE * | pprj, | |||
INT | prj_len, | |||
F_ARRAY_INDEX * | valid_reg, | |||
INT | vreg_len, | |||
INT * | prj_num | |||
) |
計測ライン(円弧)上の濃度投影による濃度プロファイルの作成
指定した計測ライン(円弧)に垂直方向に濃度投影を実行して得られた濃度プロファイルを作成します。
濃度プロファイルは、計測ラインが完全に入力画像からはみ出していない限り生成されます( 濃度プロファイル )。 つまり、計測ラインの一部が入力画像に含まれている場合に生成されます。 ただし、計測ライン部分が入力画像に含まれておらず、対応する片幅領域のみが入力画像に含まれている場合は、有効領域には含まれません。 あくまで、計測ラインが基準として有効領域が設定されます。 有効領域が存在しない場合、つまり指定された arc 全体が入力画像に含まれていない場合は F_ERR_INVALID_PARAM が返されます。
計測ラインの形状が円弧では、複数の有効領域が濃度プロファイル内に設定される可能性があります。 有効領域は最大で、「濃度プロファイルの長さ÷2」となります。 なお、濃度プロファイルの長さは、 fnFIE_edge1d_calc_projection_arc_length() により取得可能です。 有効領域の位置は、 valid_reg として濃度プロファイルの先頭からのオフセット量と長さの配列、そして prj_num として有効領域個数が取得されます。
なお、 valid_reg は本関数内部でメモリ確保しません。 メモリを確保した配列を用意してください。 vreg_len が ( ( INT )( fnFIE_edge1d_calc_projection_arc_length() / 2 ) + 1 ) 未満の場合は、 F_ERR_INVALID_PARAM が返されます。
また、濃度プロファイルを保存するための配列( pprj )も、本関数内部でメモリ確保しません。 fnFIE_edge1d_calc_projection_arc_length() で求められる計測ラインの長さ以上のサイズの メモリを確保した配列を用意してください。 prj_len が fnFIE_edge1d_calc_projection_arc_length() で取得される長さ未満の場合は、 F_ERR_INVALID_PARAM が返されます。
[in] | hsrc | 入力画像(type:uc8,s16,us16,double / ch:1) |
[in] | arc | 計測ライン(円弧)
|
[in] | prj_width | 濃度投影片幅(0以上、単位:画素) |
[out] | pprj | 濃度プロファイル配列 |
[in] | prj_len | 濃度プロファイル配列の長さ
|
[out] | valid_reg | 濃度プロファイルの有効領域配列
|
[in] | vreg_len | 濃度プロファイルの有効領域配列の長さ
|
[out] | prj_num | 濃度プロファイル配列の有効領域個数 |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_IMAGE | 不正な画像が渡された | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_detect_edges_DoG | ( | const DOUBLE * | pprj, | |
INT | prj_len, | |||
enum f_edge1d_edge_direction | direct_mode, | |||
enum f_diff_type | diff_type, | |||
DOUBLE | diff_thr, | |||
enum f_edge1d_sort_mode | sort_mode, | |||
F_DEDGE * | edges, | |||
INT | edge_len, | |||
INT * | edge_num | |||
) |
DoGフィルタによるエッジ検出
入力濃度プロファイルに微分方式であるDoGフィルタにより強度計算を行い、サブピクセル精度でエッジを検出します。
本関数で取得されるエッジ点( edges )は、濃度プロファイル上の座標となります。 そのため、すべてのエッジ点のy座標は 0 で保存されます。 入力画像での座標に変換するには、計測ラインの形状により、 fnFIE_edge1d_trans_coord_line() 、 fnFIE_edge1d_trans_coord_arc() にて座標変換をしてください。
また本関数は、 エッジ検出アルゴリズムの違いにより、 fnFIE_edge1d_detect_edges_diff() のように1次微分データは取得できません。
濃度プロファイル配列( pprj )の長さ( prj_len )は、 DoGフィルタの長さにより最少値が決定します。 DoGフィルタの最小長さは5であり、その周辺の2個分の座標を参照することから、 prj_len の最小長さは9となります。 prj_len が9未満だった場合は、 F_ERR_NODATA が返されます。
検出されたエッジ点を保存するための配列( edges )は、本関数内部でメモリ確保しません。 メモリを確保した配列を用意してください。 edges は、 prj_len 以上のメモリを確保してください。 edge_len が prj_len 未満だった場合は F_ERR_INVALID_PARAM が返されます。
エッジ点は、このエッジ部内に"ひとつ"であると考えます。 しかし、例外的にひとつのエッジ部に、エッジ強度極大点が複数存在することがあります。 その場合は、濃度差の50%点(エッジ部の最小濃度 + 0.5 × エッジ部濃度差)となる位置を頂点位置とします。
濃度プロファイル内で、濃度が単調に増加または減少する部分をエッジ部として検出します。 しかし、単調の変化の中に、緩やかな変化が発生する場合は、これを分割します。
本関数では、濃度プロファイル内の隣り合う要素の濃度差が1以下の場合は、その部分を平坦であると判定します。 そのため、濃度差が1以下の部分のエッジ点は検出されません。 ただし濃度プロファイルは、微小な濃度変化を吸収するために、 fnFIE_d4i5() にて四捨五入をした後に上記処理を行います。
エッジ部
エッジ部の分割
[in] | pprj | 濃度プロファイル配列 |
[in] | prj_len | 濃度プロファイル配列の長さ
|
[in] | direct_mode | 検出するエッジ方向の指定
|
[in] | diff_type | 濃度差しきい値の種別
|
[in] | diff_thr | エッジの最小濃度差しきい値
|
[in] | sort_mode | 検出されたエッジの保存順を指定
|
[out] | edges | 検出されたエッジ点保存配列
|
[in] | edge_len | エッジ点配列の長さ
|
[out] | edge_num | 検出されたエッジ点個数 |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NODATA | 濃度プロファイルに有効領域が存在しない | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_detect_edges_corr | ( | const DOUBLE * | pprj, | |
INT | prj_len, | |||
enum f_edge1d_edge_direction | direct_mode, | |||
enum f_diff_type | diff_type, | |||
DOUBLE | diff_thr, | |||
enum f_edge1d_sort_mode | sort_mode, | |||
F_DEDGE * | edges, | |||
INT | edge_len, | |||
INT * | edge_num | |||
) |
相関エッジフィルタによるエッジ検出
入力濃度プロファイルにテンプレート方式である相関エッジフィルタにより強度計算を行い、サブピクセル精度でエッジを検出します。
本関数で取得されるエッジ点( edges )は、濃度プロファイル上の座標となります。 そのため、すべてのエッジ点のy座標は 0 で保存されます。 入力画像での座標に変換するには、計測ラインの形状により、 fnFIE_edge1d_trans_coord_line() 、 fnFIE_edge1d_trans_coord_arc() にて座標変換をしてください。
また本関数は、 エッジ検出アルゴリズムの違いにより、 fnFIE_edge1d_detect_edges_diff() のように1次微分データは取得できません。
濃度プロファイル配列( pprj )の長さ( prj_len )は、 相関エッジフィルタの長さにより最少値が決定します。 相関エッジフィルタの最小長さは5であり、その周辺の2個分の座標を参照することから、 prj_len の最小長さは9となります。 prj_len が9未満だった場合は、 F_ERR_NODATA が返されます。
検出されたエッジ点を保存するための配列( edges )は、本関数内部でメモリ確保しません。 メモリを確保した配列を用意してください。 edges は、 prj_len 以上のメモリを確保してください。 edge_len が prj_len 未満だった場合は F_ERR_INVALID_PARAM が返されます。
エッジ点は、このエッジ部内に"ひとつ"であると考えます。 しかし、例外的にひとつのエッジ部に、エッジ強度極大点が複数存在することがあります。 その場合は、濃度差の50%点(エッジ部の最小濃度 + 0.5 × エッジ部濃度差)となる位置を頂点位置とします。
濃度プロファイル内で、濃度が単調に増加または減少する部分をエッジ部として検出します。 しかし、単調の変化の中に、緩やかな変化が発生する場合は、これを分割します。
本関数では、濃度プロファイル内の隣り合う要素の濃度差が1以下の場合は、その部分を平坦であると判定します。 そのため、濃度差が1以下の部分のエッジ点は検出されません。 ただし濃度プロファイルは、微小な濃度変化を吸収するために、 fnFIE_d4i5() にて四捨五入をした後に上記処理を行います。
エッジ部
エッジ部の分割
[in] | pprj | 濃度プロファイル配列 |
[in] | prj_len | 濃度プロファイル配列の長さ
|
[in] | direct_mode | 検出するエッジ方向の指定
|
[in] | diff_type | 濃度差しきい値の種別
|
[in] | diff_thr | エッジの最小濃度差しきい値
|
[in] | sort_mode | 検出されたエッジの保存順を指定
|
[out] | edges | 検出されたエッジ点保存配列
|
[in] | edge_len | エッジ点配列の長さ
|
[out] | edge_num | 検出されたエッジ点個数 |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NODATA | 濃度プロファイルに有効領域が存在しない | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_detect_edges_diff | ( | const DOUBLE * | pprj, | |
INT | prj_len, | |||
F_EDGE1D_DIFF_FILTER | diff_filter, | |||
INT | arnd, | |||
INT | interval, | |||
enum f_edge1d_edge_direction | direct_mode, | |||
enum f_diff_type | diff_type, | |||
DOUBLE | diff_thr, | |||
enum f_edge1d_sort_mode | sort_mode, | |||
F_DEDGE * | edges, | |||
INT | edge_len, | |||
INT * | edge_num, | |||
INT * | diff, | |||
INT | diff_len | |||
) |
1次微分によるエッジ検出
入力濃度プロファイルに1次微分フィルタにより強度計算を行い、サブピクセル精度でエッジを検出します。
本関数で取得されるエッジ点( edges )は、濃度プロファイル上の座標となります。 そのため、すべてのエッジ点のy座標は 0 で保存されます。 入力画像での座標に変換するには、計測ラインの形状により、 fnFIE_edge1d_trans_coord_line() 、 fnFIE_edge1d_trans_coord_arc() にて座標変換をしてください。
濃度プロファイル配列( pprj )の長さ( prj_len )の最小値は、 微分フィルタとサブピクセル計算に使用する周辺情報の片幅により以下の通りに決定されます。
prj_len の最小値 = ( arnd + diff_filter.minus_foot + diff_filter.minus_len + diff_filter.plus_len + diff_filter.plus_foot + arnd );
prj_len が上記の値未満の場合は、 F_ERR_NODATA が返されます。
検出されたエッジ点を保存するための配列( edges )は、本関数内部でメモリ確保しません。 メモリを確保した配列を用意してください。 edge_len が、 prj_len 未満の場合は、 F_ERR_INVALID_PARAM が返されます。
上図のように、注目画素(x)の位置に対して len で指定される領域を無視して、 foot で指定される領域の平均値より、プラス側とマイナス側で差分を求めます。 plus_foot と minus_foot の値が違っていても、それぞれで平均値での差分を求めるため、 問題ありません。
位置 : 0 1 2 3 4 5 6 7 微分値: 0 10 10 30 20 15 0 0上記のデータの場合で、3が最大位置として登録されていて arnd = 2 の場合、 サブピクセル位置の計算は3の位置に前後2個を加えた、1〜5のデータが対象になります。 重み付き平均は、微分値をd、位置をxとすると、(Σd*x)/(Σd)で計算されます。 この場合、
[in] | pprj | 濃度プロファイル配列 |
[in] | prj_len | 濃度プロファイル配列の長さ
|
[in] | diff_filter | 微分フィルタの指定
|
[in] | arnd | サブピクセル計算に使用する周辺情報の片幅(0以上) 検出した濃度微分データのピーク位置(または、または最初にしきい値を超えた位置)に対して、 ここで指定した画素分の両端の濃度微分データを使用してサブピクセル精度の計算をする |
[in] | interval | エッジ取得間隔(0以上) |
[in] | direct_mode | 検出するエッジ方向の指定
|
[in] | diff_type | 濃度差しきい値の種別
|
[in] | diff_thr | エッジの最小濃度差しきい値
|
[in] | sort_mode | 検出されたエッジの保存順を指定
|
[out] | edges | 検出されたエッジ点保存配列のポインタ
|
[in] | edge_len | エッジ点配列の長さ
|
[out] | edge_num | 検出されたエッジ点個数 |
[out] | diff | 1次微分データ(必要ない場合はNULL) |
[in] | diff_len | 1次微分データの長さ
|
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NODATA | 濃度プロファイルに有効領域が存在しない | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
INT FVALGAPI fnFIE_edge1d_trans_coord_line | ( | F_DEDGE * | edges, | |
INT | edge_num, | |||
DSGMT_T | line, | |||
INT | offset | |||
) |
計測ライン(線分)上への座標変換
fnFIE_edge1d_detect_edges_DoG() 等によって求められたエッジ点座標は、濃度プロファイル配列での位置となります。 本関数により、入力画像での計測ライン(線分)上の座標に変換します。
なお line は、 fnFIE_edge1d_projection_line() で指定した計測ラインと同じものを指定してください。
[in,out] | edges | 検出されたエッジ点保存配列のポインタ
|
[in] | edge_num | 検出されたエッジ点個数(0以上) |
[in] | line | 計測ライン(線分)
|
[in] | offset | 濃度プロファイル配列の要素番号の始点からのオフセット量(0以上) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
計測ライン(円弧)上への座標変換
fnFIE_edge1d_detect_edges_DoG() 等によって求められたエッジ点座標は、濃度プロファイル配列での位置となります。 本関数により、入力画像での計測ライン(円弧)上の座標に変換します。
なお arc は、 fnFIE_edge1d_projection_arc() で指定した計測ラインと同じものを指定してください。
[in,out] | edges | 検出されたエッジ点保存配列のポインタ
|
[in] | edge_num | 検出されたエッジ点個数(0以上) |
[in] | arc | 計測ライン(円弧)
|
[in] | offset | 濃度プロファイル配列の要素番号の始点からのオフセット量(0以上) |
F_ERR_NONE | 正常終了 | |
F_ERR_INVALID_PARAM | 不正なパラメータが渡された
| |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |