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/libmv/simple_pipeline/camera_intrinsics.cc')
-rw-r--r--intern/libmv/libmv/simple_pipeline/camera_intrinsics.cc175
1 files changed, 174 insertions, 1 deletions
diff --git a/intern/libmv/libmv/simple_pipeline/camera_intrinsics.cc b/intern/libmv/libmv/simple_pipeline/camera_intrinsics.cc
index a95b394ad06..ccb6e3d34c8 100644
--- a/intern/libmv/libmv/simple_pipeline/camera_intrinsics.cc
+++ b/intern/libmv/libmv/simple_pipeline/camera_intrinsics.cc
@@ -22,6 +22,7 @@
#include "libmv/logging/logging.h"
#include "libmv/simple_pipeline/distortion_models.h"
+#include "libmv/simple_pipeline/packed_intrinsics.h"
namespace libmv {
@@ -131,6 +132,20 @@ void CameraIntrinsics::ResetLookupGrids() {
undistort_.Reset();
}
+void CameraIntrinsics::Pack(PackedIntrinsics* packed_intrinsics) const {
+ packed_intrinsics->SetFocalLength(focal_length());
+ packed_intrinsics->SetPrincipalPoint(principal_point_x(),
+ principal_point_y());
+}
+
+void CameraIntrinsics::Unpack(const PackedIntrinsics& packed_intrinsics) {
+ SetFocalLength(packed_intrinsics.GetFocalLength(),
+ packed_intrinsics.GetFocalLength());
+
+ SetPrincipalPoint(packed_intrinsics.GetPrincipalPointX(),
+ packed_intrinsics.GetPrincipalPointY());
+}
+
// Polynomial model.
PolynomialCameraIntrinsics::PolynomialCameraIntrinsics()
@@ -195,6 +210,30 @@ void PolynomialCameraIntrinsics::InvertIntrinsics(
normalized_y);
}
+void PolynomialCameraIntrinsics::Pack(
+ PackedIntrinsics* packed_intrinsics) const {
+ CameraIntrinsics::Pack(packed_intrinsics);
+
+ packed_intrinsics->SetK1(k1());
+ packed_intrinsics->SetK2(k2());
+ packed_intrinsics->SetK3(k3());
+
+ packed_intrinsics->SetP1(p1());
+ packed_intrinsics->SetP2(p2());
+}
+
+void PolynomialCameraIntrinsics::Unpack(
+ const PackedIntrinsics& packed_intrinsics) {
+ CameraIntrinsics::Unpack(packed_intrinsics);
+
+ SetRadialDistortion(packed_intrinsics.GetK1(),
+ packed_intrinsics.GetK2(),
+ packed_intrinsics.GetK3());
+
+ SetTangentialDistortion(packed_intrinsics.GetP1(),
+ packed_intrinsics.GetP2());
+}
+
// Division model.
DivisionCameraIntrinsics::DivisionCameraIntrinsics()
@@ -245,6 +284,21 @@ void DivisionCameraIntrinsics::InvertIntrinsics(double image_x,
normalized_y);
}
+void DivisionCameraIntrinsics::Pack(
+ PackedIntrinsics* packed_intrinsics) const {
+ CameraIntrinsics::Pack(packed_intrinsics);
+
+ packed_intrinsics->SetK1(k1());
+ packed_intrinsics->SetK2(k2());
+}
+
+void DivisionCameraIntrinsics::Unpack(
+ const PackedIntrinsics& packed_intrinsics) {
+ CameraIntrinsics::Unpack(packed_intrinsics);
+
+ SetDistortion(packed_intrinsics.GetK1(), packed_intrinsics.GetK2());
+}
+
// Nuke model.
NukeCameraIntrinsics::NukeCameraIntrinsics()
@@ -255,7 +309,7 @@ NukeCameraIntrinsics::NukeCameraIntrinsics()
NukeCameraIntrinsics::NukeCameraIntrinsics(
const NukeCameraIntrinsics &from)
: CameraIntrinsics(from) {
- SetDistortion(from.k1(), from.k1());
+ SetDistortion(from.k1(), from.k2());
}
void NukeCameraIntrinsics::SetDistortion(double k1, double k2) {
@@ -296,6 +350,113 @@ void NukeCameraIntrinsics::InvertIntrinsics(double image_x,
normalized_y);
}
+void NukeCameraIntrinsics::Pack(
+ PackedIntrinsics* packed_intrinsics) const {
+ CameraIntrinsics::Pack(packed_intrinsics);
+
+ packed_intrinsics->SetK1(k1());
+ packed_intrinsics->SetK2(k2());
+}
+
+void NukeCameraIntrinsics::Unpack(
+ const PackedIntrinsics& packed_intrinsics) {
+ CameraIntrinsics::Unpack(packed_intrinsics);
+
+ SetDistortion(packed_intrinsics.GetK1(), packed_intrinsics.GetK2());
+}
+
+// Brown model.
+
+BrownCameraIntrinsics::BrownCameraIntrinsics()
+ : CameraIntrinsics() {
+ SetRadialDistortion(0.0, 0.0, 0.0, 0.0);
+ SetTangentialDistortion(0.0, 0.0);
+}
+
+BrownCameraIntrinsics::BrownCameraIntrinsics(
+ const BrownCameraIntrinsics &from)
+ : CameraIntrinsics(from) {
+ SetRadialDistortion(from.k1(), from.k2(), from.k3(), from.k4());
+ SetTangentialDistortion(from.p1(), from.p2());
+}
+
+void BrownCameraIntrinsics::SetRadialDistortion(double k1,
+ double k2,
+ double k3,
+ double k4) {
+ parameters_[OFFSET_K1] = k1;
+ parameters_[OFFSET_K2] = k2;
+ parameters_[OFFSET_K3] = k3;
+ parameters_[OFFSET_K4] = k4;
+ ResetLookupGrids();
+}
+
+void BrownCameraIntrinsics::SetTangentialDistortion(double p1,
+ double p2) {
+ parameters_[OFFSET_P1] = p1;
+ parameters_[OFFSET_P2] = p2;
+ ResetLookupGrids();
+}
+
+void BrownCameraIntrinsics::ApplyIntrinsics(double normalized_x,
+ double normalized_y,
+ double *image_x,
+ double *image_y) const {
+ ApplyBrownDistortionModel(focal_length_x(),
+ focal_length_y(),
+ principal_point_x(),
+ principal_point_y(),
+ k1(), k2(), k3(), k4(),
+ p1(), p2(),
+ normalized_x,
+ normalized_y,
+ image_x,
+ image_y);
+}
+
+void BrownCameraIntrinsics::InvertIntrinsics(
+ double image_x,
+ double image_y,
+ double *normalized_x,
+ double *normalized_y) const {
+ InvertBrownDistortionModel(focal_length_x(),
+ focal_length_y(),
+ principal_point_x(),
+ principal_point_y(),
+ k1(), k2(), k3(), k4(),
+ p1(), p2(),
+ image_x,
+ image_y,
+ normalized_x,
+ normalized_y);
+}
+
+void BrownCameraIntrinsics::Pack(
+ PackedIntrinsics* packed_intrinsics) const {
+ CameraIntrinsics::Pack(packed_intrinsics);
+
+ packed_intrinsics->SetK1(k1());
+ packed_intrinsics->SetK2(k2());
+ packed_intrinsics->SetK3(k3());
+ packed_intrinsics->SetK4(k4());
+
+ packed_intrinsics->SetP1(p1());
+ packed_intrinsics->SetP2(p2());
+}
+
+void BrownCameraIntrinsics::Unpack(
+ const PackedIntrinsics& packed_intrinsics) {
+ CameraIntrinsics::Unpack(packed_intrinsics);
+
+ SetRadialDistortion(packed_intrinsics.GetK1(),
+ packed_intrinsics.GetK2(),
+ packed_intrinsics.GetK3(),
+ packed_intrinsics.GetK4());
+
+ SetTangentialDistortion(packed_intrinsics.GetP1(),
+ packed_intrinsics.GetP2());
+}
+
std::ostream& operator <<(std::ostream &os,
const CameraIntrinsics &intrinsics) {
if (intrinsics.focal_length_x() == intrinsics.focal_length_x()) {
@@ -344,6 +505,18 @@ std::ostream& operator <<(std::ostream &os,
PRINT_NONZERO_COEFFICIENT(nuke_intrinsics, k2);
break;
}
+ case DISTORTION_MODEL_BROWN:
+ {
+ const BrownCameraIntrinsics *brown_intrinsics =
+ static_cast<const BrownCameraIntrinsics *>(&intrinsics);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, k1);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, k2);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, k3);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, k4);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, p1);
+ PRINT_NONZERO_COEFFICIENT(brown_intrinsics, p2);
+ break;
+ }
default:
LOG(FATAL) << "Unknown distortion model.";
}