Prepare for config.json renaming cameraExtrinsics to distCoeffs (#612)

Doesn't actually rename in the JSON file yet, but fixes the name everywhere else
This commit is contained in:
amquake
2022-12-24 21:01:24 -08:00
committed by GitHub
parent 915f784d9d
commit e1b39a1723
7 changed files with 38 additions and 36 deletions

View File

@@ -17,6 +17,7 @@
package org.photonvision.vision.calibration;
import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
@@ -33,7 +34,8 @@ public class CameraCalibrationCoefficients implements Releasable {
public final JsonMat cameraIntrinsics;
@JsonProperty("cameraExtrinsics")
public final JsonMat cameraExtrinsics;
@JsonAlias({"cameraExtrinsics", "distCoeffs"})
public final JsonMat distCoeffs;
@JsonProperty("perViewErrors")
public final double[] perViewErrors;
@@ -45,12 +47,12 @@ public class CameraCalibrationCoefficients implements Releasable {
public CameraCalibrationCoefficients(
@JsonProperty("resolution") Size resolution,
@JsonProperty("cameraIntrinsics") JsonMat cameraIntrinsics,
@JsonProperty("cameraExtrinsics") JsonMat cameraExtrinsics,
@JsonProperty("cameraExtrinsics") JsonMat distCoeffs,
@JsonProperty("perViewErrors") double[] perViewErrors,
@JsonProperty("standardDeviation") double standardDeviation) {
this.resolution = resolution;
this.cameraIntrinsics = cameraIntrinsics;
this.cameraExtrinsics = cameraExtrinsics;
this.distCoeffs = distCoeffs;
this.perViewErrors = perViewErrors;
this.standardDeviation = standardDeviation;
}
@@ -61,8 +63,8 @@ public class CameraCalibrationCoefficients implements Releasable {
}
@JsonIgnore
public MatOfDouble getCameraExtrinsicsMat() {
return cameraExtrinsics.getAsMatOfDouble();
public MatOfDouble getDistCoeffsMat() {
return distCoeffs.getAsMatOfDouble();
}
@JsonIgnore
@@ -78,6 +80,6 @@ public class CameraCalibrationCoefficients implements Releasable {
@Override
public void release() {
cameraIntrinsics.release();
cameraExtrinsics.release();
distCoeffs.release();
}
}

View File

@@ -47,7 +47,7 @@ public class Draw3dTargetsPipe
if (!params.shouldDraw) return null;
if (params.cameraCalibrationCoefficients == null
|| params.cameraCalibrationCoefficients.getCameraIntrinsicsMat() == null
|| params.cameraCalibrationCoefficients.getCameraExtrinsicsMat() == null) {
|| params.cameraCalibrationCoefficients.getDistCoeffsMat() == null) {
return null;
}
@@ -90,7 +90,7 @@ public class Draw3dTargetsPipe
target.getCameraRelativeRvec(),
target.getCameraRelativeTvec(),
params.cameraCalibrationCoefficients.getCameraIntrinsicsMat(),
params.cameraCalibrationCoefficients.getCameraExtrinsicsMat(),
params.cameraCalibrationCoefficients.getDistCoeffsMat(),
tempMat,
jac);
// Distort the points so they match the image they're being overlaid on
@@ -101,7 +101,7 @@ public class Draw3dTargetsPipe
target.getCameraRelativeRvec(),
target.getCameraRelativeTvec(),
params.cameraCalibrationCoefficients.getCameraIntrinsicsMat(),
params.cameraCalibrationCoefficients.getCameraExtrinsicsMat(),
params.cameraCalibrationCoefficients.getDistCoeffsMat(),
tempMat,
jac);
var topPoints = tempMat.toList();
@@ -140,7 +140,7 @@ public class Draw3dTargetsPipe
target.getCameraRelativeRvec(),
target.getCameraRelativeTvec(),
params.cameraCalibrationCoefficients.getCameraIntrinsicsMat(),
params.cameraCalibrationCoefficients.getCameraExtrinsicsMat(),
params.cameraCalibrationCoefficients.getDistCoeffsMat(),
tempMat,
jac);
var axisPoints = tempMat.toList();
@@ -213,7 +213,7 @@ public class Draw3dTargetsPipe
var dstList = new ArrayList<Point>();
final Mat cameraMatrix = params.cameraCalibrationCoefficients.getCameraIntrinsicsMat();
// k1, k2, p1, p2, k3
final Mat distCoeffs = params.cameraCalibrationCoefficients.getCameraExtrinsicsMat();
final Mat distCoeffs = params.cameraCalibrationCoefficients.getDistCoeffsMat();
var cx = cameraMatrix.get(0, 2)[0];
var cy = cameraMatrix.get(1, 2)[0];
var fx = cameraMatrix.get(0, 0)[0];

View File

@@ -48,7 +48,7 @@ public class SolvePNPPipe
protected List<TrackedTarget> process(List<TrackedTarget> targetList) {
if (params.cameraCoefficients == null
|| params.cameraCoefficients.getCameraIntrinsicsMat() == null
|| params.cameraCoefficients.getCameraExtrinsicsMat() == null) {
|| params.cameraCoefficients.getDistCoeffsMat() == null) {
if (!hasWarned) {
logger.warn(
"Cannot perform solvePNP an uncalibrated camera! Please calibrate this resolution...");
@@ -69,7 +69,7 @@ public class SolvePNPPipe
|| corners.isEmpty()
|| params.cameraCoefficients == null
|| params.cameraCoefficients.getCameraIntrinsicsMat() == null
|| params.cameraCoefficients.getCameraExtrinsicsMat() == null) {
|| params.cameraCoefficients.getDistCoeffsMat() == null) {
return;
}
this.imagePoints.fromList(corners);
@@ -81,7 +81,7 @@ public class SolvePNPPipe
params.targetModel.getRealWorldTargetCoordinates(),
imagePoints,
params.cameraCoefficients.getCameraIntrinsicsMat(),
params.cameraCoefficients.getCameraExtrinsicsMat(),
params.cameraCoefficients.getDistCoeffsMat(),
rVec,
tVec);
} catch (Exception e) {

View File

@@ -516,7 +516,7 @@ public class VisionModule {
internalMap.put("width", c.resolution.width);
internalMap.put("height", c.resolution.height);
internalMap.put("intrinsics", c.cameraIntrinsics.data);
internalMap.put("extrinsics", c.cameraExtrinsics.data);
internalMap.put("distCoeffs", c.distCoeffs.data);
calList.add(internalMap);
}

View File

@@ -134,8 +134,8 @@ public class Calibrate3dPipeTest {
assertNotNull(cal);
assertNotNull(cal.perViewErrors);
System.out.println("Per View Errors: " + Arrays.toString(cal.perViewErrors));
System.out.println("Camera Intrinsics : " + cal.cameraIntrinsics.toString());
System.out.println("Camera Extrinsics : " + cal.cameraExtrinsics.toString());
System.out.println("Camera Intrinsics: " + cal.cameraIntrinsics.toString());
System.out.println("Dist Coeffs: " + cal.distCoeffs.toString());
System.out.println("Standard Deviation: " + cal.standardDeviation);
System.out.println(
"Mean: " + Arrays.stream(calibration3dPipeline.perViewErrors()).average().toString());
@@ -300,8 +300,8 @@ public class Calibrate3dPipeTest {
assertTrue(centerYErrPct < 10.0);
System.out.println("Per View Errors: " + Arrays.toString(cal.perViewErrors));
System.out.println("Camera Intrinsics : " + cal.cameraIntrinsics.toString());
System.out.println("Camera Extrinsics : " + cal.cameraExtrinsics.toString());
System.out.println("Camera Intrinsics: " + cal.cameraIntrinsics.toString());
System.out.println("Dist Coeffs: " + cal.distCoeffs.toString());
System.out.println("Standard Deviation: " + cal.standardDeviation);
System.out.println(
"Mean: " + Arrays.stream(calibration3dPipeline.perViewErrors()).average().toString());
@@ -330,7 +330,7 @@ public class Calibrate3dPipeTest {
Mat raw = Imgcodecs.imread(file.getAbsolutePath());
Mat undistorted = new Mat(new Size(imgRes.width * 2, imgRes.height * 2), raw.type());
Calib3d.undistort(
raw, undistorted, cal.cameraIntrinsics.getAsMat(), cal.cameraExtrinsics.getAsMat());
raw, undistorted, cal.cameraIntrinsics.getAsMat(), cal.distCoeffs.getAsMat());
TestUtils.showImage(undistorted, "undistorted " + file.getName(), 1);
raw.release();
undistorted.release();

View File

@@ -71,14 +71,14 @@ public class CirclePNPTest {
assertEquals(3, cameraCalibration.cameraIntrinsics.getAsMatOfDouble().cols());
assertEquals(3, cameraCalibration.getCameraIntrinsicsMat().rows());
assertEquals(3, cameraCalibration.getCameraIntrinsicsMat().cols());
assertEquals(1, cameraCalibration.cameraExtrinsics.rows);
assertEquals(5, cameraCalibration.cameraExtrinsics.cols);
assertEquals(1, cameraCalibration.cameraExtrinsics.getAsMat().rows());
assertEquals(5, cameraCalibration.cameraExtrinsics.getAsMat().cols());
assertEquals(1, cameraCalibration.cameraExtrinsics.getAsMatOfDouble().rows());
assertEquals(5, cameraCalibration.cameraExtrinsics.getAsMatOfDouble().cols());
assertEquals(1, cameraCalibration.getCameraExtrinsicsMat().rows());
assertEquals(5, cameraCalibration.getCameraExtrinsicsMat().cols());
assertEquals(1, cameraCalibration.distCoeffs.rows);
assertEquals(5, cameraCalibration.distCoeffs.cols);
assertEquals(1, cameraCalibration.distCoeffs.getAsMat().rows());
assertEquals(5, cameraCalibration.distCoeffs.getAsMat().cols());
assertEquals(1, cameraCalibration.distCoeffs.getAsMatOfDouble().rows());
assertEquals(5, cameraCalibration.distCoeffs.getAsMatOfDouble().cols());
assertEquals(1, cameraCalibration.getDistCoeffsMat().rows());
assertEquals(5, cameraCalibration.getDistCoeffsMat().cols());
}
@Test

View File

@@ -74,14 +74,14 @@ public class SolvePNPTest {
assertEquals(3, cameraCalibration.cameraIntrinsics.getAsMatOfDouble().cols());
assertEquals(3, cameraCalibration.getCameraIntrinsicsMat().rows());
assertEquals(3, cameraCalibration.getCameraIntrinsicsMat().cols());
assertEquals(1, cameraCalibration.cameraExtrinsics.rows);
assertEquals(5, cameraCalibration.cameraExtrinsics.cols);
assertEquals(1, cameraCalibration.cameraExtrinsics.getAsMat().rows());
assertEquals(5, cameraCalibration.cameraExtrinsics.getAsMat().cols());
assertEquals(1, cameraCalibration.cameraExtrinsics.getAsMatOfDouble().rows());
assertEquals(5, cameraCalibration.cameraExtrinsics.getAsMatOfDouble().cols());
assertEquals(1, cameraCalibration.getCameraExtrinsicsMat().rows());
assertEquals(5, cameraCalibration.getCameraExtrinsicsMat().cols());
assertEquals(1, cameraCalibration.distCoeffs.rows);
assertEquals(5, cameraCalibration.distCoeffs.cols);
assertEquals(1, cameraCalibration.distCoeffs.getAsMat().rows());
assertEquals(5, cameraCalibration.distCoeffs.getAsMat().cols());
assertEquals(1, cameraCalibration.distCoeffs.getAsMatOfDouble().rows());
assertEquals(5, cameraCalibration.distCoeffs.getAsMatOfDouble().cols());
assertEquals(1, cameraCalibration.getDistCoeffsMat().rows());
assertEquals(5, cameraCalibration.getDistCoeffsMat().cols());
}
@Test