mapillary / OpenSfM

Open source Structure-from-Motion pipeline
https://www.opensfm.org/
BSD 2-Clause "Simplified" License
3.38k stars 859 forks source link

Inquiry: Hemispherical Images from cameras like Parrot Bebop/Bebop2 #720

Open Saijin-Naib opened 3 years ago

Saijin-Naib commented 3 years ago

These sensors are nominally 180deg vert x 180deg horiz and are as such, neither really fisheye nor spherical cameras.

Does OpenSFM have a lens model that can accommodate this type of data? Is it more appropriate to force spherical over fisheye for these images in the meantime?

Forcing brown, auto, spherical, fisheye all lead to really incorrect reconstruction.

Example dataset:
https://testhub1.dronedb.app/r/W6oody/bluebell_Feb_21_85m_with_gcp

YanNoun commented 3 years ago

Hi @Saijin-Naib

I managed to get a nice reconstruction by tweaking the camera_models.json focal_ratio and set it to 0.36 instead of 0.16. And using fisheye obviously. The value of 0.16 that is red from the EXIF is correct, but there's a subtlety with this fisheye images.

This type of fisheye images introduce some global scale factor on the focal length that we're not going to support, so it would be better to support it through some calibration database values.

Yann

Screenshot 2021-03-15 at 17 10 40
Saijin-Naib commented 3 years ago

@YanNoun , thanks for taking a look at this! So as I suspected, these lenses are special/edge cases, right? But fundamentally, they are fisheye still? Quite interesting.

May I ask how you arrived at that scale factor? Is this something known, or is there a lot of maths/magic to derive this value?

@pierotofy , does this mean that any support we might want to add would have to be "downstream" from OpenSFM?

Saijin-Naib commented 3 years ago

I've begun asking around for sample data from other Parrot cameras.

Bebop 1:
https://parrotpilots.com/threads/data-request-parrot-bebop-1-survey-imagery.4535/

Disco:
https://parrotpilots.com/threads/data-request-parrot-disco-survey-imagery.4536/

Saijin-Naib commented 2 years ago

@YanNoun

According to this user (and my testing), we seem to be having a regression with reconstruction with the Parrot Bebop2 when using auto and fisheye. https://community.opendronemap.org/t/using-parrot-bebop-2-fisheye-lens-to-model/3824/9?u=saijin_naib

Do I need to put a sensor db entry for it to work with the exif.py override from #729 ?

YanNoun commented 2 years ago

Hi @Saijin-Naib ,

You can add it to the camera database here : https://github.com/mapillary/OpenSfM/commit/9268047c9763a58a4985b51a01b516c8823591db#diff-34d9ae480ee274b0f04757a8f293c760d7cc696d3da333608a92e7ce8cc976b6

Yann