7
7
8
8
#include < fstream>
9
9
#include < iostream>
10
- #include < algorithm>
11
10
12
11
namespace cv { namespace photometric_calib {
13
12
@@ -73,10 +72,10 @@ void VignetteCalib::displayImage(float *I, int w, int h, std::string name)
73
72
{
74
73
// isnanf? isnan?
75
74
if (cvIsNaN (I[i]) == 1 ) img.at <Vec3b>(i) = Vec3b (0 ,0 ,255 );
76
- else img.at <Vec3b>(i) = Vec3b (255 *(I[i]-vmin) / (vmax-vmin), 255 *(I[i]-vmin) / (vmax-vmin), 255 *(I[i]-vmin) / (vmax-vmin));
75
+ else img.at <Vec3b>(i) = Vec3b ((uchar)( 255 *(I[i]-vmin) / (vmax-vmin)),(uchar)( 255 *(I[i]-vmin) / (vmax-vmin)),(uchar)( 255 *(I[i]-vmin) / (vmax-vmin) ));
77
76
}
78
77
79
- printf ( " plane image values %f - %f! \n " , vmin, vmax) ;
78
+ std::cout<< " plane image values " << vmin << " - " << vmax << " ! " <<std::endl ;
80
79
imshow (name, img);
81
80
imwrite (" vignetteCalibResult/plane.png" , img);
82
81
}
@@ -91,7 +90,7 @@ void VignetteCalib::displayImageV(float *I, int w, int h, std::string name)
91
90
else
92
91
{
93
92
float c = 254 *I[i];
94
- img.at <Vec3b>(i) = Vec3b (c,c, c);
93
+ img.at <Vec3b>(i) = Vec3b ((uchar)c,(uchar)c,(uchar) c);
95
94
}
96
95
97
96
}
@@ -100,16 +99,16 @@ void VignetteCalib::displayImageV(float *I, int w, int h, std::string name)
100
99
101
100
void VignetteCalib::calib ()
102
101
{
103
- if (-1 == system (" rm -rf vignetteCalibResult" )) printf ( " could not delete old vignetteCalibResult folder!\n " ) ;
104
- if (-1 == system (" mkdir vignetteCalibResult" )) printf ( " could not delete old vignetteCalibResult folder! \n " ) ;
102
+ if (-1 == system (" rm -rf vignetteCalibResult" )) std::cout<< " could not delete old vignetteCalibResult folder!" << std::endl ;
103
+ if (-1 == system (" mkdir vignetteCalibResult" )) std::cout<< " could not delete old vignetteCalibResult folder" << std::endl ;
105
104
106
105
// affine map from plane cordinates to grid coordinates.
107
106
Matx33f K_p2idx = Matx33f::eye ();
108
107
Mat1f test = Mat1f::eye (3 ,3 );
109
108
K_p2idx (0 ,0 ) = _gridWidth / _facW;
110
109
K_p2idx (1 ,1 ) = _gridHeight / _facH;
111
- K_p2idx (0 ,2 ) = _gridWidth / 2 ;
112
- K_p2idx (1 ,2 ) = _gridHeight / 2 ;
110
+ K_p2idx (0 ,2 ) = _gridWidth / 2 . f ;
111
+ K_p2idx (1 ,2 ) = _gridHeight / 2 . f ;
113
112
Matx33f K_p2idx_inverse = K_p2idx.inv ();
114
113
115
114
int wO, hO;
@@ -125,7 +124,7 @@ void VignetteCalib::calib()
125
124
std::vector<float *> p2imgY;
126
125
127
126
float meanExposure = 0 .f ;
128
- for (size_t i=0 ;i<imageReader->getNumImages ();i+=_imageSkip)
127
+ for (unsigned long i=0 ;i<imageReader->getNumImages ();i+=_imageSkip)
129
128
meanExposure+=imageReader->getExposureDuration (i);
130
129
meanExposure = meanExposure/imageReader->getNumImages ();
131
130
@@ -181,7 +180,7 @@ void VignetteCalib::calib()
181
180
for (int x=0 ;x<_gridWidth;x++)
182
181
{
183
182
// Eigen::Vector3f pp = HK*Eigen::Vector3f(x,y,1);
184
- Vec3f pp = HK * Vec3f (x, y,1 );
183
+ Vec3f pp = HK * Vec3f (( float )x,( float ) y,1 );
185
184
plane2imgX[idx] = pp[0 ] / pp[2 ];
186
185
plane2imgY[idx] = pp[1 ] / pp[2 ];
187
186
idx++;
@@ -211,19 +210,19 @@ void VignetteCalib::calib()
211
210
// debug-plot.
212
211
Mat dbgImg (hI, wI, CV_8UC3);
213
212
for (int j=0 ;j<wI*hI;j++)
214
- dbgImg.at <Vec3b>(j) = Vec3b (imgRaw[j], imgRaw[j], imgRaw[j]);
213
+ dbgImg.at <Vec3b>(j) = Vec3b ((uchar) imgRaw[j], (uchar) imgRaw[j], (uchar) imgRaw[j]);
215
214
216
215
for (int x=0 ; x<=_gridWidth;x+=200 )
217
216
for (int y=0 ; y<=_gridHeight;y+=10 )
218
217
{
219
218
int idxS = (x<_gridWidth ? x : _gridWidth-1 )+(y<_gridHeight ? y : _gridHeight-1 )*_gridWidth;
220
219
int idxT = (x<_gridWidth ? x : _gridWidth-1 )+((y+10 )<_gridHeight ? (y+10 ) : _gridHeight-1 )*_gridWidth;
221
220
222
- int u_dS = plane2imgX[idxS]+0.5 ;
223
- int v_dS = plane2imgY[idxS]+0.5 ;
221
+ int u_dS = ( int ) lround (( plane2imgX[idxS]+0.5 )) ;
222
+ int v_dS = ( int ) lround (( plane2imgY[idxS]+0.5 )) ;
224
223
225
- int u_dT = plane2imgX[idxT]+0.5 ;
226
- int v_dT = plane2imgY[idxT]+0.5 ;
224
+ int u_dT = ( int ) lround (( plane2imgX[idxT]+0.5 )) ;
225
+ int v_dT = ( int ) lround (( plane2imgY[idxT]+0.5 )) ;
227
226
228
227
if (u_dS>=0 && v_dS >=0 && u_dS<wI && v_dS<hI && u_dT>=0 && v_dT >=0 && u_dT<wI && v_dT<hI)
229
228
line (dbgImg, Point (u_dS, v_dS), Point (u_dT, v_dT), Scalar (0 ,0 ,255 ), 10 , LINE_AA);
@@ -236,11 +235,11 @@ void VignetteCalib::calib()
236
235
int idxS = (x<_gridWidth ? x : _gridWidth-1 )+(y<_gridHeight ? y : _gridHeight-1 )*_gridWidth;
237
236
int idxT = ((x+10 )<_gridWidth ? (x+10 ) : _gridWidth-1 )+(y<_gridHeight ? y : _gridHeight-1 )*_gridWidth;
238
237
239
- int u_dS = plane2imgX[idxS]+0.5 ;
240
- int v_dS = plane2imgY[idxS]+0.5 ;
238
+ int u_dS = ( int ) lround ( plane2imgX[idxS]+0.5 ) ;
239
+ int v_dS = ( int ) lround ( plane2imgY[idxS]+0.5 ) ;
241
240
242
- int u_dT = plane2imgX[idxT]+0.5 ;
243
- int v_dT = plane2imgY[idxT]+0.5 ;
241
+ int u_dT = ( int ) lround ( plane2imgX[idxT]+0.5 ) ;
242
+ int v_dT = ( int ) lround ( plane2imgY[idxT]+0.5 ) ;
244
243
245
244
if (u_dS>=0 && v_dS >=0 && u_dS<wI && v_dS<hI && u_dT>=0 && v_dT >=0 && u_dT<wI && v_dT<hI)
246
245
line (dbgImg, Point (u_dS, v_dS), Point (u_dT, v_dT), Scalar (0 ,0 ,255 ), 10 , LINE_AA);
@@ -249,8 +248,8 @@ void VignetteCalib::calib()
249
248
for (int x=0 ; x<_gridWidth;x++)
250
249
for (int y=0 ; y<_gridHeight;y++)
251
250
{
252
- int u_d = plane2imgX[x+y*_gridWidth]+0.5 ;
253
- int v_d = plane2imgY[x+y*_gridWidth]+0.5 ;
251
+ int u_d = ( int ) lround ( plane2imgX[x+y*_gridWidth]+0.5 ) ;
252
+ int v_d = ( int ) lround ( plane2imgY[x+y*_gridWidth]+0.5 ) ;
254
253
255
254
if (!(u_d>1 && v_d >1 && u_d<wI-2 && v_d<hI-2 ))
256
255
{
@@ -264,7 +263,7 @@ void VignetteCalib::calib()
264
263
if (rand ()%40 ==0 )
265
264
{
266
265
char buf[1000 ];
267
- snprintf (buf,1000 ," vignetteCalibResult/img%lu .png" ,i);
266
+ snprintf (buf,1000 ," vignetteCalibResult/img%u .png" ,( unsigned ) i);
268
267
imwrite (buf, dbgImg);
269
268
}
270
269
@@ -279,7 +278,7 @@ void VignetteCalib::calib()
279
278
logFile.open (" vignetteCalibResult/log.txt" , std::ios::trunc | std::ios::out);
280
279
logFile.precision (15 );
281
280
282
- int n = imageReader->getNumImages ();
281
+ unsigned long n = imageReader->getNumImages ();
283
282
284
283
float * planeColor = new float [_gridWidth*_gridHeight];
285
284
float * planeColorFF = new float [_gridWidth*_gridHeight];
@@ -305,22 +304,22 @@ void VignetteCalib::calib()
305
304
E=0 ;R=0 ;
306
305
307
306
// for each plane pixel, it's optimum is at sum(CF)/sum(FF)
308
- for (int img=0 ;img< n;img++) // for all images
307
+ for (unsigned long img=0 ;img < n;img++) // for all images
309
308
{
310
309
float * plane2imgX = p2imgX[img];
311
310
float * plane2imgY = p2imgY[img];
312
311
float * image = images[img];
313
312
314
313
for (int pi=0 ;pi<_gridWidth*_gridHeight;pi++) // for all plane points
315
314
{
316
- if (cvIsNaN (plane2imgX[pi])) continue ;
315
+ if (cvIsNaN (plane2imgX[pi]) == 1 ) continue ;
317
316
318
317
// get vignetted color at that point, and add to build average.
319
318
float color = getInterpolatedElement (image, plane2imgX[pi], plane2imgY[pi], wI);
320
319
float fac = getInterpolatedElement (vignetteFactor, plane2imgX[pi], plane2imgY[pi], wI);
321
320
322
- if (cvIsNaN (fac)) continue ;
323
- if (cvIsNaN (color)) continue ;
321
+ if (cvIsNaN (fac) == 1 ) continue ;
322
+ if (cvIsNaN (color) == 1 ) continue ;
324
323
325
324
double residual = (double )((color - planeColor[pi]*fac)*(color - planeColor[pi]*fac));
326
325
if (abs (residual) > oth2)
@@ -334,7 +333,7 @@ void VignetteCalib::calib()
334
333
planeColorFF[pi] += fac*fac;
335
334
planeColorFC[pi] += color*fac;
336
335
337
- if (cvIsNaN (planeColor[pi])) continue ;
336
+ if (cvIsNaN (planeColor[pi]) == 1 ) continue ;
338
337
E += residual;
339
338
R ++;
340
339
}
@@ -349,31 +348,31 @@ void VignetteCalib::calib()
349
348
}
350
349
displayImage (planeColor, _gridWidth, _gridWidth, " Plane" );
351
350
352
- printf ( " %f residual terms => %f \n " , R, sqrtf (E/R)) ;
351
+ std::cout << R << " residual terms => " << sqrt (E/R) << std::endl ;
353
352
354
353
// ================================ optimize vignette =======================================
355
354
memset (vignetteFactorTT,0 ,hI*wI*sizeof (float ));
356
355
memset (vignetteFactorCT,0 ,hI*wI*sizeof (float ));
357
356
E=0 ;R=0 ;
358
357
359
- for (int img=0 ;img<n;img++) // for all images
358
+ for (unsigned long img=0 ;img<n;img++) // for all images
360
359
{
361
360
float * plane2imgX = p2imgX[img];
362
361
float * plane2imgY = p2imgY[img];
363
362
float * image = images[img];
364
363
365
364
for (int pi=0 ;pi<_gridWidth*_gridWidth;pi++) // for all plane points
366
365
{
367
- if (cvIsNaN (plane2imgX[pi])) continue ;
366
+ if (cvIsNaN (plane2imgX[pi]) == 1 ) continue ;
368
367
float x = plane2imgX[pi];
369
368
float y = plane2imgY[pi];
370
369
371
370
float colorImage = getInterpolatedElement (image, x, y, wI);
372
371
float fac = getInterpolatedElement (vignetteFactor, x, y, wI);
373
372
float colorPlane = planeColor[pi];
374
373
375
- if (cvIsNaN (colorPlane)) continue ;
376
- if (cvIsNaN (colorImage)) continue ;
374
+ if (cvIsNaN (colorPlane) == 1 ) continue ;
375
+ if (cvIsNaN (colorImage) == 1 ) continue ;
377
376
378
377
double residual = (double )((colorImage - colorPlane*fac)*(colorImage - colorPlane*fac));
379
378
if (abs (residual) > oth2)
@@ -400,7 +399,7 @@ void VignetteCalib::calib()
400
399
vignetteFactorCT[ix+iy*wI + wI] += (dy-dxdy) * colorImage*colorPlane;
401
400
vignetteFactorCT[ix+iy*wI + 1 +wI] += dxdy * colorImage*colorPlane;
402
401
403
- if (cvIsNaN (fac)) continue ;
402
+ if (cvIsNaN (fac) == 1 ) continue ;
404
403
E += residual;
405
404
R ++;
406
405
}
@@ -418,15 +417,15 @@ void VignetteCalib::calib()
418
417
}
419
418
}
420
419
421
- printf ( " %f residual terms => %f \n " , R, sqrtf (E/R)) ;
420
+ std::cout << R << " residual terms => " << sqrt (E/R) << std::endl ;
422
421
423
422
// normalize to vignette max. factor 1.
424
423
for (int pi=0 ;pi<hI*wI;pi++)
425
424
vignetteFactor[pi] /= maxFac;
426
425
427
426
428
427
429
- logFile << it << " " << n << " " << R << " " << sqrtf (E/R) << " \n " ;
428
+ logFile << it << " " << n << " " << R << " " << sqrt (E/R) << " \n " ;
430
429
431
430
432
431
@@ -446,17 +445,17 @@ void VignetteCalib::calib()
446
445
int idx = x+y*wI;
447
446
{
448
447
float sum=0 , num=0 ;
449
- if (x<wI-1 && y<hI-1 && ! cvIsNaN (vignetteFactorCT[idx+1 +wI])) {sum += vignetteFactorCT[idx+1 +wI]; num++;}
450
- if (x<wI-1 && ! cvIsNaN (vignetteFactorCT[idx+1 ])) {sum += vignetteFactorCT[idx+1 ]; num++;}
451
- if (x<wI-1 && y>0 && ! cvIsNaN (vignetteFactorCT[idx+1 -wI])) {sum += vignetteFactorCT[idx+1 -wI]; num++;}
448
+ if (x<wI-1 && y<hI-1 && cvIsNaN (vignetteFactorCT[idx+1 +wI]) != 1 ) {sum += vignetteFactorCT[idx+1 +wI]; num++;}
449
+ if (x<wI-1 && cvIsNaN (vignetteFactorCT[idx+1 ]) != 1 ) {sum += vignetteFactorCT[idx+1 ]; num++;}
450
+ if (x<wI-1 && y>0 && cvIsNaN (vignetteFactorCT[idx+1 -wI]) != 1 ) {sum += vignetteFactorCT[idx+1 -wI]; num++;}
452
451
453
- if (y<hI-1 && ! cvIsNaN (vignetteFactorCT[idx+wI])) {sum += vignetteFactorCT[idx+wI]; num++;}
454
- if ( ! cvIsNaN (vignetteFactorCT[idx])) {sum += vignetteFactorCT[idx]; num++;}
455
- if (y>0 && ! cvIsNaN (vignetteFactorCT[idx-wI])) {sum += vignetteFactorCT[idx-wI]; num++;}
452
+ if (y<hI-1 && cvIsNaN (vignetteFactorCT[idx+wI]) != 1 ) {sum += vignetteFactorCT[idx+wI]; num++;}
453
+ if ( cvIsNaN (vignetteFactorCT[idx]) != 1 ) {sum += vignetteFactorCT[idx]; num++;}
454
+ if (y>0 && cvIsNaN (vignetteFactorCT[idx-wI]) != 1 ) {sum += vignetteFactorCT[idx-wI]; num++;}
456
455
457
- if (y<hI-1 && x>0 && ! cvIsNaN (vignetteFactorCT[idx-1 +wI])) {sum += vignetteFactorCT[idx-1 +wI]; num++;}
458
- if (x>0 && ! cvIsNaN (vignetteFactorCT[idx-1 ])) {sum += vignetteFactorCT[idx-1 ]; num++;}
459
- if (y>0 && x>0 && ! cvIsNaN (vignetteFactorCT[idx-1 -wI])) {sum += vignetteFactorCT[idx-1 -wI]; num++;}
456
+ if (y<hI-1 && x>0 && cvIsNaN (vignetteFactorCT[idx-1 +wI]) != 1 ) {sum += vignetteFactorCT[idx-1 +wI]; num++;}
457
+ if (x>0 && cvIsNaN (vignetteFactorCT[idx-1 ]) != 1 ) {sum += vignetteFactorCT[idx-1 ]; num++;}
458
+ if (y>0 && x>0 && cvIsNaN (vignetteFactorCT[idx-1 -wI]) != 1 ) {sum += vignetteFactorCT[idx-1 -wI]; num++;}
460
459
461
460
if (num>0 ) vignetteFactorTT[idx] = sum/num;
462
461
}
@@ -492,7 +491,7 @@ void VignetteCalib::calib()
492
491
delete[] vignetteFactorTT;
493
492
delete[] vignetteFactorCT;
494
493
495
- for (int i=0 ;i<n;i++)
494
+ for (unsigned long i=0 ;i<n;i++)
496
495
{
497
496
delete[] images[i];
498
497
delete[] p2imgX[i];
0 commit comments