/// <summary> /// Copy Constructor (shallow). On Windows UWP, values of the original camera intrinsics are used. /// </summary> public CameraIntrinsic([NotNull] CameraIntrinsic intrinsic) { if (intrinsic == null) { throw new ArgumentNullException(nameof(intrinsic)); } #if ENABLE_WINMD_SUPPORT WindowsCameraIntrinsics = intrinsic.WindowsCameraIntrinsics; if (WindowsCameraIntrinsics == null) { throw new NullReferenceException(nameof(WindowsCameraIntrinsics)); } FocalLength = new Vector2(WindowsCameraIntrinsics.FocalLength.X, WindowsCameraIntrinsics.FocalLength.Y); ImageWidth = WindowsCameraIntrinsics.ImageWidth; ImageHeight = WindowsCameraIntrinsics.ImageHeight; PrincipalPoint = new Vector2(WindowsCameraIntrinsics.PrincipalPoint.X, WindowsCameraIntrinsics.PrincipalPoint.Y); RadialDistortion = new Vector3(WindowsCameraIntrinsics.RadialDistortion.X, WindowsCameraIntrinsics.RadialDistortion.Y, WindowsCameraIntrinsics.RadialDistortion.Z); TangentialDistortion = new Vector2(WindowsCameraIntrinsics.TangentialDistortion.X, WindowsCameraIntrinsics.TangentialDistortion.Y); UndistortedProjectionTransform = WindowsCameraIntrinsics.UndistortedProjectionTransform.ToUnity(); #else FocalLength = intrinsic.FocalLength; ImageWidth = intrinsic.ImageWidth; ImageHeight = intrinsic.ImageHeight; PrincipalPoint = intrinsic.PrincipalPoint; RadialDistortion = intrinsic.RadialDistortion; TangentialDistortion = intrinsic.TangentialDistortion; UndistortedProjectionTransform = intrinsic.UndistortedProjectionTransform; #endif }
public CameraIntrinsic([NotNull] Windows.Media.Devices.Core.CameraIntrinsics cameraIntrinsics) { if (cameraIntrinsics == null) { throw new ArgumentNullException(nameof(cameraIntrinsics)); } FocalLength = new Vector2(cameraIntrinsics.FocalLength.X, cameraIntrinsics.FocalLength.Y); ImageWidth = cameraIntrinsics.ImageWidth; ImageHeight = cameraIntrinsics.ImageHeight; PrincipalPoint = new Vector2(cameraIntrinsics.PrincipalPoint.X, cameraIntrinsics.PrincipalPoint.Y); RadialDistortion = new Vector3(cameraIntrinsics.RadialDistortion.X, cameraIntrinsics.RadialDistortion.Y, cameraIntrinsics.RadialDistortion.Z); TangentialDistortion = new Vector2(cameraIntrinsics.TangentialDistortion.X, cameraIntrinsics.TangentialDistortion.Y); UndistortedProjectionTransform = cameraIntrinsics.UndistortedProjectionTransform.ToUnity(); WindowsCameraIntrinsics = cameraIntrinsics; }
internal CameraIntrinsics(Windows.Media.Devices.Core.CameraIntrinsics rtCi) { OriginalIntrinsics = rtCi; FrameWidth = rtCi.ImageWidth; FrameHeight = rtCi.ImageHeight; FocalLengthX = rtCi.FocalLength.X; FocalLengthY = rtCi.FocalLength.Y; PrincipalPointX = rtCi.PrincipalPoint.X; // TODO: validate - 'inverted' principal point to fit all existing kinect algorithms & Kinect SDK: SDK_Cy = frame_height - RT_Cy // (who had a great idea to break formulas used for a decade in 'CV using kinect' papers?) PrincipalPointY = FrameHeight - rtCi.PrincipalPoint.Y; RadialDistortionSecondOrder = rtCi.RadialDistortion.X; RadialDistortionFourthOrder = rtCi.RadialDistortion.Y; RadialDistortionSixthOrder = rtCi.RadialDistortion.Z; }
private CameraIntrinsics ConvertIntrinsics(Windows.Media.Devices.Core.CameraIntrinsics mediaFrameIntrinsics) { CameraIntrinsics intrinsics = null; if (mediaFrameIntrinsics != null) { Vector2 focalLength = new Vector2(mediaFrameIntrinsics.FocalLength.X, mediaFrameIntrinsics.FocalLength.Y); uint imageWidth = mediaFrameIntrinsics.ImageWidth; uint imageHeight = mediaFrameIntrinsics.ImageHeight; Vector2 principalPoint = new Vector2(mediaFrameIntrinsics.PrincipalPoint.X, mediaFrameIntrinsics.PrincipalPoint.Y); Vector3 radialDistortion = new Vector3(mediaFrameIntrinsics.RadialDistortion.X, mediaFrameIntrinsics.RadialDistortion.Y, mediaFrameIntrinsics.RadialDistortion.Z); Vector2 tangentialDistortion = new Vector2(mediaFrameIntrinsics.TangentialDistortion.X, mediaFrameIntrinsics.TangentialDistortion.Y); Matrix4x4 undistortedProjectionTransform = ConvertMatrix(mediaFrameIntrinsics.UndistortedProjectionTransform); intrinsics = new CameraIntrinsics(focalLength, imageWidth, imageHeight, principalPoint, radialDistortion, tangentialDistortion, undistortedProjectionTransform); } return(intrinsics); }