[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [54842] trunk/blender: Camera tracking: libmv distortion API now also uses camera intrinsics
Sergey Sharybin
sergey.vfx at gmail.com
Mon Feb 25 10:36:52 CET 2013
Revision: 54842
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=54842
Author: nazgul
Date: 2013-02-25 09:36:52 +0000 (Mon, 25 Feb 2013)
Log Message:
-----------
Camera tracking: libmv distortion API now also uses camera intrinsics
structure instead of passing all the parameters to every function.
Makes it much easier to tweak distortion model.
---
svn merge -r52854:52855 ^/branches/soc-2011-tomato
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52854
Modified Paths:
--------------
trunk/blender/extern/libmv/libmv-capi.cpp
trunk/blender/extern/libmv/libmv-capi.h
trunk/blender/source/blender/blenkernel/intern/tracking.c
Property Changed:
----------------
trunk/blender/
trunk/blender/source/blender/editors/interface/interface.c
trunk/blender/source/blender/editors/space_outliner/
Property changes on: trunk/blender
___________________________________________________________________
Modified: svn:mergeinfo
- /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037,48089,48092,48551-48552,48679,48790,48792-48793,49076,49087,49292,49294,49466,49894,50052,50126,52854,54573
+ /branches/ge_harmony:42255,42279-42282,42286,42302,42338,42349,42616,42620,42698-42699,42739,42753,42773-42774,42832,44568,44597-44598,44793-44794
/branches/soc-2011-cucumber:37517,38166-38167,38177,38179-38180,38187,38242,38384,38387,38403-38404,38407,38968,38970,38973,39045,40845,42997-42998,43439
/branches/soc-2011-tomato:42376,42378-42379,42383,42385,42395,42397-42400,42407,42411,42418,42443-42444,42446,42467,42472,42486,42650-42652,42654-42655,42709-42710,42733-42734,42801,43872,44130,44141,44147-44149,44151-44152,44229-44230,45623-45625,46037,48089,48092,48551-48552,48679,48790,48792-48793,49076,49087,49292,49294,49466,49894,50052,50126,52854-52855,54573
Modified: trunk/blender/extern/libmv/libmv-capi.cpp
===================================================================
--- trunk/blender/extern/libmv/libmv-capi.cpp 2013-02-25 09:27:57 UTC (rev 54841)
+++ trunk/blender/extern/libmv/libmv-capi.cpp 2013-02-25 09:36:52 UTC (rev 54842)
@@ -564,6 +564,9 @@
camera_intrinsics->SetRadialDistortion(camera_intrinsics_options->k1,
camera_intrinsics_options->k2,
camera_intrinsics_options->k3);
+
+ camera_intrinsics->SetImageSize(camera_intrinsics_options->image_width,
+ camera_intrinsics_options->image_height);
}
static libmv::Tracks getNormalizedTracks(libmv::Tracks *tracks, libmv::CameraIntrinsics *camera_intrinsics)
@@ -897,17 +900,13 @@
return (struct libmv_CameraIntrinsics *)&libmv_Reconstruction->intrinsics;
}
-struct libmv_CameraIntrinsics *libmv_CameraIntrinsicsNew(double focal_length, double principal_x, double principal_y,
- double k1, double k2, double k3, int width, int height)
+struct libmv_CameraIntrinsics *libmv_CameraIntrinsicsNew(libmv_cameraIntrinsicsOptions *libmv_camera_intrinsics_options)
{
- libmv::CameraIntrinsics *intrinsics= new libmv::CameraIntrinsics();
+ libmv::CameraIntrinsics *camera_intrinsics = new libmv::CameraIntrinsics();
- intrinsics->SetFocalLength(focal_length, focal_length);
- intrinsics->SetPrincipalPoint(principal_x, principal_y);
- intrinsics->SetRadialDistortion(k1, k2, k3);
- intrinsics->SetImageSize(width, height);
+ cameraIntrinsicsFromOptions(camera_intrinsics, libmv_camera_intrinsics_options);
- return (struct libmv_CameraIntrinsics *) intrinsics;
+ return (struct libmv_CameraIntrinsics *) camera_intrinsics;
}
struct libmv_CameraIntrinsics *libmv_CameraIntrinsicsCopy(struct libmv_CameraIntrinsics *libmvIntrinsics)
@@ -925,40 +924,63 @@
delete intrinsics;
}
-void libmv_CameraIntrinsicsUpdate(struct libmv_CameraIntrinsics *libmvIntrinsics, double focal_length,
- double principal_x, double principal_y, double k1, double k2, double k3, int width, int height)
+void libmv_CameraIntrinsicsUpdate(struct libmv_CameraIntrinsics *libmv_intrinsics,
+ libmv_cameraIntrinsicsOptions *libmv_camera_intrinsics_options)
{
- libmv::CameraIntrinsics *intrinsics = (libmv::CameraIntrinsics *) libmvIntrinsics;
+ libmv::CameraIntrinsics *camera_intrinsics = (libmv::CameraIntrinsics *) libmv_intrinsics;
- if (intrinsics->focal_length() != focal_length)
- intrinsics->SetFocalLength(focal_length, focal_length);
+ double focal_length = libmv_camera_intrinsics_options->focal_length;
+ double principal_x = libmv_camera_intrinsics_options->principal_point_x;
+ double principal_y = libmv_camera_intrinsics_options->principal_point_y;
+ double k1 = libmv_camera_intrinsics_options->k1;
+ double k2 = libmv_camera_intrinsics_options->k2;
+ double k3 = libmv_camera_intrinsics_options->k3;
+ int image_width = libmv_camera_intrinsics_options->image_width;
+ int image_height = libmv_camera_intrinsics_options->image_height;
- if (intrinsics->principal_point_x() != principal_x || intrinsics->principal_point_y() != principal_y)
- intrinsics->SetPrincipalPoint(principal_x, principal_y);
+ /* try avoid unnecessary updates so pre-computed distortion grids are not freed */
- if (intrinsics->k1() != k1 || intrinsics->k2() != k2 || intrinsics->k3() != k3)
- intrinsics->SetRadialDistortion(k1, k2, k3);
+ if (camera_intrinsics->focal_length() != focal_length)
+ camera_intrinsics->SetFocalLength(focal_length, focal_length);
- if (intrinsics->image_width() != width || intrinsics->image_height() != height)
- intrinsics->SetImageSize(width, height);
+ if (camera_intrinsics->principal_point_x() != principal_x ||
+ camera_intrinsics->principal_point_y() != principal_y)
+ {
+ camera_intrinsics->SetPrincipalPoint(principal_x, principal_y);
+ }
+
+ if (camera_intrinsics->k1() != k1 ||
+ camera_intrinsics->k2() != k2 ||
+ camera_intrinsics->k3() != k3)
+ {
+ camera_intrinsics->SetRadialDistortion(k1, k2, k3);
+ }
+
+ if (camera_intrinsics->image_width() != image_width ||
+ camera_intrinsics->image_height() != image_height)
+ {
+ camera_intrinsics->SetImageSize(image_width, image_height);
+ }
}
-void libmv_CameraIntrinsicsExtract(struct libmv_CameraIntrinsics *libmvIntrinsics, double *focal_length,
- double *principal_x, double *principal_y, double *k1, double *k2, double *k3, int *width, int *height) {
- libmv::CameraIntrinsics *intrinsics= (libmv::CameraIntrinsics *) libmvIntrinsics;
- *focal_length = intrinsics->focal_length();
- *principal_x = intrinsics->principal_point_x();
- *principal_y = intrinsics->principal_point_y();
- *k1 = intrinsics->k1();
- *k2 = intrinsics->k2();
+void libmv_CameraIntrinsicsExtract(struct libmv_CameraIntrinsics *libmv_intrinsics, double *focal_length,
+ double *principal_x, double *principal_y, double *k1, double *k2, double *k3, int *width, int *height)
+{
+ libmv::CameraIntrinsics *camera_intrinsics = (libmv::CameraIntrinsics *) libmv_intrinsics;
+
+ *focal_length = camera_intrinsics->focal_length();
+ *principal_x = camera_intrinsics->principal_point_x();
+ *principal_y = camera_intrinsics->principal_point_y();
+ *k1 = camera_intrinsics->k1();
+ *k2 = camera_intrinsics->k2();
}
-void libmv_CameraIntrinsicsUndistortByte(struct libmv_CameraIntrinsics *libmvIntrinsics,
+void libmv_CameraIntrinsicsUndistortByte(struct libmv_CameraIntrinsics *libmv_intrinsics,
unsigned char *src, unsigned char *dst, int width, int height, float overscan, int channels)
{
- libmv::CameraIntrinsics *intrinsics = (libmv::CameraIntrinsics *) libmvIntrinsics;
+ libmv::CameraIntrinsics *camera_intrinsics = (libmv::CameraIntrinsics *) libmv_intrinsics;
- intrinsics->Undistort(src, dst, width, height, overscan, channels);
+ camera_intrinsics->Undistort(src, dst, width, height, overscan, channels);
}
void libmv_CameraIntrinsicsUndistortFloat(struct libmv_CameraIntrinsics *libmvIntrinsics,
@@ -986,85 +1008,77 @@
/* ************ distortion ************ */
-void libmv_undistortByte(double focal_length, double principal_x, double principal_y, double k1, double k2, double k3,
- unsigned char *src, unsigned char *dst, int width, int height, float overscan, int channels)
+void libmv_undistortByte(libmv_cameraIntrinsicsOptions *libmv_camera_intrinsics_options,
+ unsigned char *src, unsigned char *dst, int width, int height,
+ float overscan, int channels)
{
- libmv::CameraIntrinsics intrinsics;
+ libmv::CameraIntrinsics camera_intrinsics;
- intrinsics.SetFocalLength(focal_length, focal_length);
- intrinsics.SetPrincipalPoint(principal_x, principal_y);
- intrinsics.SetRadialDistortion(k1, k2, k3);
+ cameraIntrinsicsFromOptions(&camera_intrinsics, libmv_camera_intrinsics_options);
- intrinsics.Undistort(src, dst, width, height, overscan, channels);
+ camera_intrinsics.Undistort(src, dst, width, height, overscan, channels);
}
-void libmv_undistortFloat(double focal_length, double principal_x, double principal_y, double k1, double k2, double k3,
- float *src, float *dst, int width, int height, float overscan, int channels)
+void libmv_undistortFloat(libmv_cameraIntrinsicsOptions *libmv_camera_intrinsics_options,
+ float *src, float *dst, int width, int height,
+ float overscan, int channels)
{
- libmv::CameraIntrinsics intrinsics;
+ libmv::CameraIntrinsics camera_intrinsics;
- intrinsics.SetFocalLength(focal_length, focal_length);
- intrinsics.SetPrincipalPoint(principal_x, principal_y);
- intrinsics.SetRadialDistortion(k1, k2, k3);
+ cameraIntrinsicsFromOptions(&camera_intrinsics, libmv_camera_intrinsics_options);
- intrinsics.Undistort(src, dst, width, height, overscan, channels);
+ camera_intrinsics.Undistort(src, dst, width, height, overscan, channels);
}
-void libmv_distortByte(double focal_length, double principal_x, double principal_y, double k1, double k2, double k3,
- unsigned char *src, unsigned char *dst, int width, int height, float overscan, int channels)
+void libmv_distortByte(libmv_cameraIntrinsicsOptions *libmv_camera_intrinsics_options,
+ unsigned char *src, unsigned char *dst, int width, int height,
+ float overscan, int channels)
{
- libmv::CameraIntrinsics intrinsics;
+ libmv::CameraIntrinsics camera_intrinsics;
- intrinsics.SetFocalLength(focal_length, focal_length);
- intrinsics.SetPrincipalPoint(principal_x, principal_y);
- intrinsics.SetRadialDistortion(k1, k2, k3);
+ cameraIntrinsicsFromOptions(&camera_intrinsics, libmv_camera_intrinsics_options);
- intrinsics.Distort(src, dst, width, height, overscan, channels);
+ camera_intrinsics.Distort(src, dst, width, height, overscan, channels);
}
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list