DOI-USGS / usgscsm

This repository stores USGS Community Sensor Model (CSM) camera models
Other
26 stars 33 forks source link

No need for tolerance check for radial distortion #464

Closed oleg-alexandrov closed 1 year ago

oleg-alexandrov commented 1 year ago

This is a proposed fix to https://github.com/DOI-USGS/usgscsm/issues/461.

The issue here is that with the unmodified code the radial distortion and undistortion operations are not being applied when the pixel value is very close to the origin.

Ironically, this is when distortion and undistortion is most likely to converge well, as, radial distortion this is just some multiplications and additions. Radial undistortion is about the same thing.

There is no division by a number close to zero anywhere where one should need to ensure a tolerance must be respected.

I modified the unit test to make it more realistic, by using non-zero distortion coefficients. Before the proposed fix, the test will fail, as distortion and undistortion are not true inverse of each other. That is because, before the fix, the distortion operation was applied, since the pixel value is above the tolerance, but the undistortion operation is not applied, since then the pixel value is below the tolerance.

With this fix, the distortion and undistortion are consistently applied close to the origin and this unit test passes.

Licensing

This project is mostly composed of free and unencumbered software released into the public domain, and we are unlikely to accept contributions that are not also released into the public domain. Somewhere near the top of each file should have these words:

This work is free and unencumbered software released into the public domain. In jurisdictions that recognize copyright laws, the author or authors of this software dedicate any and all copyright interest in the software to the public domain.