IDS peak ICV v1.3.0
Loading...
Searching...
No Matches
CalibrationParameters.cs
Go to the documentation of this file.
1using System.Runtime.InteropServices;
3
5
19{
58 public CalibrationParameters(string filePath)
59 {
60 var parameters = new Backend.Types.peak_icv_calibration_parameters();
61
62 DllHelper.ExecuteAndMapReturnCodes(() =>
63 CInterface.peak_icv_CalibrationParameters_CreateFromFile(
64 out parameters,
65 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_calibration_parameters>(),
66 Utils.ToUtf8(filePath)));
67
68 IntrinsicParameters = new IntrinsicParameters(parameters.intrinsic_parameters);
69 ExtrinsicParameters = new ExtrinsicParameters(parameters.extrinsic_parameters);
70 }
71
82 public CalibrationParameters(IntrinsicParameters intrinsicParameters, ExtrinsicParameters extrinsicParameters)
83 {
84 IntrinsicParameters = intrinsicParameters;
85 ExtrinsicParameters = extrinsicParameters;
86 }
87
99 public CalibrationParameters(byte[] data)
100 {
101 var isValid = false;
102
103 DllHelper.ExecuteAndMapReturnCodes(() =>
104 CInterface.peak_icv_ValidateBinary(data, (nuint) data.Length, out isValid));
105
106 if (!isValid)
107 {
108 throw new IcvCorruptedException("The given binary data is invalid");
109 }
110
111 var calibrationParameters = new Backend.Types.peak_icv_calibration_parameters();
112 DllHelper.ExecuteAndMapReturnCodes(() =>
113 CInterface.peak_icv_CalibrationParameters_CreateFromBinary(data,
114 (nuint) data.Length,
115 out calibrationParameters,
116 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_calibration_parameters>()));
117
119 new IntrinsicParameters(calibrationParameters.intrinsic_parameters);
121 new ExtrinsicParameters(calibrationParameters.extrinsic_parameters);
122 }
123
130 internal CalibrationParameters(Backend.Types.peak_icv_calibration_parameters calibrationParameters) : this(
131 new IntrinsicParameters(calibrationParameters.intrinsic_parameters),
132 new ExtrinsicParameters(calibrationParameters.extrinsic_parameters))
133 {
134 }
135
141
147
152 public static IEqualityComparer<CalibrationParameters> Comparer { get; } =
153 new CalibrationParametersEqualityComparer();
154
162 public byte[] ToBinary()
163 {
164 Backend.Types.peak_icv_calibration_parameters parameters = ToCType();
165
166 nuint binarySize = 0;
167 DllHelper.ExecuteAndMapReturnCodes(() =>
168 CInterface.peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes(
169 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_calibration_parameters>(), out binarySize));
170
171 var binary = new byte[(int) binarySize];
172 DllHelper.ExecuteAndMapReturnCodes(() =>
173 CInterface.peak_icv_CalibrationParameters_ToBinary(
174 parameters,
175 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_calibration_parameters>(),
176 binary,
177 binarySize));
178
179 return binary;
180 }
181
186 public override string ToString()
187 {
188 return $"IntrinsicParameters: ({IntrinsicParameters}), ExtrinsicParameters: ({ExtrinsicParameters})";
189 }
190
195 public override int GetHashCode()
196 {
197 return IntrinsicParameters.GetHashCode();
198 }
199
204 internal Backend.Types.peak_icv_calibration_parameters ToCType()
205 {
206 return new Backend.Types.peak_icv_calibration_parameters
207 {
208 intrinsic_parameters = IntrinsicParameters.ToCType(),
209 extrinsic_parameters = ExtrinsicParameters.ToCType()
210 };
211 }
212
213 private sealed class CalibrationParametersEqualityComparer : IEqualityComparer<CalibrationParameters>
214 {
215 public bool Equals(CalibrationParameters x, CalibrationParameters y)
216 {
217 if (ReferenceEquals(x, y))
218 {
219 return true;
220 }
221
222 if (ReferenceEquals(x, null))
223 {
224 return false;
225 }
226
227 if (ReferenceEquals(y, null))
228 {
229 return false;
230 }
231
232 return IntrinsicParameters.Comparer.Equals(x.IntrinsicParameters, y.IntrinsicParameters) &&
233 ExtrinsicParameters.Comparer.Equals(x.ExtrinsicParameters, y.ExtrinsicParameters);
234 }
235
236 public int GetHashCode(CalibrationParameters obj)
237 {
238 return (IntrinsicParameters.Comparer.GetHashCode(obj.IntrinsicParameters),
239 ExtrinsicParameters.Comparer.GetHashCode(obj.ExtrinsicParameters)).GetHashCode();
240 }
241 }
242
243 private static class CInterface
244 {
245 [DllImport(Global.LibraryName, CallingConvention = Global.CallingConvention)]
246 public static extern Backend.Types.peak_icv_status peak_icv_CalibrationParameters_CreateFromFile(
247 out Backend.Types.peak_icv_calibration_parameters calibrationParameters,
248 nuint calibrationParametersSize,
249 byte[] filePath);
250
251 [DllImport(Global.LibraryName, CallingConvention = Global.CallingConvention)]
252 public static extern Backend.Types.peak_icv_status peak_icv_CalibrationParameters_ToBinaryGetSizeInBytes(
253 nuint calibrationParametersSize,
254 out nuint binarySize);
255
256 [DllImport(Global.LibraryName, CallingConvention = Global.CallingConvention)]
257 public static extern Backend.Types.peak_icv_status peak_icv_CalibrationParameters_ToBinary(
258 Backend.Types.peak_icv_calibration_parameters calibrationParameters,
259 nuint calibrationParametersSize,
260 [Out] byte[] binaryParameters,
261 nuint binaryParametersSize);
262
263 [DllImport(Global.LibraryName, CallingConvention = Global.CallingConvention)]
264 public static extern Backend.Types.peak_icv_status peak_icv_ValidateBinary(
265 byte[] binary,
266 nuint binarySize,
267 [MarshalAs(UnmanagedType.I1)] out bool isValid);
268
269 [DllImport(Global.LibraryName, CallingConvention = Global.CallingConvention)]
270 public static extern Backend.Types.peak_icv_status peak_icv_CalibrationParameters_CreateFromBinary(
271 [In] byte[] binaryParameters,
272 nuint binaryParametersSize,
273 out Backend.Types.peak_icv_calibration_parameters calibrationParameters,
274 nuint calibrationParametersSize
275 );
276 }
277}
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
IntrinsicParameters IntrinsicParameters
Gets the intrinsic camera parameters.
static IEqualityComparer< CalibrationParameters > Comparer
Gets a default equality comparer for comparing CalibrationParameters data values.
CalibrationParameters(IntrinsicParameters intrinsicParameters, ExtrinsicParameters extrinsicParameters)
Constructs a CalibrationParameters instance from the provided intrinsic and extrinsic parameters.
override int GetHashCode()
Returns a hash code for the calibration parameters.
byte[] ToBinary()
Converts CalibrationParameters to binary data that can be written to the camera memory.
CalibrationParameters(byte[] data)
Constructs a CalibrationParameters instance from binary data that have been read from the camera memo...
override string ToString()
Returns a string representation of the calibration parameters.
CalibrationParameters(string filePath)
Constructs a CalibrationParameters instance by loading data from a JSON file.
ExtrinsicParameters ExtrinsicParameters
Gets or sets the extrinsic camera parameters.
Represents the extrinsic parameters for camera calibration, including rotation, translation and the t...
static IEqualityComparer< ExtrinsicParameters > Comparer
Gets a default equality comparer for comparing ExtrinsicParameters data values.
The intrinsic parameters contain the necessary information to use the camera calibration.
static IEqualityComparer< IntrinsicParameters > Comparer
Provides a default equality comparer for comparing IntrinsicParameters data values.
Occurs when reading from a file or stream that is incomplete, damaged, or in an unexpected format.
Definition Exception.cs:75