カメラキャリブレーションデータオブジェクトの作成2
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static FHANDLE fnFIE_calib_open2( int type, int n, double unit, DPNT_T offset, ref int status ) |
Visual Basic |
---|
Public Shared Function fnFIE_calib_open2 ( type As Integer, n As Integer, unit As Double, offset As DPNT_T, ByRef status As Integer ) As FHANDLE |
Parameters
- type
- Type: System..::..Int32
モデルの種別 (下記の値を指定してください。)- F_CALIB_MODEL_CIRCLE
- n
- Type: System..::..Int32
円の縦横方向個数- type が F_CALIB_MODEL_CIRCLE の場合、 n > 2
- unit
- Type: System..::..Double
モデルの単位長さ。ワールド座標系の単位(ミリメートル等)で与えます。 ( unit > 0.0 )
- offset
- Type: fvalgcli..::..DPNT_T
モデル原点とワールド座標系原点のオフセット。ワールド座標系の単位(ミリメートル等)で与えます。
- status
- Type: System..::..Int32%
エラーコード。不要な場合は IntPtr.Zero を指定してください。- F_ERR_NONE 正常終了
- F_ERR_NOMEMORY メモリ不足
- F_ERR_INVALID_PARAM パラメータ異常
Return Value
Type: FHANDLEf_err | 内容 |
---|---|
IntPtr.Zero | 異常終了 |
IntPtr.Zero 以外 | カメラキャリブレーションデータオブジェクト |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ //#define ONESHOT #define PARAMSCALE #define MAPSCALE using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { /// <summary> /// カメラキャリブレーションデータオブジェクトの作成2. /// </summary> [FvPluginExecute] public void fnFIE_calib_open2() { int status = (int)f_err.F_ERR_NONE; FHANDLE hcalib = FHANDLE.Zero; // キャリブレーションハンドル. int type = (int)fie_calib_model_type.F_CALIB_MODEL_CIRCLE; // 円マーカ. int n = 8; // 縦、横の円の数. double unit = 4; // モデルの単位長さ.ワールド座標系の単位(ミリメートル等)で与えます. DPNT_T offset = DPNT_T.init(0, 0); // モデル原点とワールド座標系原点のオフセット.ワールド座標系の単位(ミリメートル等)で与えます. FHANDLE hdst = FHANDLE.Zero; // 歪み補正画像. try { // キャリブレーションオブジェクトの生成. hcalib = api.fnFIE_calib_open2(type, n, unit, offset, ref status); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 特徴点の検出とハンドルへの追加(detectとaddをまとめた関数). fnFIE_calib_add_data2(hcalib); // カメラ内部パラメータの算出. F_CAMERA_PARAM pcamera; // カメラ内部パラメータ構造体. #if ONESHOT // 1視野のみの画像を用いた特殊なキャリブレーション. pcamera = fnFIE_calib_calc_1shot(hcalib); #else // 通常のキャリブレーション. pcamera = fnFIE_calib_calc_intrinsic_parameters(hcalib); #endif // 歪み補正画像の生成. hdst = CreateUndistortImage(pcamera); // 画像の保存. status = api.fnFIE_save_bmp(ResultDir + "/fnFIE_UndistortImage.bmp", hdst); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); } finally { hcalib.Dispose(); hdst.Dispose(); } } /// <summary> /// 歪み補正画像の生成. /// </summary> /// <param name="pcamera"></param> public FHANDLE CreateUndistortImage(F_CAMERA_PARAM pcamera) { int status = (int)f_err.F_ERR_NONE; FHANDLE hsrc = FHANDLE.Zero; // 歪み補正対象画像. FHANDLE hdst = FHANDLE.Zero; // 歪み補正画像. FHANDLE hmap = FHANDLE.Zero; // 歪み補正マップ. double scale = 0; // 歪み補正マップのスケール. DPNT_T offset = DPNT_T.init(0, 0); // 歪み補正マップのオフセット. int fit_width = 0; // 歪み補正マップの幅(歪み補正画像の幅). int fit_height = 0; // 歪み補正マップの高さ(歪み補正画像の高さ). try { // 歪み補正対象画像のロード. status = api.fnFIE_load_img_file(TestImageDir + "/testdata/calib_target.bmp", ref hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 歪み補正マップのパラメータ算出. #if MAPSCALE #if PARAMSCALE // パラメータ算出1. fnFIE_calib_undistort_fit_scale(pcamera, hsrc, ref scale, ref offset, ref fit_width, ref fit_height); #else // パラメータ算出2. fnFIE_calib_undistort_fit_rect(pcamera, hsrc, ref scale, ref offset, ref fit_width, ref fit_height); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); #endif // 歪み補正マップの生成. hmap = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, 2, fit_width, fit_height); fnFIE_calib_undistort_image_map_scale(hmap, pcamera, scale, offset); #else fit_width = api.fnFIE_img_get_width(hsrc); fit_height = api.fnFIE_img_get_height(hsrc); hmap = api.fnFIE_img_root_alloc((int)f_imgtype.F_IMG_DOUBLE, 2, fit_width, fit_height); fnFIE_calib_undistort_image_map(hmap, pcamera); #endif // 歪み補正画像の生成. int type = api.fnFIE_img_get_type(hsrc); int ch = api.fnFIE_img_get_channels(hsrc); hdst = api.fnFIE_img_root_alloc(type, ch, fit_width, fit_height); status = api.fnFIE_geotrans_warpping(hsrc, hmap, hdst, FHANDLE.Zero, false, f_sampling_mode.F_SAMPLING_BILINEAR); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); return hdst; } finally { hsrc.Dispose(); hmap.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ '#Const ONESHOT = True #Const PARAMSCALE = True #Const MAPSCALE = True Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE ''' <summary> ''' カメラキャリブレーションデータオブジェクトの作成2. ''' </summary> <FvPluginExecute> _ Public Sub fnFIE_calib_open2() Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hcalib As FHANDLE = FHANDLE.Zero ' キャリブレーションハンドル. Dim type As Integer = CInt(fie_calib_model_type.F_CALIB_MODEL_CIRCLE) ' 円マーカ. Dim n As Integer = 8 ' 縦、横の円の数. Dim unit As Double = 4 ' モデルの単位長さ.ワールド座標系の単位(ミリメートル等)で与えます. Dim offset As DPNT_T = DPNT_T.init(0, 0) ' モデル原点とワールド座標系原点のオフセット.ワールド座標系の単位(ミリメートル等)で与えます. Dim hdst As FHANDLE = FHANDLE.Zero ' 歪み補正画像. Try ' キャリブレーションオブジェクトの生成. hcalib = api.fnFIE_calib_open2(type, n, unit, offset, status) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 特徴点の検出とハンドルへの追加(detectとaddをまとめた関数). fnFIE_calib_add_data2(hcalib) ' カメラ内部パラメータの算出. Dim pcamera As F_CAMERA_PARAM ' カメラ内部パラメータ構造体. #If ONESHOT Then ' 1視野のみの画像を用いた特殊なキャリブレーション. pcamera = fnFIE_calib_calc_1shot(hcalib) #Else ' 通常のキャリブレーション. pcamera = fnFIE_calib_calc_intrinsic_parameters(hcalib) #End If ' 歪み補正画像の生成. hdst = CreateUndistortImage(pcamera) ' 画像の保存. status = api.fnFIE_save_bmp(ResultDir & "/fnFIE_UndistortImage.bmp", hdst) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) Finally hcalib.Dispose() hdst.Dispose() End Try End Sub ''' <summary> ''' 歪み補正画像の生成. ''' </summary> ''' <param name="pcamera"></param> Public Function CreateUndistortImage(pcamera As F_CAMERA_PARAM) As FHANDLE Dim status As Integer = CInt(f_err.F_ERR_NONE) Dim hsrc As FHANDLE = FHANDLE.Zero ' 歪み補正対象画像. Dim hdst As FHANDLE = FHANDLE.Zero ' 歪み補正画像. Dim hmap As FHANDLE = FHANDLE.Zero ' 歪み補正マップ. Dim scale As Double = 0 ' 歪み補正マップのスケール. Dim offset As DPNT_T = DPNT_T.init(0, 0) ' 歪み補正マップのオフセット. Dim fit_width As Integer = 0 ' 歪み補正マップの幅(歪み補正画像の幅). Dim fit_height As Integer = 0 ' 歪み補正マップの高さ(歪み補正画像の高さ). Try ' 歪み補正対象画像のロード. status = api.fnFIE_load_img_file(TestImageDir & "/testdata/calib_target.bmp", hsrc, f_color_img_type.F_COLOR_IMG_TYPE_UC8) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 歪み補正マップのパラメータ算出. #If MAPSCALE Then #If PARAMSCALE Then ' パラメータ算出1. fnFIE_calib_undistort_fit_scale(pcamera, hsrc, scale, offset, fit_width, fit_height) #Else ' パラメータ算出2. fnFIE_calib_undistort_fit_rect(pcamera, hsrc, scale, offset, fit_width, fit_height) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) #End If ' 歪み補正マップの生成. hmap = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), 2, fit_width, fit_height) fnFIE_calib_undistort_image_map_scale(hmap, pcamera, scale, offset) #Else fit_width = api.fnFIE_img_get_width(hsrc) fit_height = api.fnFIE_img_get_height(hsrc) hmap = api.fnFIE_img_root_alloc(CInt(f_imgtype.F_IMG_DOUBLE), 2, fit_width, fit_height) fnFIE_calib_undistort_image_map(hmap, pcamera) #End If ' 歪み補正画像の生成. Dim type As Integer = api.fnFIE_img_get_type(hsrc) Dim ch As Integer = api.fnFIE_img_get_channels(hsrc) hdst = api.fnFIE_img_root_alloc(type, ch, fit_width, fit_height) status = api.fnFIE_geotrans_warpping(hsrc, hmap, hdst, FHANDLE.Zero, False, f_sampling_mode.F_SAMPLING_BILINEAR) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) Return hdst Finally hsrc.Dispose() hmap.Dispose() End Try End Function End Class |