diff options
Diffstat (limited to 'intern/libmv/intern/camera_intrinsics.cc')
-rw-r--r-- | intern/libmv/intern/camera_intrinsics.cc | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/intern/libmv/intern/camera_intrinsics.cc b/intern/libmv/intern/camera_intrinsics.cc index 554c4350b0a..628637e12cc 100644 --- a/intern/libmv/intern/camera_intrinsics.cc +++ b/intern/libmv/intern/camera_intrinsics.cc @@ -25,6 +25,7 @@ using libmv::CameraIntrinsics; using libmv::DivisionCameraIntrinsics; using libmv::PolynomialCameraIntrinsics; using libmv::NukeCameraIntrinsics; +using libmv::BrownCameraIntrinsics; libmv_CameraIntrinsics *libmv_cameraIntrinsicsNew( const libmv_CameraIntrinsicsOptions* libmv_camera_intrinsics_options) { @@ -64,6 +65,14 @@ libmv_CameraIntrinsics *libmv_cameraIntrinsicsCopy( *nuke_intrinsics); break; } + case libmv::DISTORTION_MODEL_BROWN: + { + const BrownCameraIntrinsics *brown_intrinsics = + static_cast<const BrownCameraIntrinsics*>(orig_intrinsics); + new_intrinsics = LIBMV_OBJECT_NEW(BrownCameraIntrinsics, + *brown_intrinsics); + break; + } default: assert(!"Unknown distortion model"); } @@ -164,6 +173,35 @@ void libmv_cameraIntrinsicsUpdate( break; } + case LIBMV_DISTORTION_MODEL_BROWN: + { + assert(camera_intrinsics->GetDistortionModelType() == + libmv::DISTORTION_MODEL_BROWN); + + BrownCameraIntrinsics *brown_intrinsics = + (BrownCameraIntrinsics *) camera_intrinsics; + + double k1 = libmv_camera_intrinsics_options->brown_k1; + double k2 = libmv_camera_intrinsics_options->brown_k2; + double k3 = libmv_camera_intrinsics_options->brown_k3; + double k4 = libmv_camera_intrinsics_options->brown_k4; + + if (brown_intrinsics->k1() != k1 || + brown_intrinsics->k2() != k2 || + brown_intrinsics->k3() != k3 || + brown_intrinsics->k4() != k4) { + brown_intrinsics->SetRadialDistortion(k1, k2, k3, k4); + } + + double p1 = libmv_camera_intrinsics_options->brown_p1; + double p2 = libmv_camera_intrinsics_options->brown_p2; + + if (brown_intrinsics->p1() != p1 || brown_intrinsics->p2() != p2) { + brown_intrinsics->SetTangentialDistortion(p1, p2); + } + break; + } + default: assert(!"Unknown distortion model"); } @@ -228,6 +266,21 @@ void libmv_cameraIntrinsicsExtractOptions( break; } + case libmv::DISTORTION_MODEL_BROWN: + { + const BrownCameraIntrinsics *brown_intrinsics = + static_cast<const BrownCameraIntrinsics *>(camera_intrinsics); + camera_intrinsics_options->distortion_model = + LIBMV_DISTORTION_MODEL_BROWN; + camera_intrinsics_options->brown_k1 = brown_intrinsics->k1(); + camera_intrinsics_options->brown_k2 = brown_intrinsics->k2(); + camera_intrinsics_options->brown_k3 = brown_intrinsics->k3(); + camera_intrinsics_options->brown_k4 = brown_intrinsics->k4(); + camera_intrinsics_options->brown_p1 = brown_intrinsics->p1(); + camera_intrinsics_options->brown_p2 = brown_intrinsics->p2(); + break; + } + default: assert(!"Unknown distortion model"); } @@ -366,6 +419,23 @@ static void libmv_cameraIntrinsicsFillFromOptions( break; } + case LIBMV_DISTORTION_MODEL_BROWN: + { + BrownCameraIntrinsics *brown_intrinsics = + static_cast<BrownCameraIntrinsics*>(camera_intrinsics); + + brown_intrinsics->SetRadialDistortion( + camera_intrinsics_options->brown_k1, + camera_intrinsics_options->brown_k2, + camera_intrinsics_options->brown_k3, + camera_intrinsics_options->brown_k4); + brown_intrinsics->SetTangentialDistortion( + camera_intrinsics_options->brown_p1, + camera_intrinsics_options->brown_p2); + + break; + } + default: assert(!"Unknown distortion model"); } @@ -384,6 +454,9 @@ CameraIntrinsics* libmv_cameraIntrinsicsCreateFromOptions( case LIBMV_DISTORTION_MODEL_NUKE: camera_intrinsics = LIBMV_OBJECT_NEW(NukeCameraIntrinsics); break; + case LIBMV_DISTORTION_MODEL_BROWN: + camera_intrinsics = LIBMV_OBJECT_NEW(BrownCameraIntrinsics); + break; default: assert(!"Unknown distortion model"); } |