001/* 002 * Copyright (C) Photon Vision. 003 * 004 * This program is free software: you can redistribute it and/or modify 005 * it under the terms of the GNU General Public License as published by 006 * the Free Software Foundation, either version 3 of the License, or 007 * (at your option) any later version. 008 * 009 * This program is distributed in the hope that it will be useful, 010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 012 * GNU General Public License for more details. 013 * 014 * You should have received a copy of the GNU General Public License 015 * along with this program. If not, see <https://www.gnu.org/licenses/>. 016 */ 017 018package org.photonvision.vision.calibration; 019 020import java.util.List; 021import java.util.stream.Collectors; 022import org.opencv.core.Size; 023 024public class UICameraCalibrationCoefficients extends CameraCalibrationCoefficients { 025 public int numSnapshots; 026 public List<Double> meanErrors; 027 028 public UICameraCalibrationCoefficients( 029 Size resolution, 030 JsonMatOfDouble cameraIntrinsics, 031 JsonMatOfDouble distCoeffs, 032 double[] calobjectWarp, 033 List<BoardObservation> observations, 034 Size calobjectSize, 035 double calobjectSpacing, 036 CameraLensModel lensmodel) { 037 // yeet observations, keep all else 038 super( 039 resolution, 040 cameraIntrinsics, 041 distCoeffs, 042 calobjectWarp, 043 List.of(), 044 calobjectSize, 045 calobjectSpacing, 046 lensmodel); 047 048 this.numSnapshots = observations.size(); 049 this.meanErrors = 050 observations.stream() 051 .map( 052 it2 -> 053 it2.reprojectionErrors.stream() 054 .mapToDouble(it -> Math.sqrt(it.x * it.x + it.y * it.y)) 055 .average() 056 .orElse(0)) 057 .collect(Collectors.toList()); 058 } 059}