同次変換行列についての詳細は、 「FIE ライブラリ説明書」 を参照して下さい。
関数 | |
INT FVALGAPI | fnFGA_geotrans_affine (FHANDLE hSrc, FHANDLE hDst, FHANDLE hMask, const FMATRIX *vpMat, INT bIsClearBack, INT iSamplingMode) |
画像のアフィン変換 | |
INT FVALGAPI | fnFGA_geotrans_perspective (FHANDLE hSrc, FHANDLE hDst, FHANDLE hMask, const FMATRIX *vpMat, INT bIsClearBack, INT iSamplingMode) |
画像の射影変換 | |
INT FVALGAPI | fnFGA_geotrans_warpping (FHANDLE hSrc, FHANDLE hMap, FHANDLE hDst, FHANDLE hMask, INT bIsClearBack, INT iSamplingMode) |
座標変換マップに従って座標を変換する |
INT FVALGAPI fnFGA_geotrans_affine | ( | FHANDLE | hSrc, | |
FHANDLE | hDst, | |||
FHANDLE | hMask, | |||
const FMATRIX * | vpMat, | |||
INT | bIsClearBack, | |||
INT | iSamplingMode | |||
) |
画像のアフィン変換
処理対象画像 (FGA 画像オブジェクト) を、幾何変換の同次変換行列 vpMat に従ってアフィン変換します。 処理対象画像と結果画像 (FGA 画像オブジェクト) のサイズは異なっていても構いません。 但し、処理対象画像と結果画像の型とチャネル数は同じでなければいけません。
幾何変換の同次変換行列 vpMat は FIE ライブラリ を用いて生成して下さい。
本関数に対応する FIE ライブラリ関数は fnFIE_geotrans_affine() となります。
ここに記載されていない詳細な仕様に関しては 「FIE ライブラリ説明書」 を参照して下さい。
[in] | hSrc | 処理対象画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[out] | hDst | 処理結果画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[out] | hMask | 処理結果画像の有効画素マスク画像 (FGA 画像オブジェクト / type: bin) 画像サイズは hDst と同じ、チャネル数1であること。 マスク画像が不要な場合は NULL を指定する。 |
[in] | vpMat | アフィン変換の同次変換行列 |
[in] | bIsClearBack | 処理対象画像の領域外になる画素の処理方法
|
[in] | iSamplingMode | 濃度補間方法
|
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー | |
F_ERR_INVALID_PARAM | パラメータ異常 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが入力された | |
F_ERR_CALC_IMPOSSIBLE | 変換行列の逆行列が計算不可能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい. // FIE ライブラリ関連インクルードファイル. #include "fie.h" // FGA ライブラリインクルードファイル. #include "fga.h" INT main( VOID ) { // 入力画像. FHANDLE src_FIE = NULL; FHANDLE src_FGA = NULL; // 出力画像. FHANDLE dst_FIE = NULL; FHANDLE dst_FGA = NULL; INT width, height; FMATRIX * pmat = NULL; // アフィン変換行列. DPNT_T from[10], to[10]; // 対応点. // ライブラリの初期化処理. fnFIE_setup(); fnFGA_setup(); // 入力画像を FIE 画像オブジェクトとして用意する. (サンプルの為ファイルから読込み). fnFIE_load_bmp( "src_img.bmp", &src_FIE, F_COLOR_IMG_TYPE_UC8 ); fnFIE_img_get_params( src_FIE, NULL, NULL, NULL, &width, &height ); // 入力画像を FGA 画像オブジェクトにコピー. src_FGA = fnFGA_img_root_alloc( F_IMG_UC8, 1, width, height ); fnFGA_img_copy( src_FIE, src_FGA ); // 出力画像を FGA 画像オブジェクトとして確保する. dst_FGA = fnFGA_img_root_alloc( F_IMG_UC8, 1, width, height ); // 3 x 3 の行列を設定する. pmat = fnFIE_mat_aalloc( 3, 3 ); // アフィン変換の同一直線上にない 3 組以上の座標列を設定する. // 変換前の座標. from[0].x = 0; from[0].y = 0; from[1].x = 10; from[1].y = 20; from[2].x = 50; from[2].y = 50; from[3].x = 130; from[3].y = 100; from[4].x = 150; from[4].y = 130; from[5].x = 180; from[5].y = 140; from[6].x = 200; from[6].y = 150; from[7].x = 230; from[7].y = 170; from[8].x = 240; from[8].y = 180; from[9].x = 256; from[9].y = 192; // 変換後の座標. to[0].x = 20; to[0].y = 30; to[1].x = 40; to[1].y = 60; to[2].x = 80; to[2].y = 80; to[3].x = 100; to[3].y = 90; to[4].x = 110; to[4].y = 100; to[5].x = 130; to[5].y = 110; to[6].x = 150; to[6].y = 120; to[7].x = 170; to[7].y = 130; to[8].x = 140; to[8].y = 130; to[9].x = 150; to[9].y = 150; // FIE ライブラリにより、アフィン変換行列を求める. fnFIE_geotrans_estimate_affine_matrix( pmat, from, to, 10 ); // FGA ライブラリにより、画像のアフィン変換を行う. fnFGA_geotrans_affine( src_FGA, dst_FGA, NULL, // マスク画像は作成しない. pmat, TRUE, // 領域外になる画素は 0 クリアする. F_SAMPLING_CUBIC // 三次畳み込み法による濃度補間を指定. ); // 出力画像を、FIE 画像オブジェクトにコピー. dst_FIE = fnFIE_img_root_alloc( F_IMG_UC8, 1, width, height ); fnFGA_img_copy( dst_FGA, dst_FIE ); // 出力画像をファイルに保存. fnFIE_save_bmp( "dst_img.bmp", dst_FIE ); // 画像オブジェクトの解放. fnFIE_free_object( src_FIE ); fnFIE_free_object( src_FGA ); fnFIE_free_object( dst_FIE ); fnFIE_free_object( dst_FGA ); // 変換行列の解放. fnFIE_mat_afree( pmat ); // ライブラリの終了処理. fnFIE_teardown(); fnFGA_teardown(); return 0; }
INT FVALGAPI fnFGA_geotrans_perspective | ( | FHANDLE | hSrc, | |
FHANDLE | hDst, | |||
FHANDLE | hMask, | |||
const FMATRIX * | vpMat, | |||
INT | bIsClearBack, | |||
INT | iSamplingMode | |||
) |
画像の射影変換
処理対象画像 (FGA 画像オブジェクト) を、幾何変換の同次変換行列 vpMat に従って射影変換を行います。
処理対象画像と結果画像 (FGA 画像オブジェクト) のサイズは異なっていても構いません。
但し、処理対象画像と結果画像の型とチャネル数は同じでなければいけません。
幾何変換の同次変換行列 vpMat は FIE ライブラリ を用いて生成して下さい。
本関数に対応する FIE ライブラリ関数は fnFIE_geotrans_perspective() となります。
ここに記載されていない詳細な仕様に関しては 「FIE ライブラリ説明書」 を参照して下さい。
[in] | hSrc | 処理対象画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[out] | hDst | 処理結果画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[out] | hMask | 処理結果画像の有効画素マスク画像 (FGA 画像オブジェクト / type: bin) 画像サイズは hDst と同じ、チャネル数1であること。 マスク画像が不要な場合は NULL を指定する。 |
[in] | vpMat | 射影変換の同次変換行列 |
[in] | bIsClearBack | 処理対象画像の領域外になる画素の処理方法
|
[in] | iSamplingMode | 濃度補間方法
|
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー | |
F_ERR_INVALID_PARAM | パラメータ異常 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが入力された | |
F_ERR_CALC_IMPOSSIBLE | 変換行列の逆行列が計算不可能 | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
// エラー処理は省略しているので注意して下さい. // FIE ライブラリ関連インクルードファイル. #include "fie.h" // FGA ライブラリインクルードファイル. #include "fga.h" INT main( VOID ) { // 入力画像. FHANDLE src_FIE = NULL; FHANDLE src_FGA = NULL; // 出力画像. FHANDLE dst_FIE = NULL; FHANDLE dst_FGA = NULL; INT width, height; FMATRIX * pmat = NULL; // 射影変換行列. DPNT_T from[10], to[10]; // 対応点. // ライブラリの初期化処理. fnFIE_setup(); fnFGA_setup(); // 入力画像を FIE 画像オブジェクトとして用意する. (サンプルの為ファイルから読込み). fnFIE_load_bmp( "src_img.bmp", &src_FIE, F_COLOR_IMG_TYPE_UC8 ); fnFIE_img_get_params( src_FIE, NULL, NULL, NULL, &width, &height ); // 入力画像を FGA 画像オブジェクトにコピー. src_FGA = fnFGA_img_root_alloc( F_IMG_UC8, 1, width, height ); fnFGA_img_copy( src_FIE, src_FGA ); // 出力画像を FGA 画像オブジェクトとして確保する. dst_FGA = fnFGA_img_root_alloc( F_IMG_UC8, 1, width, height ); // 3 x 3 の行列を設定する. pmat = fnFIE_mat_aalloc( 3, 3 ); // 射影変換の同一直線上にない 4 組以上の座標列を設定する. // 変換前の座標. from[0].x = 0; from[0].y = 0; from[1].x = 256; from[1].y = 0; from[2].x = 256; from[2].y = 192; from[3].x = 0; from[3].y = 192; from[4].x = 50; from[4].y = 50; from[5].x = 100; from[5].y = 50; from[6].x = 100; from[6].y = 100; from[7].x = 50; from[7].y = 100; from[8].x = 128; from[8].y = 96; from[9].x = 130; from[9].y = 100; // 変換後の座標. to[0].x = 200; to[0].y = 10; to[1].x = 220; to[1].y = 180; to[2].x = 30; to[2].y = 160; to[3].x = 60; to[3].y = 10; to[4].x = 150; to[4].y = 60; to[5].x = 190; to[5].y = 130; to[6].x = 60; to[6].y = 60; to[7].x = 110; to[7].y = 60; to[8].x = 128; to[8].y = 96; to[9].x = 130; to[9].y = 100; // FIE ライブラリにより、射影変換行列を求める. fnFIE_geotrans_estimate_perspective_matrix( pmat, from, to, 10 ); // FGA ライブラリにより、画像の射影変換を行う. fnFGA_geotrans_perspective( src_FGA, dst_FGA, NULL, // マスク画像は作成しない. pmat, TRUE, // 領域外になる画素は 0 クリアする. F_SAMPLING_CUBIC // 三次畳み込み法による濃度補間を指定. ); // 出力画像を、FIE 画像オブジェクトにコピー. dst_FIE = fnFIE_img_root_alloc( F_IMG_UC8, 1, width, height ); fnFGA_img_copy( dst_FGA, dst_FIE ); // 出力画像をファイルに保存. fnFIE_save_bmp( "dst_img.bmp", dst_FIE ); // 画像オブジェクトの解放. fnFIE_free_object( src_FIE ); fnFIE_free_object( src_FGA ); fnFIE_free_object( dst_FIE ); fnFIE_free_object( dst_FGA ); // 変換行列の解放. fnFIE_mat_afree( pmat ); // ライブラリの終了処理. fnFIE_teardown(); fnFGA_teardown(); return 0; }
INT FVALGAPI fnFGA_geotrans_warpping | ( | FHANDLE | hSrc, | |
FHANDLE | hMap, | |||
FHANDLE | hDst, | |||
FHANDLE | hMask, | |||
INT | bIsClearBack, | |||
INT | iSamplingMode | |||
) |
座標変換マップに従って座標を変換する
処理対象画像 (FGA 画像オブジェクト) を、予め作っておいた 座標変換マップ hMap (FGA 画像オブジェクト) に従って座標を変換します。 処理対象画像と結果画像 (FGA 画像オブジェクト) のサイズは異なっていても構いません。 但し、処理対象画像と結果画像の型とチャネル数は同じでなければなりません。
本関数に対応する FIE ライブラリ関数は fnFIE_geotrans_warpping() となります。
ここに記載されていない詳細な仕様に関しては 「FIE ライブラリ説明書」 を参照して下さい。
[in] | hSrc | 処理対象画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[in] | hMap | 座標変換マップ画像 (FGA 画像オブジェクト / type: double, float) 画像サイズは hDst と同じ、チャネル数 2 であること。 |
[out] | hDst | 処理結果画像 (FGA 画像オブジェクト / type: bin, uc8, us16, double) |
[out] | hMask | 処理結果画像の有効画素マスク画像 (FGA 画像オブジェクト / type: bin) 画像サイズは hDst と同じ、チャネル数 1 であること。 マスク画像が不要な場合は NULL を指定する。 |
[in] | bIsClearBack | 処理対象画像の領域外になる画素の処理方法
|
[in] | iSamplingMode | 濃度補間方法
|
F_ERR_NONE | 正常終了 | |
F_ERR_NOMEMORY | メモリ不足エラー | |
F_ERR_INVALID_PARAM | パラメータ異常 | |
F_ERR_INVALID_IMAGE | 不正な画像オブジェクトが入力された | |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |