// Copyright (C) 2015 Marek Kowalski (M.Kowalski@ire.pw.edu.pl), Jacek Naruniec (J.Naruniec@ire.pw.edu.pl) // License: MIT Software License See LICENSE.txt for the full license. // If you use this software in your research, then please use the following citation: // Kowalski, M.; Naruniec, J.; Daniluk, M.: "LiveScan3D: A Fast and Inexpensive 3D Data // Acquisition System for Multiple Kinect v2 Sensors". in 3D Vision (3DV), 2015 International Conference on, Lyon, France, 2015 // @INPROCEEDINGS{Kowalski15, // author={Kowalski, M. and Naruniec, J. and Daniluk, M.}, // booktitle={3D Vision (3DV), 2015 International Conference on}, // title={LiveScan3D: A Fast and Inexpensive 3D Data Acquisition System for Multiple Kinect v2 Sensors}, // year={2015}, // } #pragma once #include "stdafx.h" #include "marker.h" #include "utils.h" vector RotatePoint(vector &point, std::vector> &R); vector InverseRotatePoint(vector &point, std::vector> &R); struct MarkerPose { int markerId; float R[3][3]; float t[3]; }; class Calibration { public: vector worldT; vector> worldR; int iUsedMarkerId; vector markerPoses; bool bCalibrated; Calibration(); ~Calibration(); bool Calibrate(RGB *pBuffer, Point3f *pCameraCoordinates, int cColorWidth, int cColorHeight); bool LoadCalibration(); void SaveCalibration(); private: IMarker *pDetector; int nSampleCounter; int nRequiredSamples; vector> marker3DSamples; void Procrustes(MarkerInfo &marker, vector &markerInWorld, vector &markerT, vector> &markerR); bool GetMarkerCorners3D(vector &marker3D, MarkerInfo &marker, Point3f *pCameraCoordinates, int cColorWidth, int cColorHeight); };