15 #ifndef niftkNiftyCalVideoCalibrationManager_h
16 #define niftkNiftyCalVideoCalibrationManager_h
18 #include "niftkNiftyCalExports.h"
19 #include <itkObject.h>
20 #include <itkObjectFactoryBase.h>
21 #include <mitkDataStorage.h>
22 #include <mitkDataNode.h>
23 #include <mitkPointSet.h>
24 #include <niftkPointUtilities.h>
25 #include <niftkIPoint2DDetector.h>
50 TEMPLATE_MATCHING_RINGS
78 void SetDataStorage(
const mitk::DataStorage::Pointer storage);
80 void SetLeftImageNode(mitk::DataNode::Pointer node);
81 mitk::DataNode::Pointer GetLeftImageNode()
const;
83 void SetRightImageNode(mitk::DataNode::Pointer node);
84 mitk::DataNode::Pointer GetRightImageNode()
const;
86 void SetTrackingTransformNode(mitk::DataNode::Pointer node);
87 itkGetMacro(TrackingTransformNode, mitk::DataNode::Pointer);
89 itkSetMacro(ReferenceTrackingTransformNode, mitk::DataNode::Pointer);
90 itkGetMacro(ReferenceTrackingTransformNode, mitk::DataNode::Pointer);
92 itkSetMacro(MinimumNumberOfSnapshotsForCalibrating,
unsigned int);
93 itkGetMacro(MinimumNumberOfSnapshotsForCalibrating,
unsigned int);
95 itkSetMacro(DoIterative,
bool);
96 itkGetMacro(DoIterative,
bool);
98 itkSetMacro(Do3DOptimisation,
bool);
99 itkGetMacro(Do3DOptimisation,
bool);
101 itkSetMacro(UpdateNodes,
bool);
102 itkGetMacro(UpdateNodes,
bool);
104 itkSetMacro(ScaleFactorX,
double);
105 itkGetMacro(ScaleFactorX,
double);
107 itkSetMacro(ScaleFactorY,
double);
108 itkGetMacro(ScaleFactorY,
double);
110 itkSetMacro(GridSizeX,
unsigned int);
111 itkGetMacro(GridSizeX,
unsigned int);
113 itkSetMacro(GridSizeY,
unsigned int);
114 itkGetMacro(GridSizeY,
unsigned int);
116 itkSetMacro(MinimumNumberOfPoints,
unsigned int);
117 itkGetMacro(MinimumNumberOfPoints,
unsigned int);
128 void SetModelFileName(
const std::string& fileName);
134 void SetReferenceDataFileNames(
const std::string& imageFileName,
139 void SetTemplateImageFileName(
const std::string& fileName);
142 void SetModelToTrackerFileName(
const std::string& fileName);
145 unsigned int GetNumberOfSnapshots()
const;
184 void UpdateCameraToWorldPosition();
190 void LoadCalibrationFromDirectory(
const std::string& dirName);
205 void ConvertImage(mitk::DataNode::Pointer imageNode, cv::Mat& outputImage);
213 bool ExtractPoints(
int imageIndex,
const cv::Mat&
image);
218 std::list<cv::Matx44d> ExtractCameraMatrices(
int imageIndex);
223 std::list<cv::Matx44d> ExtractTrackingMatrices(
bool useReference);
228 std::vector<cv::Mat> ConvertMatrices(
const std::list<cv::Matx44d>& list);
233 cv::Matx44d DoTsaiHandEye(
int imageIndex,
bool useReference);
238 cv::Matx44d DoShahidiHandEye(
int imageIndex,
bool useReference);
243 cv::Matx44d DoMaltiHandEye(
int imageIndex,
bool useReference);
248 cv::Matx44d DoFullExtrinsicHandEye(
int imageIndex,
bool useReference);
254 void DoFullExtrinsicHandEyeInStereo(cv::Matx44d& leftHandEye, cv::Matx44d& rightHandEye,
bool useReference);
259 void UpdateVisualisedPoints(cv::Matx44d&
transform);
265 const std::list<std::pair<std::shared_ptr<niftk::IPoint2DDetector>, cv::Mat> >&
271 void SavePoints(
const std::string& prefix,
const std::list<niftk::PointSet>&
points);
277 void SetIntrinsicsOnImage(
const cv::Mat& intrinsics,
278 const cv::Mat& distortion,
280 mitk::DataNode::Pointer
image);
291 void SetStereoExtrinsicsOnImage(
const cv::Mat& leftToRightRotationMatrix,
292 const cv::Mat& leftToRightTranslationVector,
294 mitk::DataNode::Pointer
image
301 void UpdateDisplayNodes();
303 typedef mitk::GenericProperty<itk::Matrix<float, 4, 4> >
MatrixProperty;
306 mitk::DataStorage::Pointer m_DataStorage;
307 mitk::DataNode::Pointer m_ImageNode[2];
308 mitk::DataNode::Pointer m_TrackingTransformNode;
309 mitk::DataNode::Pointer m_ReferenceTrackingTransformNode;
313 bool m_Do3DOptimisation;
314 unsigned int m_MinimumNumberOfSnapshotsForCalibrating;
316 double m_ScaleFactorX;
317 double m_ScaleFactorY;
318 unsigned int m_GridSizeX;
319 unsigned int m_GridSizeY;
328 unsigned int m_MinimumNumberOfPoints;
333 cv::Mat m_TmpImage[2];
336 cv::Size2i m_ImageSize;
337 std::pair< cv::Mat, niftk::PointSet> m_ReferenceDataForIterativeCalib;
338 cv::Mat m_TemplateImage;
339 cv::Matx44d m_ModelToTracker;
340 niftk::Model3D m_ModelPoints;
341 mitk::PointSet::Pointer m_ModelPointsToVisualise;
342 mitk::DataNode::Pointer m_ModelPointsToVisualiseDataNode;
343 std::list<niftk::PointSet> m_Points[2];
346 std::shared_ptr<niftk::IPoint2DDetector>,
348 > m_OriginalImages[2];
351 std::shared_ptr<niftk::IPoint2DDetector>,
353 > m_ImagesForWarping[2];
354 std::list<cv::Matx44d> m_TrackingMatrices;
355 std::vector<mitk::DataNode::Pointer> m_TrackingMatricesDataNodes;
356 std::list<cv::Matx44d> m_ReferenceTrackingMatrices;
359 cv::Mat m_Intrinsic[2];
360 cv::Mat m_Distortion[2];
361 std::vector<cv::Mat> m_Rvecs[2];
362 std::vector<cv::Mat> m_Tvecs[2];
363 cv::Mat m_EssentialMatrix;
364 cv::Mat m_FundamentalMatrix;
365 cv::Mat m_LeftToRightRotationMatrix;
366 cv::Mat m_LeftToRightTranslationVector;
367 std::vector<cv::Matx44d> m_HandEyeMatrices[2];
368 std::vector<cv::Matx44d> m_ReferenceHandEyeMatrices[2];
369 cv::Matx44d m_ModelToWorld;
static const std::string DefaultTagFamily
Definition: niftkNiftyCalVideoCalibrationManager.h:71
GLenum GLsizei GLenum GLenum const GLvoid * image
Definition: glew.h:4052
mitk::GenericProperty< itk::Matrix< float, 4, 4 > > MatrixProperty
Definition: niftkSurfaceReconstruction.h:39
static const HandEyeMethod DefaultHandEyeMethod
Definition: niftkNiftyCalVideoCalibrationManager.h:70
static const double DefaultScaleFactorY
Definition: niftkNiftyCalVideoCalibrationManager.h:66
static const CalibrationPatterns DefaultCalibrationPattern
Definition: niftkNiftyCalVideoCalibrationManager.h:69
Definition: niftkNiftyCalVideoCalibrationManager.h:46
GLuint GLenum GLenum transform
Definition: glew.h:12775
Definition: niftkNiftyCalVideoCalibrationManager.h:49
static const double DefaultScaleFactorX
Definition: niftkNiftyCalVideoCalibrationManager.h:65
Definition: niftkNiftyCalVideoCalibrationManager.h:47
Definition: niftkNiftyCalVideoCalibrationManager.h:56
Definition: niftkNiftyCalVideoCalibrationManager.h:58
static const bool DefaultDoIterative
Definition: niftkNiftyCalVideoCalibrationManager.h:62
GLuint GLdouble GLdouble GLint GLint const GLdouble * points
Definition: glew.h:3085
CalibrationPatterns
Definition: niftkNiftyCalVideoCalibrationManager.h:43
static const unsigned int DefaultMinimumNumberOfPoints
Definition: niftkNiftyCalVideoCalibrationManager.h:72
Manager class to perform video calibration as provided by NiftyCal.
Definition: niftkNiftyCalVideoCalibrationManager.h:39
HandEyeMethod
Definition: niftkNiftyCalVideoCalibrationManager.h:53
Definition: niftkNiftyCalVideoCalibrationManager.h:48
static const unsigned int DefaultGridSizeX
Definition: niftkNiftyCalVideoCalibrationManager.h:67
static const unsigned int DefaultGridSizeY
Definition: niftkNiftyCalVideoCalibrationManager.h:68
Definition: niftkNiftyCalVideoCalibrationManager.h:57
Definition: niftkExceptionObject.h:21
GLsizei const GLcharARB ** string
Definition: glew.h:5194
static const unsigned int DefaultMinimumNumberOfSnapshotsForCalibrating
Definition: niftkNiftyCalVideoCalibrationManager.h:64
static const bool DefaultUpdateNodes
Definition: niftkNiftyCalVideoCalibrationManager.h:73
static const bool DefaultDo3DOptimisation
Definition: niftkNiftyCalVideoCalibrationManager.h:63