Lens calibration of thermal camera DJI 3T part two

Hey folks, it’s been a while!

In a recent topic Lens calibration of thermal camera DJI 3T? I’ve been exploring the possibilities of calibrating the thermal lens of my M3T for better orthophoto generation.

Time to share my results so far!

The processing parameters I used are (still experimenting a lot here):

camera-lens: brown, cameras: {"dji m3t 640 512 fisheye_opencv 1.1111":{"projection_type":"fisheye_opencv","width":640,"height":512,"focal_x":1.125,"focal_y":1.125,"c_x":0,"c_y":0.35,"k1":-0.0015,"k2":-0.018,"k3":0,"k4":0}}, feature-quality: ultra, feature-type: dspsift, gps-accuracy: 3.3, matcher-neighbors: 8, min-num-features: 60000, no-gpu: true, optimize-disk-space: true, orthophoto-resolution: 0.1, pc-filter: 1, pc-quality: high, pc-rectify: true, rerun-from: dataset, use-3dmesh: true

The log:
log.txt (7.3 MB)

The camera parameters are a combination of me trying to understand the undistortion process in OpenCV and the generated camera parameters I got from a previous set in WebODM which was looking okay. My thanks to smathermather for the brilliant idea!

Is it perfect? No. Certainly not. There are still a few artifacts in the orthophoto but it enables us to look for faults in the plant.

Something weird - I need to keep the use-3dmesh: true option set, or else the orthophoto is completely scrambled. Any idea why that might be? Also the 3d-mesh is inverse-bowl shaped, so the middle of the plant is higher than the edges.

Happy computing to you all!

I just realized something when converting a fresh data set of thermal images for processing. It might be obvious but I’ve only noticed it this clearly so far:


Can you see the reflection of the clouds in the modules? The same cloud shows up on at least 50-60 images in my data set. Now imagine extracting features and matching here when using rough GPS-data without RTK. This might be why the orthophoto generation produces so many artifacts in WebODM.

Feel free to correct me here of course!

This is an indication that your calibration parameters are a little off. It’s pretty tricky to get great calibration from checkerboard patterns for a variety of reasons. I had hoped it would be good enough given it’s a fixed lens, but there are challenges with ensuring sufficient coverage.

Two additional thoughts:

Have you checked your image exif for calibration info? DJI often includes both target and measured calibration coefficients in their tags.

If those tags don’t exist, a better way to generate your parameters that with checkerboards would be to plan a high overlap / multiple angle flight over a comparatively diffuse reflector like a patch of vegetation. Process the data in OpenDroneMap, which will provide the parameters that you can use in future flights.

Could be a factor for sure. Reflections are a photogrammetric nightmare. But, let’s get calibration figured out first, and see if that takes care of most of the issues.

Thank you for your reply! Like really, I’m super grateful for your help. I’m just getting started with photogrammetry & drones and doing so with infrared images seems like the hard way. The learning curve has been pretty steep so far!

So let’s say I’d make 3 or 4 flights at different angles at the same flight height over the same patch of vegetation, load all those images in ODM and hope that it spits out usable calibration parameters? :smiley: In the standard flight guidelines also different heights are recommended, if I remember correctly. Do you think that’d help too? I’d also fly at nadir and some flights at 5° cam angle. Yay, nay?

Thanks, yet again!

Sounds about right. You could do some flights at 45 degrees too.

Perfect, thank you! As usual, gonna try it and report the results. Have a great weekend!