Fix T67089: Solve camera motion generates "Solve error: nan"
The code was missing some checks for whether keyframe selection went successfully and whether reconstruction has been successfully initialized. The interface still gives quite generic message, with the details printed to the console. This can be addressed separately.
This commit is contained in:
parent
361d578f9d
commit
7d65827980
Notes:
blender-bot
2023-02-14 01:45:58 +01:00
Referenced by issue #67089, Solve camera motion generates "Solve error: nan"
|
@ -264,15 +264,15 @@ libmv_Reconstruction *libmv_solveReconstruction(
|
|||
|
||||
update_callback.invoke(0, "Selecting keyframes");
|
||||
|
||||
selectTwoKeyframesBasedOnGRICAndVariance(tracks,
|
||||
if (selectTwoKeyframesBasedOnGRICAndVariance(tracks,
|
||||
normalized_tracks,
|
||||
*camera_intrinsics,
|
||||
keyframe1,
|
||||
keyframe2);
|
||||
|
||||
/* so keyframes in the interface would be updated */
|
||||
libmv_reconstruction_options->keyframe1 = keyframe1;
|
||||
libmv_reconstruction_options->keyframe2 = keyframe2;
|
||||
keyframe2)) {
|
||||
/* so keyframes in the interface would be updated */
|
||||
libmv_reconstruction_options->keyframe1 = keyframe1;
|
||||
libmv_reconstruction_options->keyframe2 = keyframe2;
|
||||
}
|
||||
}
|
||||
|
||||
/* Actual reconstruction. */
|
||||
|
@ -283,7 +283,7 @@ libmv_Reconstruction *libmv_solveReconstruction(
|
|||
|
||||
LG << "number of markers for init: " << keyframe_markers.size();
|
||||
|
||||
if (keyframe_markers.size() < 8) {
|
||||
if (keyframe_markers.size() < 16) {
|
||||
LG << "No enough markers to initialize from";
|
||||
libmv_reconstruction->is_valid = false;
|
||||
return libmv_reconstruction;
|
||||
|
@ -291,13 +291,18 @@ libmv_Reconstruction *libmv_solveReconstruction(
|
|||
|
||||
update_callback.invoke(0, "Initial reconstruction");
|
||||
|
||||
EuclideanReconstructTwoFrames(keyframe_markers, &reconstruction);
|
||||
if (!EuclideanReconstructTwoFrames(keyframe_markers, &reconstruction)) {
|
||||
LG << "Failed to initialize reconstruction";
|
||||
libmv_reconstruction->is_valid = false;
|
||||
return libmv_reconstruction;
|
||||
}
|
||||
|
||||
EuclideanBundle(normalized_tracks, &reconstruction);
|
||||
EuclideanCompleteReconstruction(normalized_tracks,
|
||||
&reconstruction,
|
||||
&update_callback);
|
||||
|
||||
/* Refinement/ */
|
||||
/* Refinement. */
|
||||
if (libmv_reconstruction_options->refine_intrinsics) {
|
||||
libmv_solveRefineIntrinsics(
|
||||
tracks,
|
||||
|
|
Loading…
Reference in New Issue