Commit: 5ef5fff336550aed96c0aa99ee694760d0b71fd3
Author: Tianwei Shen
Date: Wed Jun 29 23:46:23 2016 +0800
Branches: soc-2016-multiview
https://developer.blender.org/rB5ef5fff336550aed96c0aa99ee694760d0b71fd3
The pipeline can run now, but the reconstruction error is huge
===================================================================
M intern/libmv/libmv/autotrack/pipeline.cc
M source/blender/blenloader/intern/writefile.c
===================================================================
diff --git a/intern/libmv/libmv/autotrack/pipeline.cc
b/intern/libmv/libmv/autotrack/pipeline.cc
index 7bd99e4..2f976fa 100644
--- a/intern/libmv/libmv/autotrack/pipeline.cc
+++ b/intern/libmv/libmv/autotrack/pipeline.cc
@@ -325,6 +325,7 @@ void EuclideanScaleToUnity(Reconstruction *reconstruction) {
int clip_num = reconstruction->GetClipNum();
const vector<vector<CameraPose> >& all_cameras =
reconstruction->camera_poses();
+ LG << "[EuclideanScaleToUnity] camera number: " << clip_num << '\n';
// Calculate center of the mass of all cameras.
int total_valid_cameras = 0;
Vec3 cameras_mass_center = Vec3::Zero();
@@ -337,6 +338,7 @@ void EuclideanScaleToUnity(Reconstruction *reconstruction) {
}
}
cameras_mass_center /= total_valid_cameras;
+ LG << "[EuclideanScaleToUnity] camera number: " << total_valid_cameras <<
'\n';
// Find the most distant camera from the mass center.
double max_distance = 0.0;
@@ -359,9 +361,12 @@ void EuclideanScaleToUnity(Reconstruction *reconstruction)
{
// Rescale cameras positions.
for(int i = 0; i < clip_num; i++) {
for (int j = 0; j < all_cameras[i].size(); ++j) {
- int image = all_cameras[i][j].frame;
- CameraPose *camera = reconstruction->CameraPoseForFrame(i, image);
- camera->t = camera->t * scale_factor;
+ int frame = all_cameras[i][j].frame;
+ CameraPose *camera = reconstruction->CameraPoseForFrame(i, frame);
+ if (camera != NULL)
+ camera->t = camera->t * scale_factor;
+ else
+ LG << "[EuclideanScaleToUnity] invalid camera: " << i << " " << frame
<< "\n";
}
}
@@ -370,7 +375,10 @@ void EuclideanScaleToUnity(Reconstruction *reconstruction)
{
for (int i = 0; i < all_points.size(); ++i) {
int track = all_points[i].track;
Point *point = reconstruction->PointForTrack(track);
- point->X = point->X * scale_factor;
+ if(point != NULL)
+ point->X = point->X * scale_factor;
+ else
+ LG << "[EuclideanScaleToUnity] invalid point: " << i << "\n";
}
}
diff --git a/source/blender/blenloader/intern/writefile.c
b/source/blender/blenloader/intern/writefile.c
index 61fdad2..4badb55 100644
--- a/source/blender/blenloader/intern/writefile.c
+++ b/source/blender/blenloader/intern/writefile.c
@@ -3467,7 +3467,7 @@ static void write_movieCorrespondences(WriteData *wd,
ListBase *correspondence_b
{
MovieTrackingCorrespondence *corr;
for (corr = correspondence_base->first; corr != NULL; corr =
corr->next) {
- writestruct(wd, DATA, "MovieTrackingCorrespondence", 1, corr);
+ writestruct(wd, DATA, MovieTrackingCorrespondence, 1, corr);
}
}
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs