34 #include <Calibration/Calibration.h>
35 #include <Calibration/StereoCalibration.h>
36 #include <Image/ByteImage.h>
37 #include <Math/Math2d.h>
38 #include <Math/Math3d.h>
39 #include <Structs/Structs.h>
44 static std::map<std::string, visionx::ImageType> nameToTypeMap;
47 if (nameToTypeMap.empty())
49 nameToTypeMap[
"bayer-pattern"] = visionx::eBayerPattern;
50 nameToTypeMap[
"gray-scale"] = visionx::eGrayScale;
51 nameToTypeMap[
"rgb"] = visionx::eRgb;
52 nameToTypeMap[
"float-1-channel"] = visionx::eFloat1Channel;
53 nameToTypeMap[
"float-3-channels"] = visionx::eFloat3Channels;
56 std::string lowerCaseTypeName = imageTypeName;
58 lowerCaseTypeName.begin(), lowerCaseTypeName.end(), lowerCaseTypeName.begin(), ::tolower);
60 std::map<std::string, visionx::ImageType>::iterator nameToTypeIter =
61 nameToTypeMap.find(lowerCaseTypeName);
63 if (nameToTypeIter == nameToTypeMap.end())
68 return nameToTypeIter->second;
76 case visionx::eBayerPattern:
77 return "bayer-pattern";
79 case visionx::eGrayScale:
85 case visionx::eFloat1Channel:
86 return "float-1-channel";
88 case visionx::eFloat3Channels:
89 return "float-3-channel";
99 static std::map<visionx::ImageType, CByteImage::ImageType> visionxTypeToIvtTypeMap;
102 if (visionxTypeToIvtTypeMap.empty())
104 visionxTypeToIvtTypeMap[visionx::eRgb] = CByteImage::eRGB24;
105 visionxTypeToIvtTypeMap[visionx::eGrayScale] = CByteImage::eGrayScale;
106 visionxTypeToIvtTypeMap[visionx::eBayerPattern] = CByteImage::eGrayScale;
109 std::map<visionx::ImageType, CByteImage::ImageType>::iterator visionxTypeToIvtTypeIter =
110 visionxTypeToIvtTypeMap.find(visionxImageType);
112 if (visionxTypeToIvtTypeIter == visionxTypeToIvtTypeMap.end())
118 return visionxTypeToIvtTypeIter->second;
121 ImageProcessor::BayerPatternType
124 switch (visionxBayerPatternType)
126 case visionx::eBayerPatternBg:
127 return ::ImageProcessor::eBayerBG;
129 case visionx::eBayerPatternGb:
130 return ::ImageProcessor::eBayerGB;
132 case visionx::eBayerPatternGr:
133 return ::ImageProcessor::eBayerGR;
135 case visionx::eBayerPatternRg:
136 return ::ImageProcessor::eBayerRG;
141 return ::ImageProcessor::eBayerRG;
144 CVideoCaptureInterface::VideoMode
149 switch (imageDimension.width)
152 return CVideoCaptureInterface::eNone;
155 return CVideoCaptureInterface::e320x240;
158 return CVideoCaptureInterface::e640x480;
161 return CVideoCaptureInterface::e800x600;
164 return CVideoCaptureInterface::e768x576;
167 return CVideoCaptureInterface::e1024x768;
170 return CVideoCaptureInterface::e1280x960;
173 return CVideoCaptureInterface::e1600x1200;
176 return CVideoCaptureInterface::eNone;
179 CVideoCaptureInterface::FrameRate
182 using FrameRateRange = std::pair<float, float>;
184 static std::map<FrameRateRange, CVideoCaptureInterface::FrameRate> frameRateMap;
186 using FrameRateMapIter = std::map<FrameRateRange, CVideoCaptureInterface::FrameRate>::iterator;
188 if (frameRateMap.empty())
190 frameRateMap[FrameRateRange(0.f, 1.875f + 1.875f / 2)] = CVideoCaptureInterface::e1_875fps;
191 frameRateMap[FrameRateRange(1.875f + 1.875f / 2, 3.75f + 1.875f)] =
192 CVideoCaptureInterface::e3_75fps;
193 frameRateMap[FrameRateRange(3.75f + 1.875f, 7.5f + 3.75f)] =
194 CVideoCaptureInterface::e7_5fps;
195 frameRateMap[FrameRateRange(7.5f + 3.75f, 15.f + 7.5f)] = CVideoCaptureInterface::e15fps;
196 frameRateMap[FrameRateRange(15.f + 7.5f, 30.f + 15.f)] = CVideoCaptureInterface::e30fps;
197 frameRateMap[FrameRateRange(30.f + 15.f, 1024.f)] = CVideoCaptureInterface::e60fps;
200 FrameRateMapIter iter = frameRateMap.begin();
202 while (iter != frameRateMap.end())
204 if (frameRate >= iter->first.first && frameRate < iter->first.second)
219 vec2d.x = (*pVec)[0];
220 vec2d.y = (*pVec)[1];
246 ivtMat3d.r1 = mat[0][0];
247 ivtMat3d.r2 = mat[0][1];
248 ivtMat3d.r3 = mat[0][2];
249 ivtMat3d.r4 = mat[1][0];
250 ivtMat3d.r5 = mat[1][1];
251 ivtMat3d.r6 = mat[1][2];
252 ivtMat3d.r7 = mat[2][0];
253 ivtMat3d.r8 = mat[2][1];
254 ivtMat3d.r9 = mat[2][2];
262 std::vector<float> vec(2);
272 std::vector<float> vec(3);
283 std::vector<std::vector<float>> mat(3);
284 std::vector<float> rowVec(3);
286 rowVec[0] = ivtMat3d.r1;
287 rowVec[1] = ivtMat3d.r2;
288 rowVec[2] = ivtMat3d.r3;
291 rowVec = std::vector<float>(3);
292 rowVec[0] = ivtMat3d.r4;
293 rowVec[1] = ivtMat3d.r5;
294 rowVec[2] = ivtMat3d.r6;
297 rowVec = std::vector<float>(3);
298 rowVec[0] = ivtMat3d.r7;
299 rowVec[1] = ivtMat3d.r8;
300 rowVec[2] = ivtMat3d.r9;
309 CStereoCalibration* ivtStereoCalibration =
new CStereoCalibration();
311 CCalibration ivtCalibrationLeft;
312 CCalibration ivtCalibrationRight;
314 const visionx::CameraParameters& cameraParamLeft =
315 stereoCalibration.calibrationLeft.cameraParam;
316 const visionx::CameraParameters& cameraParamRight =
317 stereoCalibration.calibrationRight.cameraParam;
319 Mat3d R =
convert(cameraParamLeft.rotation);
324 ivtCalibrationLeft.SetCameraParameters(cameraParamLeft.focalLength[0],
325 cameraParamLeft.focalLength[1],
326 cameraParamLeft.principalPoint[0],
327 cameraParamLeft.principalPoint[1],
328 cameraParamLeft.distortion[0],
329 cameraParamLeft.distortion[1],
330 cameraParamLeft.distortion[2],
331 cameraParamLeft.distortion[3],
334 cameraParamLeft.width,
335 cameraParamLeft.height);
337 R =
convert(cameraParamRight.rotation);
338 t =
convert(cameraParamRight.translation);
343 ivtCalibrationRight.SetCameraParameters(cameraParamRight.focalLength[0],
344 cameraParamRight.focalLength[1],
345 cameraParamRight.principalPoint[0],
346 cameraParamRight.principalPoint[1],
347 cameraParamRight.distortion[0],
348 cameraParamRight.distortion[1],
349 cameraParamRight.distortion[2],
350 cameraParamRight.distortion[3],
353 cameraParamRight.width,
354 cameraParamRight.height);
356 ivtStereoCalibration->SetSingleCalibrations(ivtCalibrationLeft, ivtCalibrationRight);
358 ivtStereoCalibration->rectificationHomographyLeft =
359 convert(stereoCalibration.rectificationHomographyLeft);
360 ivtStereoCalibration->rectificationHomographyRight =
361 convert(stereoCalibration.rectificationHomographyRight);
363 return ivtStereoCalibration;
369 CCalibration* ivtCalibration =
new CCalibration();
371 const visionx::CameraParameters& cameraParam = calibration.cameraParam;
373 Mat3d R =
convert(cameraParam.rotation);
376 ivtCalibration->SetCameraParameters(cameraParam.focalLength[0],
377 cameraParam.focalLength[1],
378 cameraParam.principalPoint[0],
379 cameraParam.principalPoint[1],
380 cameraParam.distortion[0],
381 cameraParam.distortion[1],
382 cameraParam.distortion[2],
383 cameraParam.distortion[3],
389 return ivtCalibration;
392 visionx::StereoCalibration
395 visionx::StereoCalibration stereoCalibration;
397 const CCalibration::CCameraParameters& ivtCalibParamLeft =
398 ivtStereoCalibration.GetLeftCalibration()->GetCameraParameters();
399 const CCalibration::CCameraParameters& ivtCalibParamRight =
400 ivtStereoCalibration.GetRightCalibration()->GetCameraParameters();
402 visionx::CameraParameters& cameraParamLeft = stereoCalibration.calibrationLeft.cameraParam;
403 visionx::CameraParameters& cameraParamRight = stereoCalibration.calibrationRight.cameraParam;
406 cameraParamLeft.width = ivtCalibParamLeft.width;
407 cameraParamLeft.height = ivtCalibParamLeft.height;
409 cameraParamLeft.principalPoint =
convert(ivtCalibParamLeft.principalPoint);
410 cameraParamLeft.focalLength =
convert(ivtCalibParamLeft.focalLength);
411 cameraParamLeft.rotation =
convert(ivtCalibParamLeft.rotation);
412 cameraParamLeft.translation =
convert(ivtCalibParamLeft.translation);
414 cameraParamLeft.distortion.push_back(ivtCalibParamLeft.distortion[0]);
415 cameraParamLeft.distortion.push_back(ivtCalibParamLeft.distortion[1]);
416 cameraParamLeft.distortion.push_back(ivtCalibParamLeft.distortion[2]);
417 cameraParamLeft.distortion.push_back(ivtCalibParamLeft.distortion[3]);
420 cameraParamRight.width = ivtCalibParamRight.width;
421 cameraParamRight.height = ivtCalibParamRight.height;
423 cameraParamRight.principalPoint =
convert(ivtCalibParamRight.principalPoint);
424 cameraParamRight.focalLength =
convert(ivtCalibParamRight.focalLength);
425 cameraParamRight.rotation =
convert(ivtCalibParamRight.rotation);
426 cameraParamRight.translation =
convert(ivtCalibParamRight.translation);
428 cameraParamRight.distortion.push_back(ivtCalibParamRight.distortion[0]);
429 cameraParamRight.distortion.push_back(ivtCalibParamRight.distortion[1]);
430 cameraParamRight.distortion.push_back(ivtCalibParamRight.distortion[2]);
431 cameraParamRight.distortion.push_back(ivtCalibParamRight.distortion[3]);
433 stereoCalibration.rectificationHomographyLeft =
434 convert(ivtStereoCalibration.rectificationHomographyLeft);
435 stereoCalibration.rectificationHomographyRight =
436 convert(ivtStereoCalibration.rectificationHomographyRight);
438 return stereoCalibration;
441 visionx::MonocularCalibration
444 visionx::MonocularCalibration calibration;
445 const CCalibration::CCameraParameters& ivtCalibParam = ivtCalibration.GetCameraParameters();
447 calibration.cameraParam.width = ivtCalibParam.width;
448 calibration.cameraParam.height = ivtCalibParam.height;
450 calibration.cameraParam.principalPoint =
convert(ivtCalibParam.principalPoint);
451 calibration.cameraParam.focalLength =
convert(ivtCalibParam.focalLength);
452 calibration.cameraParam.rotation =
convert(ivtCalibParam.rotation);
453 calibration.cameraParam.translation =
convert(ivtCalibParam.translation);
455 calibration.cameraParam.distortion.push_back(ivtCalibParam.distortion[0]);
456 calibration.cameraParam.distortion.push_back(ivtCalibParam.distortion[1]);
457 calibration.cameraParam.distortion.push_back(ivtCalibParam.distortion[2]);
458 calibration.cameraParam.distortion.push_back(ivtCalibParam.distortion[3]);
463 visionx::types::Region
466 visionx::types::Region region;
469 region.nPixels = ivtRegion.nPixels;
471 region.minX = ivtRegion.min_x;
472 region.maxX = ivtRegion.max_x;
473 region.minY = ivtRegion.min_y;
474 region.maxY = ivtRegion.max_y;
476 region.ratio = ivtRegion.ratio;
489 ivtRegion.nPixels = region.nPixels;
491 ivtRegion.min_x = region.minX;
492 ivtRegion.max_x = region.maxX;
493 ivtRegion.min_y = region.minY;
494 ivtRegion.max_y = region.maxY;
496 ivtRegion.ratio = region.ratio;
503 visionx::types::ObjectColor
506 return (visionx::types::ObjectColor)ivtObjectColor;
512 return (ObjectColor)objectColor;
515 visionx::types::ObjectType
518 return (visionx::types::ObjectType)ivtObjectType;
524 return (ObjectType)objectType;
527 visionx::types::Transformation3d
530 visionx::types::Transformation3d transformation3d;
535 return transformation3d;
541 Transformation3d ivtTransformation3d;
546 return ivtTransformation3d;
552 Object3DEntry ivtObject3DEntry;
554 ivtObject3DEntry.region_left =
convert(object3DEntry.regionLeft);
555 ivtObject3DEntry.region_right =
convert(object3DEntry.regionRight);
556 ivtObject3DEntry.region_id_left = object3DEntry.regionIdLeft;
557 ivtObject3DEntry.region_id_right = object3DEntry.regionIdRight;
558 ivtObject3DEntry.type =
convert(object3DEntry.type);
559 ivtObject3DEntry.color =
convert(object3DEntry.color);
560 ivtObject3DEntry.pose =
convert(object3DEntry.pose);
561 ivtObject3DEntry.world_point =
convert(object3DEntry.worldPoint);
562 ivtObject3DEntry.orientation =
convert(object3DEntry.orientation);
563 ivtObject3DEntry.sName =
"";
564 ivtObject3DEntry.sName += object3DEntry.name;
565 ivtObject3DEntry.sOivFilePath =
"";
567 ivtObject3DEntry.data =
nullptr;
568 ivtObject3DEntry.class_id = object3DEntry.classId;
569 ivtObject3DEntry.quality = object3DEntry.quality;
570 ivtObject3DEntry.quality2 = object3DEntry.quality2;
572 return ivtObject3DEntry;
575 visionx::types::Object3DEntry
578 visionx::types::Object3DEntry object3DEntry;
580 object3DEntry.regionLeft =
convert(ivtObject3DEntry.region_left);
581 object3DEntry.regionRight =
convert(ivtObject3DEntry.region_right);
582 object3DEntry.regionIdLeft = ivtObject3DEntry.region_id_left;
583 object3DEntry.regionIdRight = ivtObject3DEntry.region_id_right;
584 object3DEntry.type =
convert(ivtObject3DEntry.type);
585 object3DEntry.color =
convert(ivtObject3DEntry.color);
586 object3DEntry.pose =
convert(ivtObject3DEntry.pose);
587 object3DEntry.worldPoint =
convert(ivtObject3DEntry.world_point);
588 object3DEntry.orientation =
convert(ivtObject3DEntry.orientation);
589 object3DEntry.name =
"";
590 object3DEntry.name += ivtObject3DEntry.sName;
593 object3DEntry.classId = ivtObject3DEntry.class_id;
594 object3DEntry.quality = ivtObject3DEntry.quality;
595 object3DEntry.quality2 = ivtObject3DEntry.quality2;
597 return object3DEntry;
603 Object3DList ivtObject3DList(object3DList.size());
605 visionx::types::Object3DList::const_iterator iter = object3DList.begin();
609 while (iter != object3DList.end())
611 ivtObject3DList[i] =
convert(*iter);
616 return ivtObject3DList;
619 visionx::types::Object3DList
622 visionx::types::Object3DList object3DList(ivtObject3DList.size());
624 Object3DList::const_iterator iter = ivtObject3DList.begin();
628 while (iter != ivtObject3DList.end())
630 object3DList[i] =
convert(*iter);
657 Eigen::Vector3f result(
v.x,
v.y,
v.z);
664 visionx::types::Vec res;
665 res.resize(
v.rows());
666 for (
int i = 0; i <
v.rows(); i++)
677 res.resize(
v.size());
678 for (
int i = 0; i <
v.size(); i++)
688 visionx::types::Mat res;
689 res.resize(m.cols());
690 for (
int i = 0; i < m.cols(); i++)
692 visionx::types::Vec
v;
693 Eigen::VectorXf vec = m.block(0, i, m.rows(), 1);
705 return Eigen::MatrixXf();
707 const size_t rows = m[0].size();
708 const size_t cols = m.size();
710 Eigen::MatrixXf res(rows, cols);
712 for (
size_t col = 0; col < cols; ++col)
714 visionx::types::Vec
v = m[col];