Added camera calibration sample for android
[profile/ivi/opencv.git] / samples / android / camera-calibration / src / org / opencv / samples / cameracalibration / CalibrationResult.java
1 package org.opencv.samples.cameracalibration;
2
3 import org.opencv.core.Mat;
4
5 import android.app.Activity;
6 import android.content.Context;
7 import android.content.SharedPreferences;
8 import android.util.Log;
9
10 public abstract class CalibrationResult {
11     private static final String TAG = "OCVSample::CalibrationResult";
12
13     private static final int CAMERA_MATRIX_ROWS = 3;
14     private static final int CAMERA_MATRIX_COLS = 3;
15     private static final int DISTORTION_COEFFICIENTS_SIZE = 5;
16
17     public static void save(Activity activity, Mat cameraMatrix, Mat distortionCoefficients) {
18         SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
19         SharedPreferences.Editor editor = sharedPref.edit();
20
21         double[] cameraMatrixArray = new double[CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS];
22         cameraMatrix.get(0,  0, cameraMatrixArray);
23         for (int i = 0; i < CAMERA_MATRIX_ROWS; i++) {
24             for (int j = 0; j < CAMERA_MATRIX_COLS; j++) {
25                 Integer id = i * CAMERA_MATRIX_ROWS + j;
26                 editor.putFloat(id.toString(), (float)cameraMatrixArray[id]);
27             }
28         }
29
30         double[] distortionCoefficientsArray = new double[DISTORTION_COEFFICIENTS_SIZE];
31         distortionCoefficients.get(0, 0, distortionCoefficientsArray);
32         int shift = CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS;
33         for (Integer i = shift; i < DISTORTION_COEFFICIENTS_SIZE + shift; i++) {
34             editor.putFloat(i.toString(), (float)distortionCoefficientsArray[i-shift]);
35         }
36
37         editor.commit();
38         Log.i(TAG, "Saved camera matrix: " + cameraMatrix.dump());
39         Log.i(TAG, "Saved distortion coefficients: " + distortionCoefficients.dump());
40     }
41
42     public static boolean tryLoad(Activity activity, Mat cameraMatrix, Mat distortionCoefficients) {
43         SharedPreferences sharedPref = activity.getPreferences(Context.MODE_PRIVATE);
44         if (sharedPref.getFloat("0", -1) == -1) {
45             Log.i(TAG, "No previous calibration results found");
46             return false;
47         }
48
49         double[] cameraMatrixArray = new double[CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS];
50         for (int i = 0; i < CAMERA_MATRIX_ROWS; i++) {
51             for (int j = 0; j < CAMERA_MATRIX_COLS; j++) {
52                 Integer id = i * CAMERA_MATRIX_ROWS + j;
53                 cameraMatrixArray[id] = sharedPref.getFloat(id.toString(), -1);
54             }
55         }
56         cameraMatrix.put(0, 0, cameraMatrixArray);
57         Log.i(TAG, "Loaded camera matrix: " + cameraMatrix.dump());
58
59         double[] distortionCoefficientsArray = new double[DISTORTION_COEFFICIENTS_SIZE];
60         int shift = CAMERA_MATRIX_ROWS * CAMERA_MATRIX_COLS;
61         for (Integer i = shift; i < DISTORTION_COEFFICIENTS_SIZE + shift; i++) {
62             distortionCoefficientsArray[i - shift] = sharedPref.getFloat(i.toString(), -1);
63         }
64         distortionCoefficients.put(0, 0, distortionCoefficientsArray);
65         Log.i(TAG, "Loaded distortion coefficients: " + distortionCoefficients.dump());
66
67         return true;
68     }
69 }