32 #include <opencv2/opencv.hpp>
36 #include "Calibration/Calibration.h"
37 #include "Calibration/StereoCalibration.h"
38 #include "Image/ByteImage.h"
39 #include "Image/ImageProcessor.h"
40 #include "Image/IplImageAdaptor.h"
49 cameraImageProviderName =
50 getProperty<std::string>(
"CameraImageProviderAdapterName").getValue();
53 kinectImageProviderName =
54 getProperty<std::string>(
"KinectImageProviderAdapterName").getValue();
57 const int cornersPerRow = getProperty<int>(
"NumberOfRows").getValue() - 1;
58 const int cornersPerColumn = getProperty<int>(
"NumberOfColumns").getValue() - 1;
59 const double squareSize = getProperty<double>(
"PatternSquareSize").getValue();
61 waitingIntervalBetweenImages = getProperty<int>(
"WaitingIntervalBetweenImages").getValue();
62 m_sCameraParameterFileName = getProperty<std::string>(
"OutputFileName").getValue();
63 desiredNumberOfImages = getProperty<int>(
"NumberOfImages").getValue();
64 numberOfCapturedImages = 0;
68 ARMARX_INFO <<
"Calibration pattern with " << cornersPerColumn + 1 <<
" x "
69 << cornersPerRow + 1 <<
" squares of size " << squareSize;
70 etalonParams[0] = double(cornersPerColumn + 1);
71 etalonParams[1] = double(cornersPerRow + 1);
72 etalonParams[2] = squareSize;
74 m_pCalibFilter->
SetFrames(desiredNumberOfImages);
86 cameraImageProviderPrx = getProxy<ImageProviderInterfacePrx>(cameraImageProviderName);
87 listenerPrx = getTopic<KinectAndCameraCalibrationListenerPrx>(
"KinectAndCameraCalibration");
89 cameraImages =
new CByteImage*[2];
95 kinectImageProviderPrx = getProxy<ImageProviderInterfacePrx>(kinectImageProviderName);
96 kinectImages =
new CByteImage*[kinectImageProviderPrx->getNumberImages()];
98 for (
int i = 0; i < kinectImageProviderPrx->getNumberImages(); i++)
101 kinectImageProviderPrx->getImageFormat().type);
104 startingTime = IceUtil::Time::now();
105 timeOfLastCapture = IceUtil::Time::now();
109 result.result =
false;
117 result.result =
false;
120 delete cameraImages[0];
121 delete cameraImages[1];
122 delete[] cameraImages;
123 delete m_pCalibFilter;
131 long timeSinceStart = (IceUtil::Time::now() - startingTime).toMilliSeconds();
133 if (timeSinceStart < 10000)
135 ARMARX_VERBOSE <<
"Time until start of capture: " << timeSinceStart - 10000
142 armarx::MetaInfoSizeBasePtr info;
143 int nNumberCameraImages =
getImages(cameraImageProviderName, cameraImages, info);
146 armarx::MetaInfoSizeBasePtr info2;
147 int nNumberKinectImages =
getImages(kinectImageProviderName, kinectImages, info2);
150 if (nNumberCameraImages > 0 && nNumberKinectImages > 0)
152 if ((IceUtil::Time::now() - timeOfLastCapture).toMilliSeconds() >
153 waitingIntervalBetweenImages)
155 ARMARX_INFO <<
"Capturing image " << numberOfCapturedImages + 1 <<
" of "
156 << desiredNumberOfImages;
157 IplImage* ppIplImages[2] = {IplImageAdaptor::Adapt(cameraImages[0]),
158 IplImageAdaptor::Adapt(kinectImages[0])};
163 numberOfCapturedImages++;
164 timeOfLastCapture = IceUtil::Time::now();
166 m_pCalibFilter->
Push();
168 if (numberOfCapturedImages == desiredNumberOfImages)
175 ARMARX_INFO <<
"Saving camera calibration to file "
176 << m_sCameraParameterFileName;
178 m_sCameraParameterFileName.c_str());
179 CStereoCalibration calibration;
180 calibration.LoadCameraParameters(
181 m_sCameraParameterFileName.c_str());
182 CCalibration cRight = *calibration.GetRightCalibration();
183 Vec3d translation = cRight.GetCameraParameters().translation;
184 ARMARX_INFO <<
"RightCalibration traslation; " << translation.x
185 <<
" " << translation.y <<
" " << translation.z;
186 Mat3d rotation = cRight.GetCameraParameters().rotation;
187 ARMARX_INFO <<
"RightCalibration rotation; " << rotation.r1
188 <<
" " << rotation.r2 <<
" " << rotation.r3 <<
" \n"
189 << rotation.r4 <<
" " << rotation.r5 <<
" "
190 << rotation.r6 <<
" \n"
191 << rotation.r7 <<
" " << rotation.r8 <<
" "
192 << rotation.r9 <<
" \n";
195 CCalibration cLeft = *calibration.GetLeftCalibration();
196 Vec3d translationLeft = cLeft.GetCameraParameters().translation;
198 << translationLeft.x <<
" " << translationLeft.y
199 <<
" " << translationLeft.z;
200 Mat3d rotationLeft = cLeft.GetCameraParameters().rotation;
201 ARMARX_INFO <<
"LeftCalibration rotation; " << rotationLeft.r1
202 <<
" " << rotationLeft.r2 <<
" " << rotationLeft.r3
204 << rotationLeft.r4 <<
" " << rotationLeft.r5 <<
" "
205 << rotationLeft.r6 <<
" \n"
206 << rotationLeft.r7 <<
" " << rotationLeft.r8 <<
" "
207 << rotationLeft.r9 <<
" \n";
210 result.result = finished;
211 result.transformation =
215 listenerPrx->reportCalibrationFinished(result.result);
235 startingTime = IceUtil::Time::now();
243 startingTime = IceUtil::Time::now();
252 numberOfCapturedImages = 0;
253 delete m_pCalibFilter;
256 m_pCalibFilter->
SetFrames(desiredNumberOfImages);
260 result.result =
false;
262 startingTime = IceUtil::Time::now();
265 KinectPoseCalibration