@@ -84,6 +84,7 @@ public static Optional<CameraCalibrationValue> findCameraCalibrationResult(
8484 new TermCriteria (TermCriteria .MAX_ITER + TermCriteria .EPS , 30 , 0.00001 )
8585 );
8686
87+ Logger .info ("calibrateCameraRmsError: " + calibrateCameraRmsError );
8788 final DoubleIndexer cameraMatrixIndexer = cameraMatrix .createIndexer ();
8889 final StringBuilder cameraStringBuilder = new StringBuilder ();
8990 cameraStringBuilder .append ("cameraMatrix = {\n " );
@@ -176,6 +177,7 @@ private static Size evaluateChessboardImages(
176177 final Size zeroZone = new Size (-1 , -1 );
177178 final int maxIter = 30 ;
178179 final double epsilon = 0.00001 ;
180+ final double resizeDelta = 1.05 ;
179181 final TermCriteria termCriteria = new TermCriteria (
180182 opencv_core .CV_TERMCRIT_ITER | opencv_core .CV_TERMCRIT_EPS , maxIter , epsilon );
181183
@@ -193,12 +195,28 @@ private static Size evaluateChessboardImages(
193195
194196 if (opencv_calib3d .findChessboardCorners (resizeimage , boardSize , imageCorners )) {
195197 Logger .info ("Valid Calibration Image: " + fileName );
198+
196199 final FloatIndexer imageCornersIndex = imageCorners .createIndexer ();
197- for (int i = 0 ; i < imageCorners .size (0 ); i ++) {
198- for (int j = 0 ; j < imageCorners .size (1 ); j ++) {
199- imageCornersIndex .put (i , j , imageCornersIndex .get (i , j ) * (float ) downSample );
200+ for (double sample = downSample / resizeDelta ; sample > 1 ; sample /= resizeDelta ) {
201+ final Mat sampleImage = new Mat ();
202+ final Size sampleSize = new Size (
203+ (int ) (origSize .width () / sample ),
204+ (int ) (origSize .height () / sample ));
205+ opencv_imgproc .resize (image , sampleImage , sampleSize );
206+ for (int i = 0 ; i < imageCorners .size (0 ); i ++) {
207+ imageCornersIndex .put (i , 0 , 0 , imageCornersIndex .get (i , 0 , 0 ) * (float ) (downSample / sample ));
208+ imageCornersIndex .put (i , 0 , 1 , imageCornersIndex .get (i , 0 , 1 ) * (float ) (downSample / sample ));
209+ }
210+ opencv_imgproc .cornerSubPix (sampleImage , imageCorners , winSize , zeroZone , termCriteria );
211+ for (int i = 0 ; i < imageCorners .size (0 ); i ++) {
212+ imageCornersIndex .put (i , 0 , 0 , imageCornersIndex .get (i , 0 , 0 ) / (float ) (downSample / sample ));
213+ imageCornersIndex .put (i , 0 , 1 , imageCornersIndex .get (i , 0 , 1 ) / (float ) (downSample / sample ));
200214 }
201215 }
216+ for (int i = 0 ; i < imageCorners .size (0 ); i ++) {
217+ imageCornersIndex .put (i , 0 , 0 , imageCornersIndex .get (i , 0 , 0 ) * (float ) downSample );
218+ imageCornersIndex .put (i , 0 , 1 , imageCornersIndex .get (i , 0 , 1 ) * (float ) downSample );
219+ }
202220 opencv_imgproc .cornerSubPix (image , imageCorners , winSize , zeroZone , termCriteria );
203221 imageCornerMats .add (imageCorners );
204222 validNames .add (fileName );
0 commit comments