点列を歪んだ座標へ変換
Namespace: fvalgcliAssembly: fvalgcli (in fvalgcli.dll) Version: 3.1.0.0 (3.1.0.11)
Syntax
C# |
---|
public static int fnFIE_calib_distort_points( F_CAMERA_PARAM camera, DPNT_T_PTR src_points, DPNT_T_PTR dst_points, int num_points ) |
Visual Basic |
---|
Public Shared Function fnFIE_calib_distort_points ( camera As F_CAMERA_PARAM, src_points As DPNT_T_PTR, dst_points As DPNT_T_PTR, num_points As Integer ) As Integer |
Parameters
- camera
- Type: fvalgcli..::..F_CAMERA_PARAM
カメラ内部パラメータ構造体
- src_points
- Type: fvalgcli..::..DPNT_T_PTR
理想画像座標系における点の配列
- dst_points
- Type: fvalgcli..::..DPNT_T_PTR
カメラ画像座標系における点の配列
- num_points
- Type: System..::..Int32
src_points, dst_points の点数
Return Value
Type: Int32以下のエラーコードを返します。
エラーコード:
f_err | 内容 |
---|---|
F_ERR_NONE | 正常終了 |
F_ERR_NOMEMORY | メモリ不足エラー |
F_ERR_INVALID_IMAGE | 画像オブジェクトの異常 |
F_ERR_INVALID_PARAM | パラメータ異常 |
F_ERR_CALC_IMPOSSIBLE | カメラ内部パラメータの逆行列が計算不能 |
F_ERR_NO_LICENCE | ライセンスエラー、または未初期化エラー |
Remarks
Examples
C# | Copy |
---|---|
// $Revision: 1.1 $ using System; using System.Collections.Generic; using System.Text; using fvalgcli; namespace TC { public partial class FIE { /// <summary> /// 点列を歪んだ座標へ変換. /// </summary> [FvPluginExecute] public void fnFIE_calib_distort_points() { int status = (int)f_err.F_ERR_NONE; // 内部パラメータ. F_CAMERA_PARAM camera = F_CAMERA_PARAM.init(916.396023110107, 910.774803134449, 1.12644931840078, 331.36766487411, 227.057842377842, -0.215845914024188, 0.0707690551914399); DPNT_T_PTR src_points = DPNT_T_PTR.Zero; // 理想画像座標系における座標列. DPNT_T_PTR dst_points = DPNT_T_PTR.Zero; // カメラ座標系における座標列. int num_points = 63; DPNT_T_PTR ans_dst_points = DPNT_T_PTR.Zero; // 正解座標. bool check = true; // エラー確認. try { // 理想画像座標系における座標列を取得. src_points = fnFIE_calib_undistort_points(); // カメラ座標系に変換する. dst_points = DPNT_T_PTR.alloc(num_points); status = api.fnFIE_calib_distort_points(camera, src_points, dst_points, num_points); Assert.IsTrue(status == (int)f_err.F_ERR_NONE, "エラーが発生しました。({0})", (f_err)status); // 正解座標の設定. ans_dst_points = DPNT_T_PTR.alloc(num_points); ans_dst_points[0] = DPNT_T.init(213.24395404796, 190.311292024222); ans_dst_points[1] = DPNT_T.init(229.335021466696, 181.334680391695); ans_dst_points[2] = DPNT_T.init(244.933501337445, 172.470122515202); ans_dst_points[3] = DPNT_T.init(260.226878214761, 163.715363509235); ans_dst_points[4] = DPNT_T.init(275.161632518758, 155.278157403805); ans_dst_points[5] = DPNT_T.init(289.806566754944, 147.235711017003); ans_dst_points[6] = DPNT_T.init(304.082323285824, 139.201336084572); ans_dst_points[7] = DPNT_T.init(318.020154796773, 131.208977434617); ans_dst_points[8] = DPNT_T.init(226.94672323513, 200.212244723243); ans_dst_points[9] = DPNT_T.init(243.120590217004, 191.108448046774); ans_dst_points[10] = DPNT_T.init(258.737641792819, 182.166086457894); ans_dst_points[11] = DPNT_T.init(274.019507906095, 173.0793282196); ans_dst_points[12] = DPNT_T.init(289.039969361128, 164.304619942571); ans_dst_points[13] = DPNT_T.init(303.703260862565, 156.182291677402); ans_dst_points[14] = DPNT_T.init(317.968662175694, 147.924325479669); ans_dst_points[15] = DPNT_T.init(331.911979607955, 139.74970369127); ans_dst_points[16] = DPNT_T.init(241.020279403946, 210.375649054809); ans_dst_points[17] = DPNT_T.init(257.205715368625, 201.036173757288); ans_dst_points[18] = DPNT_T.init(272.866778882389, 192.041340231168); ans_dst_points[19] = DPNT_T.init(288.201578792868, 182.851334317472); ans_dst_points[20] = DPNT_T.init(303.206389100302, 173.708309747723); ans_dst_points[21] = DPNT_T.init(317.863360743057, 165.21563674231); ans_dst_points[22] = DPNT_T.init(332.127111289358, 156.821469251458); ans_dst_points[23] = DPNT_T.init(346.048778126886, 148.515514486676); ans_dst_points[24] = DPNT_T.init(255.440662431599, 220.76941669048); ans_dst_points[25] = DPNT_T.init(271.640321442673, 211.16675896514); ans_dst_points[26] = DPNT_T.init(287.346339419706, 202.063943578895); ans_dst_points[27] = DPNT_T.init(302.678054082353, 192.768205671965); ans_dst_points[28] = DPNT_T.init(317.674780620987, 183.443418956804); ans_dst_points[29] = DPNT_T.init(332.332549573555, 174.556714651622); ans_dst_points[30] = DPNT_T.init(346.592296356343, 165.986147086254); ans_dst_points[31] = DPNT_T.init(360.473933665674, 157.514395749875); ans_dst_points[32] = DPNT_T.init(270.242355959698, 231.433365737018); ans_dst_points[33] = DPNT_T.init(286.483225663192, 221.521709645002); ans_dst_points[34] = DPNT_T.init(302.188130790179, 212.24167581418); ans_dst_points[35] = DPNT_T.init(317.505990815912, 202.875387342348); ans_dst_points[36] = DPNT_T.init(332.516072797937, 193.424331233975); ans_dst_points[37] = DPNT_T.init(347.167709779954, 184.236878741684); ans_dst_points[38] = DPNT_T.init(361.375960978495, 175.414903728467); ans_dst_points[39] = DPNT_T.init(375.245005268494, 166.725379041244); ans_dst_points[40] = DPNT_T.init(285.470773728561, 242.446260562339); ans_dst_points[41] = DPNT_T.init(301.755356275743, 232.13513740684); ans_dst_points[42] = DPNT_T.init(317.447602300534, 222.616743816637); ans_dst_points[43] = DPNT_T.init(332.750793277736, 213.183774736544); ans_dst_points[44] = DPNT_T.init(347.728840918461, 203.612355406336); ans_dst_points[45] = DPNT_T.init(362.332264894307, 194.130422161767); ans_dst_points[46] = DPNT_T.init(376.521007422223, 185.087872041759); ans_dst_points[47] = DPNT_T.init(390.334444784114, 176.185902842029); ans_dst_points[48] = DPNT_T.init(301.119758764442, 253.828136581168); ans_dst_points[49] = DPNT_T.init(317.40270681525, 243.122569476905); ans_dst_points[50] = DPNT_T.init(333.113328801149, 233.235753561367); ans_dst_points[51] = DPNT_T.init(348.379295929693, 223.597391964778); ans_dst_points[52] = DPNT_T.init(363.347388021193, 213.830849301134); ans_dst_points[53] = DPNT_T.init(377.89792724626, 204.187968291296); ans_dst_points[54] = DPNT_T.init(392.050623693916, 194.996268034167); ans_dst_points[55] = DPNT_T.init(405.792517727835, 185.827085605083); ans_dst_points[56] = DPNT_T.init(317.250040807483, 265.602212913667); ans_dst_points[57] = DPNT_T.init(333.526099659099, 254.528747362569); ans_dst_points[58] = DPNT_T.init(349.198988635507, 244.222931491623); ans_dst_points[59] = DPNT_T.init(364.474079951, 234.264898868493); ans_dst_points[60] = DPNT_T.init(379.403799492724, 224.310359435497); ans_dst_points[61] = DPNT_T.init(393.855953440183, 214.568709972276); ans_dst_points[62] = DPNT_T.init(407.936151999305, 205.081373693009); for(int i = 0; i < num_points; i++) { if(!compare(dst_points[i].x, ans_dst_points[i].x, 1e-1)) check = false; if(!compare(dst_points[i].y, ans_dst_points[i].y, 1e-1)) check = false; } // 比較. ConsoleOut.WriteFunctionName(":\t"); Console.Write(" ..."); ConsoleOut.IsTrue(check); Console.Write("\n"); } finally { src_points.Dispose(); dst_points.Dispose(); ans_dst_points.Dispose(); } } } } |
Visual Basic | Copy |
---|---|
' $Revision: 1.1 $ Imports System.Collections.Generic Imports System.Text Imports fvalgcli Public Partial Class FIE ''' <summary> ''' 点列を歪んだ座標へ変換. ''' </summary> <FvPluginExecute> _ Public Sub fnFIE_calib_distort_points() Dim status As Integer = CInt(f_err.F_ERR_NONE) ' 内部パラメータ. Dim camera As F_CAMERA_PARAM = F_CAMERA_PARAM.init(916.396023110107, 910.774803134449, 1.12644931840078, 331.36766487411, 227.057842377842, -0.215845914024188, _ 0.0707690551914399) Dim src_points As DPNT_T_PTR = DPNT_T_PTR.Zero ' 理想画像座標系における座標列. Dim dst_points As DPNT_T_PTR = DPNT_T_PTR.Zero ' カメラ座標系における座標列. Dim num_points As Integer = 63 Dim ans_dst_points As DPNT_T_PTR = DPNT_T_PTR.Zero ' 正解座標. Dim check As Boolean = True ' エラー確認. Try ' 理想画像座標系における座標列を取得. src_points = fnFIE_calib_undistort_points() ' カメラ座標系に変換する. dst_points = DPNT_T_PTR.alloc(num_points) status = api.fnFIE_calib_distort_points(camera, src_points, dst_points, num_points) Assert.IsTrue(status = CInt(f_err.F_ERR_NONE), "エラーが発生しました。({0})", CType(status, f_err)) ' 正解座標の設定. ans_dst_points = DPNT_T_PTR.alloc(num_points) ans_dst_points(0) = DPNT_T.init(213.24395404796, 190.311292024222) ans_dst_points(1) = DPNT_T.init(229.335021466696, 181.334680391695) ans_dst_points(2) = DPNT_T.init(244.933501337445, 172.470122515202) ans_dst_points(3) = DPNT_T.init(260.226878214761, 163.715363509235) ans_dst_points(4) = DPNT_T.init(275.161632518758, 155.278157403805) ans_dst_points(5) = DPNT_T.init(289.806566754944, 147.235711017003) ans_dst_points(6) = DPNT_T.init(304.082323285824, 139.201336084572) ans_dst_points(7) = DPNT_T.init(318.020154796773, 131.208977434617) ans_dst_points(8) = DPNT_T.init(226.94672323513, 200.212244723243) ans_dst_points(9) = DPNT_T.init(243.120590217004, 191.108448046774) ans_dst_points(10) = DPNT_T.init(258.737641792819, 182.166086457894) ans_dst_points(11) = DPNT_T.init(274.019507906095, 173.0793282196) ans_dst_points(12) = DPNT_T.init(289.039969361128, 164.304619942571) ans_dst_points(13) = DPNT_T.init(303.703260862565, 156.182291677402) ans_dst_points(14) = DPNT_T.init(317.968662175694, 147.924325479669) ans_dst_points(15) = DPNT_T.init(331.911979607955, 139.74970369127) ans_dst_points(16) = DPNT_T.init(241.020279403946, 210.375649054809) ans_dst_points(17) = DPNT_T.init(257.205715368625, 201.036173757288) ans_dst_points(18) = DPNT_T.init(272.866778882389, 192.041340231168) ans_dst_points(19) = DPNT_T.init(288.201578792868, 182.851334317472) ans_dst_points(20) = DPNT_T.init(303.206389100302, 173.708309747723) ans_dst_points(21) = DPNT_T.init(317.863360743057, 165.21563674231) ans_dst_points(22) = DPNT_T.init(332.127111289358, 156.821469251458) ans_dst_points(23) = DPNT_T.init(346.048778126886, 148.515514486676) ans_dst_points(24) = DPNT_T.init(255.440662431599, 220.76941669048) ans_dst_points(25) = DPNT_T.init(271.640321442673, 211.16675896514) ans_dst_points(26) = DPNT_T.init(287.346339419706, 202.063943578895) ans_dst_points(27) = DPNT_T.init(302.678054082353, 192.768205671965) ans_dst_points(28) = DPNT_T.init(317.674780620987, 183.443418956804) ans_dst_points(29) = DPNT_T.init(332.332549573555, 174.556714651622) ans_dst_points(30) = DPNT_T.init(346.592296356343, 165.986147086254) ans_dst_points(31) = DPNT_T.init(360.473933665674, 157.514395749875) ans_dst_points(32) = DPNT_T.init(270.242355959698, 231.433365737018) ans_dst_points(33) = DPNT_T.init(286.483225663192, 221.521709645002) ans_dst_points(34) = DPNT_T.init(302.188130790179, 212.24167581418) ans_dst_points(35) = DPNT_T.init(317.505990815912, 202.875387342348) ans_dst_points(36) = DPNT_T.init(332.516072797937, 193.424331233975) ans_dst_points(37) = DPNT_T.init(347.167709779954, 184.236878741684) ans_dst_points(38) = DPNT_T.init(361.375960978495, 175.414903728467) ans_dst_points(39) = DPNT_T.init(375.245005268494, 166.725379041244) ans_dst_points(40) = DPNT_T.init(285.470773728561, 242.446260562339) ans_dst_points(41) = DPNT_T.init(301.755356275743, 232.13513740684) ans_dst_points(42) = DPNT_T.init(317.447602300534, 222.616743816637) ans_dst_points(43) = DPNT_T.init(332.750793277736, 213.183774736544) ans_dst_points(44) = DPNT_T.init(347.728840918461, 203.612355406336) ans_dst_points(45) = DPNT_T.init(362.332264894307, 194.130422161767) ans_dst_points(46) = DPNT_T.init(376.521007422223, 185.087872041759) ans_dst_points(47) = DPNT_T.init(390.334444784114, 176.185902842029) ans_dst_points(48) = DPNT_T.init(301.119758764442, 253.828136581168) ans_dst_points(49) = DPNT_T.init(317.40270681525, 243.122569476905) ans_dst_points(50) = DPNT_T.init(333.113328801149, 233.235753561367) ans_dst_points(51) = DPNT_T.init(348.379295929693, 223.597391964778) ans_dst_points(52) = DPNT_T.init(363.347388021193, 213.830849301134) ans_dst_points(53) = DPNT_T.init(377.89792724626, 204.187968291296) ans_dst_points(54) = DPNT_T.init(392.050623693916, 194.996268034167) ans_dst_points(55) = DPNT_T.init(405.792517727835, 185.827085605083) ans_dst_points(56) = DPNT_T.init(317.250040807483, 265.602212913667) ans_dst_points(57) = DPNT_T.init(333.526099659099, 254.528747362569) ans_dst_points(58) = DPNT_T.init(349.198988635507, 244.222931491623) ans_dst_points(59) = DPNT_T.init(364.474079951, 234.264898868493) ans_dst_points(60) = DPNT_T.init(379.403799492724, 224.310359435497) ans_dst_points(61) = DPNT_T.init(393.855953440183, 214.568709972276) ans_dst_points(62) = DPNT_T.init(407.936151999305, 205.081373693009) For i As Integer = 0 To num_points - 1 If Not compare(dst_points(i).x, ans_dst_points(i).x, 0.1) Then check = False End If If Not compare(dst_points(i).y, ans_dst_points(i).y, 0.1) Then check = False End If Next ' 比較. ConsoleOut.WriteFunctionName(":" & vbTab) Console.Write(" ...") ConsoleOut.IsTrue(check) Console.Write(vbLf) Finally src_points.Dispose() dst_points.Dispose() ans_dst_points.Dispose() End Try End Sub End Class |