I want to implement something but I’m not sure how to do so.
I’m trying to add change detection into WebODM and, in my algorithm, I’m currently using both the DSM and DTM. Now, the problem is that two flights of the same area will probably never be perfectly aligned, so there is some noise added.
Looking for ways to fix this, I found that running ICP helped a lot in reducing the amount of noise when comparing. After running ICP, I would generate the DEMs and then compare them. The problem is, that the code necessary to generate the DEMs is in ODM, while I’m trying to add a plugin to WebODM.
So I thought of a couple of options:
Maybe, an alignment process could be added as an option to ODM. The task to “align to” could be added as a parameter or something similar. It’s important to mention that I don’t think there is something like this already present on ODM, so it might be confusing for users.
A second option, would be to apply ICP on the WebODM plugin, and then re-generate the DEMs. The problem is that this code is on ODM, so I would need to copy it, and all the needed libraries. Honestly, I’m not a fan of this particular option.
Finally, the other choice I thought of was to try to run ICP on the clouds (on the WebODM code) and somehow try to apply the resulting transformation onto the DEMs. I’m not 100% sure if it is possible or how hard it can be, but it might be an option.
What do you think? Do you know any other options? Are you aware of an algorithm that would have a similar effect to ICP that works on DEMs?
If the interest is a WebODM plugin, then options 2 and 3 are probably best.
If you’re trying to avoid code duplication, then the first step might be that of isolating the DSM/DTM generation code from ODM and place it in a common library/module (this could be an interesting idea for a new OpenDroneMap project… interested?), then refactor the ODM code to use the library, then import it into WebODM… voila’, no code duplication (and many people that might be interested in generating DEMs from point clouds without the rest of the photogrammetry tools will be grateful too).
On the alignment issue, I think this is an open area of research. But I would expect results to never align perfectly, unless GCPs are used (and even then…).
I think change detection could be done at low resolutions, after noise filtering, using large areas for comparisons.
I think that probably option 2 is the best solution, but I’m not sure how much work it would require. Is there another example of something like this already in use on the ODM ecosystem?
Yes, PyODM is an example where we factored out all NodeODM communication logic and then imported it into both WebODM and ODM. This way we have a single codebase for all NodeODM-related logic.
Wow this is great! The problem is I don’t know how to use external plugins in WebODM.
Can someone help me find out how I can import/us this in my WebODM account please?
If you go to the Administration menu option on the left, and then to Plugins, you will be able to enable and disable all Plugins that are bundled with WebODM.