Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
33 changes: 29 additions & 4 deletions src/main/java/org/photonvision/mrcal/MrCalJNI.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,12 +27,12 @@
import org.wpilib.math.geometry.Translation3d;
import org.wpilib.math.linalg.VecBuilder;

public class MrCalJNI {

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

use of default constructor, which does not provide a comment

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

use of default constructor, which does not provide a comment

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

use of default constructor, which does not provide a comment

Check warning on line 30 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
public static enum CameraLensModel {

Check warning on line 31 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 31 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 31 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
LENSMODEL_OPENCV5,

Check warning on line 32 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 32 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 32 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
LENSMODEL_OPENCV8,

Check warning on line 33 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 33 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 33 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
LENSMODEL_STEREOGRAPHIC,

Check warning on line 34 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 34 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 34 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
LENSMODEL_SPLINED_STEREOGRAPHIC;

Check warning on line 35 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 35 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 35 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
}

/**
Expand All @@ -57,7 +57,9 @@
}
}

protected static record ObservationInfo(double[] data, int[][] ids) {}

Check warning on line 60 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 60 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 60 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment

public static class MrCalResult {

Check warning on line 62 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 62 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 62 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment
public boolean success;
public double[] intrinsics;
public double rms_error;
Expand All @@ -66,7 +68,7 @@
public double warp_y;
public int Noutliers;
public List<Pose3d> optimizedPoses;
public List<boolean[]> cornersUsed;

Check warning on line 71 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxarm64

no comment

Check warning on line 71 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - osxuniversal

no comment

Check warning on line 71 in src/main/java/org/photonvision/mrcal/MrCalJNI.java

View workflow job for this annotation

GitHub Actions / mrcal-jni - Build - linuxx86-64

no comment

public MrCalResult(boolean success) {
this.success = success;
Expand Down Expand Up @@ -278,12 +280,13 @@
* present. Levels will be converted to weights using weight = 0.5^level, as explained
* [here](https://github.com/dkogan/mrcal/blob/7cd9ac4c854a4b244a35f554c9ebd0464d59e9ff/mrcal-calibrate-cameras#L152)
*/
private static double[] makeObservations(
private static ObservationInfo makeObservations(
int observationCount,
Iterator<MrCalObservation> observationData,
int boardWidth,
int boardHeight) {
double[] observations = new double[boardWidth * boardHeight * 3 * observationCount];
int[][] all_ids = new int[observationCount][];
Arrays.fill(observations, -1.0);

for (int b = 0; b < observationCount; b++) {
Expand All @@ -297,6 +300,7 @@
final var corners = observation.corners;
final var levels = observation.levels;
final var ids = observation.ids;
all_ids[b] = ids;

if (ids == null) {
// No ids, assume a full rectangular board
Expand Down Expand Up @@ -347,7 +351,7 @@
return null;
}

return observations;
return new ObservationInfo(observations, all_ids);
}

/**
Expand Down Expand Up @@ -380,7 +384,28 @@

var observations = makeObservations(observationCount, observationData, boardWidth, boardHeight);

return mrcal_calibrate_camera(
observations, boardWidth, boardHeight, boardSpacing, imageWidth, imageHeight, focalLen);
var results =
mrcal_calibrate_camera(
observations.data,
boardWidth,
boardHeight,
boardSpacing,
imageWidth,
imageHeight,
focalLen);

// Only return corners used for the corners that were provided in the input
for (int b = 0; b < observations.ids.length; b++) {
if (observations.ids[b] != null) {
boolean[] fullCorners = results.cornersUsed.get(b);
boolean[] partialCorners = new boolean[observations.ids[b].length];
for (int i = 0; i < observations.ids[b].length; i++) {
partialCorners[i] = fullCorners[observations.ids[b][i]];
}
results.cornersUsed.set(b, partialCorners);
}
}

return results;
}
}