IDS peak ICV v1.3.0
Loading...
Searching...
No Matches
Undistortion.cs
Go to the documentation of this file.
1using System.Runtime.InteropServices;
6using Microsoft.Win32.SafeHandles;
7
9
52public class Undistortion : IDisposable
53{
54 private readonly Handle _handle;
55 private readonly Backend.Types.peak_icv_intrinsic_parameters _newIntrinsicParameters;
56
64 public Undistortion(IntrinsicParameters intrinsicParameters)
65 {
66 var handle = new Handle(intrinsicParameters, out _newIntrinsicParameters);
67 _handle = handle;
68 }
69
80 public Undistortion(IntrinsicParameters intrinsicParameters, Metadata metadata)
81 {
82 Backend.Types.peak_icv_capture_information captureInformation = CaptureInformation.FromMetadata(metadata);
83 var handle = new Handle(intrinsicParameters, captureInformation, out _newIntrinsicParameters);
84 _handle = handle;
85 }
86
94 public Undistortion(CalibrationParameters calibrationParameters)
95 {
96 var handle = new Handle(calibrationParameters, out _newIntrinsicParameters);
97 _handle = handle;
98 }
99
110 public Undistortion(CalibrationParameters calibrationParameters, Metadata metadata)
111 {
112 Backend.Types.peak_icv_capture_information captureInformation = CaptureInformation.FromMetadata(metadata);
113 var handle = new Handle(calibrationParameters, captureInformation, out _newIntrinsicParameters);
114 _handle = handle;
115 }
116
122 {
123 get
124 {
125 Interpolation interpolation = 0;
126 DllHelper.ExecuteAndMapReturnCodes(() =>
127 CInterface.peak_icv_Transform_Undistortion_GetInterpolation(_handle, out interpolation));
128 return interpolation;
129 }
130
131 set
132 {
133 DllHelper.ExecuteAndMapReturnCodes(() =>
134 CInterface.peak_icv_Transform_Undistortion_SetInterpolation(_handle, value));
135 }
136 }
137
142 public void Dispose()
143 {
144 _handle.Dispose();
145 GC.SuppressFinalize(this);
146 }
147
182 {
183 using var outputImage = new Image(image.PixelFormat, image.Size);
184
185 DllHelper.ExecuteAndMapReturnCodes(() =>
186 CInterface.peak_icv_Transform_Undistortion_Process(_handle, image._handle, outputImage._handle));
187
188 return new UndistortedImage(outputImage, new IntrinsicParameters(_newIntrinsicParameters));
189 }
190
191 private sealed class Handle : SafeHandleZeroOrMinusOneIsInvalid
192 {
193 internal Handle(IntrinsicParameters intrinsicParameters,
194 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters) : base(true)
195 {
196 Backend.Types.peak_icv_intrinsic_parameters tmp = default;
197
198 DllHelper.ExecuteAndMapReturnCodes(() =>
199 CInterface.peak_icv_Transform_Undistortion_Create(
200 out handle,
201 intrinsicParameters.ToCType(),
202 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_intrinsic_parameters>(),
203 out tmp));
204
205 newIntrinsicParameters = tmp;
206 }
207
208 internal Handle(IntrinsicParameters intrinsicParameters,
209 Backend.Types.peak_icv_capture_information captureInformation,
210 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters) : base(true)
211 {
212 Backend.Types.peak_icv_intrinsic_parameters tmp = default;
213
214 DllHelper.ExecuteAndMapReturnCodes(() =>
215 CInterface.peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(
216 out handle,
217 intrinsicParameters.ToCType(),
218 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_intrinsic_parameters>(),
219 captureInformation,
220 (nuint) Marshal.SizeOf(typeof(Backend.Types.peak_icv_capture_information)),
221 out tmp));
222
223 newIntrinsicParameters = tmp;
224 }
225
226 internal Handle(CalibrationParameters calibrationParameters,
227 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters) : base(true)
228 {
229 Backend.Types.peak_icv_intrinsic_parameters tmp = default;
230
231 DllHelper.ExecuteAndMapReturnCodes(() =>
232 CInterface.peak_icv_Transform_Undistortion_Create(
233 out handle,
234 calibrationParameters.IntrinsicParameters.ToCType(),
235 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_intrinsic_parameters>(),
236 out tmp));
237
238 newIntrinsicParameters = tmp;
239 }
240
241 internal Handle(CalibrationParameters calibrationParameters,
242 Backend.Types.peak_icv_capture_information captureInformation,
243 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters) : base(true)
244 {
245 Backend.Types.peak_icv_intrinsic_parameters tmp = default;
246
247 DllHelper.ExecuteAndMapReturnCodes(() =>
248 CInterface.peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(
249 out handle,
250 calibrationParameters.IntrinsicParameters.ToCType(),
251 (nuint) Marshal.SizeOf<Backend.Types.peak_icv_intrinsic_parameters>(),
252 captureInformation,
253 (nuint) Marshal.SizeOf(typeof(Backend.Types.peak_icv_capture_information)),
254 out tmp));
255
256 newIntrinsicParameters = tmp;
257 }
258
259 protected override bool ReleaseHandle()
260 {
261 return CInterface.peak_icv_Transform_Undistortion_Destroy(handle) ==
262 Backend.Types.peak_icv_status.PEAK_ICV_STATUS_SUCCESS;
263 }
264 }
265
266 private static class CInterface
267 {
268 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
269 public static extern Backend.Types.peak_icv_status peak_icv_Transform_Undistortion_Create(
270 out IntPtr undistortionHandle,
271 Backend.Types.peak_icv_intrinsic_parameters intrinsicParameters,
272 nuint sizeOfIntrinsicParameters,
273 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters);
274
275 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
276 public static extern Backend.Types.peak_icv_status
277 peak_icv_Transform_Undistortion_Create_With_Image_CaptureInformation(
278 out IntPtr undistortionHandle,
279 Backend.Types.peak_icv_intrinsic_parameters intrinsicParameters,
280 nuint sizeOfIntrinsicParameters,
281 Backend.Types.peak_icv_capture_information captureInformation,
282 nuint captureInformationSize,
283 out Backend.Types.peak_icv_intrinsic_parameters newIntrinsicParameters);
284
285 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
286 public static extern Backend.Types.peak_icv_status
287 peak_icv_Transform_Undistortion_IncreaseUseCount(
288 Handle undistortionHandle);
289
290 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
291 public static extern Backend.Types.peak_icv_status peak_icv_Transform_Undistortion_Destroy(
292 IntPtr undistortionHandle);
293
294 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
295 public static extern Backend.Types.peak_icv_status peak_icv_Transform_Undistortion_Process(
296 Handle undistortionHandle,
297 Image.Handle inputImageHandle,
298 Image.Handle outputImageHandle);
299
300 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
301 public static extern Backend.Types.peak_icv_status
302 peak_icv_Transform_Undistortion_GetInterpolation(
303 Handle undistortionHandle,
304 out Interpolation interpolation);
305
306 [DllImport(Global.LibraryName, CallingConvention = CallingConvention.Cdecl)]
307 public static extern Backend.Types.peak_icv_status
308 peak_icv_Transform_Undistortion_SetInterpolation(
309 Handle undistortionHandle,
310 Interpolation interpolation);
311 }
312}
Strongly typed container for image acquisition metadata.
Definition Metadata.cs:233
Holds a complete set of camera calibration parameters, including both intrinsic and extrinsic data.
IntrinsicParameters IntrinsicParameters
Gets the intrinsic camera parameters.
The intrinsic parameters contain the necessary information to use the camera calibration.
Represents an undistortion transformation for images.
UndistortedImage Process(Image image)
Applies undistortion to the specified image.
Undistortion(IntrinsicParameters intrinsicParameters, Metadata metadata)
Constructs an undistortion using intrinsic parameters and metadata.
Interpolation Interpolation
Gets or sets the Interpolation method used for undistortion.
void Dispose()
Releases all resources used by the Undistortion.
Undistortion(CalibrationParameters calibrationParameters, Metadata metadata)
Constructs an undistortion using calibration parameters and metadata.
Undistortion(IntrinsicParameters intrinsicParameters)
Constructs an undistortion using intrinsic parameters.
Undistortion(CalibrationParameters calibrationParameters)
Constructs an undistortion using calibration parameters.
Constructs an Image from an IImageView Instance.
Definition Image.cs:18
PixelFormat PixelFormat
Gets the pixel format from the image.
Definition Image.cs:217
Size Size
Gets the image size in pixels from the image.
Definition Image.cs:223
Represents an image that has undergone undistortion.
Interpolation
Enumeration of interpolation methods used in image transformations.