関数 | |
INT FVALGAPI | fnFIE_aligned_corner_extraction (const FHANDLE fim, BOX_T roi_horz, BOX_T roi_vert, DOUBLE delta_angle, INT filter_size, DLINE_T *line_horz_out, DLINE_T *line_vert_out, DPNT_T *pnt_out) |
指定された画像領域から縦・横線を検出し交点を抽出します |
INT FVALGAPI fnFIE_aligned_corner_extraction | ( | const FHANDLE | fim, | |
BOX_T | roi_horz, | |||
BOX_T | roi_vert, | |||
DOUBLE | delta_angle, | |||
INT | filter_size, | |||
DLINE_T * | line_horz_out, | |||
DLINE_T * | line_vert_out, | |||
DPNT_T * | pnt_out | |||
) |
指定された画像領域から縦・横線を検出し交点を抽出します
画像 fim から roi_horz で指定された領域内の横線を抽出し、 roi_vert で指定された領域内の縦線を抽出し、線の交点を pnt_out で出力します。 横線の直線係数が line_horz_out, 縦線の直線係数が line_vert_out で出力されます。 横線と縦線の直線係数は, DLINE_T::a ^2 + DLINE_T::b ^2 = 1 を満たします。
抽出される横・縦線の間の角度を delta_angle でラジアン単位で指定します。 縦線の角度は、横線の角度に delta_angle を足した角度となります。
各領域内の線抽出に使われるフィルタサイズ(3以上の奇数、推奨値:11以上)を filter_size で渡します。
各領域のX座標が [ 0, 画像横サイズ-1 ], Y座標が [ 0, 画像縦サイズ-1 ] 以内でなければなりません。
本関数は、エッジの極性を無視します。そのため:
[in] | fim | 入力画像( 1 channel, UC8 ) |
[in] | roi_horz | 横線を検出する画像領域 |
[in] | roi_vert | 縦線を検出する画像領域 |
[in] | delta_angle | 横線と縦線の間の角度(単位:ラジアン)。 縦線の角度=横線の角度+delta_angle |
[in] | filter_size | エッジ抽出フィルターのサイズ。3以上の奇数でなければなりません。 |
[out] | line_horz_out | 抽出された横線 不要な場合は NULL を指定可能です。 |
[out] | line_vert_out | 抽出された縦線 不要な場合は NULL を指定可能です。 |
[out] | pnt_out | 抽出された交点 不要な場合は NULL を指定可能です。 |
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー | |
F_ERR_INVALID_PARAM | パラメータ不正エラー | |
F_ERR_INVALID_IMAGE | 画像オブジェクトエラー | |
F_ERR_CALC_IMPOSSIBLE | 計算不能エラー | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
![]() delta_angle = 90度の例。赤:横線ROI. 青:縦線ROI. 緑:コーナー |
![]() delta_angle = 170度の例。赤:横線ROI. 青:縦線ROI. 緑:コーナー |
![]() チェスボードコーナー抽出の例。赤:横線ROI. 青:縦線ROI. 緑:コーナー |