Initial Alignment : There is noticeable accumulated error on the far left side.
Viewer
After Bundle Adjustment : Error corrected. Viewer
Initial Alignment : Due to a rather large number of images (56), many noticeable
errors appear throughout the scene. Especially on the upper parts of the image.
Viewer
After Bundle Adjustment : Alignment errors are corrected throughout the
scene. The error dropped by 92%. Viewer
Initial Alignment : The far left side shows very large gap due to accumulated
alignment error. Viewer
After bundle adjustment : The gap closed perfectly. The error
dropped by 90%. Viewer
Most visible errors on the right side of the image as you go up the
stairs from current position, and near the elevator on the left side of
the image. Viewer
After bundle adjustment : All visible errors are removed. The error dropped
by 95%. Viewer
Initial Alignment : Noticeable misalignments near the windows.
Viewer
After bundle adjustment : Major visible errors removed. The error dropped by
90%. Viewer
Initial Alignment : This worked really well. You can notice the details on the
curtains already. But there are a few blurry regions. Viewer
After bundle adjustment : The blurry regions are all clear now. The error
dropped by 85%. Viewer
Initial Alignment.Viewer
After bundle adjustment : Worked very well overall, but missed a spot in the
right side of the image due to lack of features there.
Viewer
Panorama produced by Microsoft production code.
Viewer
Panorama produced by my implementation. The code makes similar mistakes
around the center of image. I used focal_length = 634
and k1 =
-0.0375
, where k1 is calculated as given_focal_length * scale_ratio
.
Viewer
For the weighting in the blending routine, I used the multiplication of each values along x,y axes, instead of the regular 2D hat function, to gave a smooth looking panorama with less noticeable image boundaries. This also made the image corners less visible in the final blending.
I used Template Numerical Toolkit ( TNT )
for least_squares
and svd
routines. This improved the
performance a lot.
In the initial alignment stage, I noticed accumulated error generated by depth of image tree is very severe. Since any number of inliers seemed to give almost perfect alignment for most pairs of images, I decided to restrict vertical growth of the tree by allowing the change of parent only when it finds a new parent with 2~4 times more inliers than the previous one. This was effective because if the previous one has only a few inliers then the better match is still likely to be selected, but when the parent has 'enough' inliers already, we can avoid additional deepening of the tree. This also has the advantage of making the nearby images have small distance so that we can remove the misalignments due to `zig-zag'ging of the image tree throughout the scene.
Project code now handles set of images with different dimensions correctly. Antcrim-Piazzanova sequence was created without any manual file handling.
Reported a bug in the alignment code.
I found the focal length for CS30012929 camera is 681 rather than 674.
nRANSAC is adjusted in every pair alignment depending on inlier size. My initial hope was that this would avoid the cases when only bad inliers are chosen. I could also process pairs where inliers are few. But of course, this did not make more than slight changes in the output, because the probability of finding only bad pairs of inliers for least squares fit was exponentially small.
The tree leaves and grass look blurry in Palo Alto sequence. It could be due to unknown radial distortion or just a lot wind blowing at that time.