幾何変換
[基本画像操作]


説明

同次変換行列について
FGA ライブラリ の 幾何変換処理関数 で使用する同次変換行列は、 FIE ライブラリ の 幾何変換処理 で使用するものと同じものを使用します。
したがいまして、これらの関数で扱う 同次変換行列 の作成や計算等については FIE ライブラリ を用いて行って下さい。

同次変換行列についての詳細は、 「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 処理対象画像の領域外になる画素の処理方法
  • TRUE 領域外になる画素は0クリア
  • FALSE 領域外になる画素は処理しない
[in] iSamplingMode 濃度補間方法
  • F_SAMPLING_NN 最近傍法により濃度補間を行う
  • F_SAMPLING_BILINEAR 共一次線形補間により濃度補間を行う
  • F_SAMPLING_CUBIC 三次畳み込み法により濃度補間を行う
  • F_SAMPLING_LANCZOS Lanczos-windowed Sinc function法により濃度補間を行う
  • F_SAMPLING_SUPER super-sampling 法により濃度補間を行う
戻り値:
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 処理対象画像の領域外になる画素の処理方法
  • TRUE 領域外になる画素は0クリア
  • FALSE 領域外になる画素は処理しない
[in] iSamplingMode 濃度補間方法
  • F_SAMPLING_NN 最近傍法により濃度補間を行う
  • F_SAMPLING_BILINEAR 共一次線形補間により濃度補間を行う
  • F_SAMPLING_CUBIC 三次畳み込み法により濃度補間を行う
  • F_SAMPLING_ADAPT Adaptive Super-sampling法により濃度補間を行う
戻り値:
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 処理対象画像の領域外になる画素の処理方法
  • TRUE 領域外になる画素は0クリア
  • FALSE 領域外になる画素は処理しない
[in] iSamplingMode 濃度補間方法
  • F_SAMPLING_NN 最近傍法により濃度補間を行う
  • F_SAMPLING_BILINEAR 共一次線形補間により濃度補間を行う
  • F_SAMPLING_CUBIC 三次畳み込み法により濃度補間を行う
戻り値:
F_ERR_NONE 正常終了
F_ERR_NOMEMORY メモリ不足エラー
F_ERR_INVALID_PARAM パラメータ異常
F_ERR_INVALID_IMAGE 不正な画像オブジェクトが入力された
F_ERR_NO_LICENCE ライセンスエラー、または未初期化エラー
本関数は非同期関数です。非同期関数の詳細については 「非同期関数」のページを参照して下さい。


Documentation copyright © 2011 FAST Corporation. [B-002483]
Generated on Thu May 20 10:57:53 2021 for FGA ライブラリ by doxygen 1.5.6-FASTSP-p2