Hi Chasco,
Thanks again for running my images through the DD tool chain! I really appreciate that. A couple comments in reply:
1. If you would like to share this data set with drone deploy to see if there are tweaks or things that could help them improve their results, that would be great. The area is a state park so there aren't any privacy or ownership issues with the images as far as I am aware.
2. The earlier link I posted to the images is still valid so if anyone else is interested enough in this thread to download them and process the images with other tools, I would love to see the results of that as well. For me it is really interesting to compare and contrast different results, but I don't have the resources to test all the tools out there. I think there are at least dozens of reasonable choices out there for doing image stitching and mapping.
3. I don't know anything about the internals of drone deploy, but I do know that typically: feature detector algorithms work on the gray scale version of the image and react to relative changes in pixel intensity. So I would anticipate that running a preprocessing step to tweak the color map or lighting would affect the results maybe a little, but maybe not as much as you would hope. One thing I will do is chop the image scale down to 50% or 25%. The reason is that this acts much like a noise filter and allows the feature detector to react better to real features in the image rather than potential sensor noise ... but this is one of those things that really depends on the context, the camera, the subject matter, the conditions, etc. The amount of scaling (if any) that helps the tool chain perform better really depends on the data set. Notice that scaling an image down to a smaller size yields some of the same benefits of flying at a higher altitude (sort of, partially ...)
4. I can speak to the holes in the point cloud. If you overlay the point cloud on top of the elevation model, you'll notice that the big gaps are in the areas of higher elevation + heavy forest. (Higher elevation and bare ground worked fine.) Why is this? First, if the whole area is flown at a fixed altitude, then the areas of higher terrain elevation will have less overlap and greater perspective change, and areas of lower elevation will have more overlap and less perspective change. Less overlap == harder to find good feature matches. Second, this is a forested area with steep terrain. This means that many of the features in image "A" will be parts of trees and branches as they intersect with each other and the ground. Move over 10-20 meters and now look at image "B". Even though the two images could have a lot of overlap, many of the features that are parts of trees and intersections between branches and shadows are now totally different features in image B. So you have this situation where many (most?) of the features aren't even the same feature in the overlapping image, you can't see much of the ground (or it's all white featureless snow), and combine this with areas of higher terrain with less overlap and more perspective change from one image to the neighbor image. It ends up being an almost insurmountable problem for a map stitching tool.
5. There is a related issue if you image a healthy corn field at low altitude, even when you get great 70-80% overlap. Imagine *all* the features in the entire image are parts of corn leaves or intersections of corn leaves. Imagine trying to match this up with the features of the neighbor image -- so many of the features are similar, or repeated, now add a 10-15 mph wind blowing the corn leaves around so they aren't even in the same places in the neighbor images. There is a "signal" in there somewhere, but the amount of noise is overwhelming and the stitching tools just can't find the true pattern of matches to make a fit. What's worse is that I can look at the pictures with my human eye and even when I know approximately how they go together, I still can't visually see the fit myself ... so if it's hard for our incredible amazing human to see the pattern, it's often way harder for a computer to figure it out with math tricks.
6. Sorry if I'm already way off into deep technical-ese here ... it's about to get worse!
What I have done in my own tool chain to improve the stitching process is this.
- I know the approximate location and orientation of the photo from the DJI xmp image meta data.
- I can estimate the surface elevation using SRTM (or using simple feature triangulation as I start to find matches between image pairs.)
- I can estimate the yaw error of the DJI drone as I begin to match pairs of images. Note this can range as far as +/- 20 degrees for a single mission!
- With that info I can often predict where the matches will be between a pair if images "A" and "B". I project a grid from image "B" onto my surface estimate, and then reproject that grid back into the pixel space of image "A". I can use that to derive a homography matrix between the pair of images. Then, all the true matches in the pair should approximiately honor that homography relationship. Matches that are too far away are impossible and I can immediately throw them out. From there the small amount of "signal" can begin to show through the shrinking sea of "noise". This process isn't perfect, but it allows me to find a lot more pair matches and build a point cloud with much better coverage than pix4d. The cost is that it is computationally harder and slower and processing takes a lot longer. So it's a trade off ... fast and easy (go with pix4d or drone deploy or something similar.) But if you are trying to extract the most out of your data set, it might be worth spending the extra time and doing the extra processing work ... but again, totally dependent on each of our own use-cases.
The mavic2 pro estimates it's roll, pitch, and yaw angles as it flies, and does the same for the gimble attittude. Here is a plot of (my) estimate of the mavic 2 pro's yaw error throughout a mission (3 batteries.) You can see the yaw error varies a *lot*. Despite that, it still is really good at flying a straight line so it really doesn't matter too much until you try to guess which features in image A should be plausible matches in image B:
Since we've also been talking about surface elevation as well ... it is another import piece of information needed to predict which features in image A should be plausible matches with image B, here is the SRTM surface elevation vs. my estimate of the surface elevation below each image in the "big circle area" data set we are looking at. You can see there is pretty good agreement in the larger trends, but lots of differences at each individual point: