isl-org / Open3D

Open3D: A Modern Library for 3D Data Processing
http://www.open3d.org
Other
11.37k stars 2.29k forks source link

What is the definition and unit for the extrinsic used in ScalableTSDFVolume::Integrate() #2372

Closed StevenShuoFeng closed 2 years ago

StevenShuoFeng commented 4 years ago

I'm referring to this example code to run TSDF integration of RGBD data, it sounds from the sample data that the input depth is in mm unit and the camera pose is in meter? The Integrate function did a scaling of the depth by 1000 by default.

I want to confirm, is the extrinsic defined as the transform mapping points from world coordinate to camera coordinate? And in some unit that's 1000 times of the depth unit? Tried to run with my data and it does not accumulate properly (misaligned from multiple frames), but at least did this 1000 scaling seems give me a reasonable mesh.

Another thing found while digging: I also found this scaling of the extrinsic by a float scalar applied to the whole extrinsic matrix.

This will change the last row from [0, 0, 0, 1] to [0, 0, 0, scalar]? Looks buggy to me.

syoels commented 3 years ago

I'm referring to this example code to run TSDF integration of RGBD data, it sounds from the sample data that the input depth is in mm unit and the camera pose is in meter? The Integrate function did a scaling of the depth by 1000 by default.

I want to confirm, is the extrinsic defined as the transform mapping points from world coordinate to camera coordinate? And in some unit that's 1000 times of the depth unit? Tried to run with my data and it does not accumulate properly (misaligned from multiple frames), but at least did this 1000 scaling seems give me a reasonable mesh.

Another thing found while digging: I also found this scaling of the extrinsic by a float scalar applied to the whole extrinsic matrix.

This will change the last row from [0, 0, 0, 1] to [0, 0, 0, scalar]? Looks buggy to me.

Hey! The example code link doesnt work. Anyone know where I can find it nowadays?

theNded commented 2 years ago

The examples can be found in examples/python/reconstruction_system. A newer API also provides a tutorial.

Everything is in meter unit after proper conversion. Depth images are typically divided by 1000, but in some cases (e.g,. TUM dataset) divided by 5000 or other values.

By definition, when we say extrinsic it is world to camera, and when we say pose it is camera to world.

Either extrinsic or pose ends with [0. 0. 0. 1] in a 4x4 transformation matrix.