Module: Gsplat::Math::CameraDistortion
- Defined in:
- lib/gsplat/math/camera_distortion.rb
Overview
OpenCV pinhole distortion and equidistant fisheye projection.
Class Method Summary collapse
-
.project_camera(means, intrinsics, camera_model, radial: nil, tangential: nil, thin_prism: nil) ⇒ Object
rubocop:disable Metrics/ParameterLists.
-
.project_point(point, intrinsics, camera_model, radial, tangential, thin_prism) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/ParameterLists.
Class Method Details
.project_camera(means, intrinsics, camera_model, radial: nil, tangential: nil, thin_prism: nil) ⇒ Object
rubocop:disable Metrics/ParameterLists
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
# File 'lib/gsplat/math/camera_distortion.rb', line 10 def project_camera(means, intrinsics, camera_model, radial: nil, tangential: nil, thin_prism: nil) # rubocop:enable Metrics/ParameterLists projected = means.class.zeros(means.shape[0], 2) jacobians = means.class.zeros(means.shape[0], 2, 3) means.shape[0].times do |index| point = means[index, true].to_a.map(&:to_f) projected[index, true] = project_point( point, intrinsics, camera_model, radial, tangential, thin_prism ) jacobians[index, true, true] = numerical_jacobian( point, intrinsics, camera_model, radial, tangential, thin_prism, means.class ) end [projected, jacobians] end |
.project_point(point, intrinsics, camera_model, radial, tangential, thin_prism) ⇒ Object
rubocop:disable Metrics/AbcSize, Metrics/ParameterLists
27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# File 'lib/gsplat/math/camera_distortion.rb', line 27 def project_point(point, intrinsics, camera_model, radial, tangential, thin_prism) # rubocop:enable Metrics/AbcSize, Metrics/ParameterLists x_coord = point[0] / point[2] y_coord = point[1] / point[2] normalized = if camera_model.to_s == "fisheye" fisheye_normalized = fisheye(x_coord, y_coord, radial) tangential_prism( *fisheye_normalized, *fisheye_normalized, tangential, thin_prism ) else pinhole_normalized = pinhole(x_coord, y_coord, radial) tangential_prism( *pinhole_normalized, x_coord, y_coord, tangential, thin_prism ) end [ (intrinsics[0, 0].to_f * normalized[0]) + (intrinsics[0, 1].to_f * normalized[1]) + intrinsics[0, 2].to_f, (intrinsics[1, 0].to_f * normalized[0]) + (intrinsics[1, 1].to_f * normalized[1]) + intrinsics[1, 2].to_f ] end |