@@ -85,6 +85,24 @@ public MrCalResult(
8585 }
8686 }
8787
88+ public double [] framePosesToRtToref () {
89+ double [] ret = new double [optimizedPoses .size () * 6 ];
90+
91+ for (int i = 0 ; i < optimizedPoses .size (); i ++) {
92+ var pose = optimizedPoses .get (i );
93+ var r = pose .getRotation ().toVector ();
94+ var t = pose .getTranslation ().toVector ();
95+ ret [i * 6 + 0 ] = r .get (0 );
96+ ret [i * 6 + 1 ] = r .get (1 );
97+ ret [i * 6 + 2 ] = r .get (2 );
98+ ret [i * 6 + 3 ] = t .get (0 );
99+ ret [i * 6 + 4 ] = t .get (1 );
100+ ret [i * 6 + 5 ] = t .get (2 );
101+ }
102+
103+ return ret ;
104+ }
105+
88106 @ Override
89107 public String toString () {
90108 return "MrCalResult [success="
@@ -137,29 +155,21 @@ public static native double[] compute_uncertainty(
137155 double warpX ,
138156 double warpY );
139157
140- public static MrCalResult calibrateCamera (
158+ public static double [] makeObservations (
141159 List <MatOfPoint2f > board_corners ,
142160 List <MatOfFloat > board_corner_levels ,
143161 int boardWidth ,
144- int boardHeight ,
145- double boardSpacing ,
146- int imageWidth ,
147- int imageHeight ,
148- double focalLen ) {
162+ int boardHeight ) {
149163 double [] observations = new double [boardWidth * boardHeight * 3 * board_corners .size ()];
150164
151- if (!(board_corners .size () == board_corner_levels .size ())) {
152- return new MrCalResult (false );
153- }
154-
155165 int i = 0 ;
156166 for (int b = 0 ; b < board_corners .size (); b ++) {
157167 var board = board_corners .get (b );
158168 var levels = board_corner_levels .get (b ).toArray ();
159169 var corners = board .toArray ();
160170
161171 if (!(corners .length == levels .length && corners .length == boardWidth * boardHeight )) {
162- return new MrCalResult ( false ) ;
172+ return null ;
163173 }
164174
165175 // Assume that we're correct in terms of row/column major-ness (lol)
@@ -176,9 +186,29 @@ public static MrCalResult calibrateCamera(
176186 }
177187
178188 if (i * 3 != observations .length ) {
189+ return null ;
190+ }
191+
192+ return observations ;
193+ }
194+
195+ public static MrCalResult calibrateCamera (
196+ List <MatOfPoint2f > board_corners ,
197+ List <MatOfFloat > board_corner_levels ,
198+ int boardWidth ,
199+ int boardHeight ,
200+ double boardSpacing ,
201+ int imageWidth ,
202+ int imageHeight ,
203+ double focalLen ) {
204+
205+ if (!(board_corners .size () == board_corner_levels .size ())) {
179206 return new MrCalResult (false );
180207 }
181208
209+ var observations =
210+ makeObservations (board_corners , board_corner_levels , boardWidth , boardHeight );
211+
182212 return mrcal_calibrate_camera (
183213 observations , boardWidth , boardHeight , boardSpacing , imageWidth , imageHeight , focalLen );
184214 }
0 commit comments