Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/libmv/intern/camera_intrinsics.cc')
-rw-r--r--intern/libmv/intern/camera_intrinsics.cc73
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");
}