- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello again,
I had a similar trouble to this thread ( ), so previously I tried to solve this issue by manual calibration.
I'm certain that I got more accurate calibration parameters, but it also makes weird 3D noise in point cloud.
I guess it came from the undistortion on depth image.
Anyway, at this moment, I am now trying to transfer my code from RSSDK for Windows (2016R3) to librealsense.
As expected (*sigh* ), I encountered another problem.
The problem now is the difference of lens distortion model.
In the previous RSSDK for Windows, the distortion model was radial/tangential distortion model, which is the same (?) with OpenCV.
Therefore, I just could utilize cv::undistort without a trouble.
Now I checked librealsense and just print out the calibration parameters in this new SDK, and I found that the distortion coefficients are different.
After few digging, I got it is Brown-Conrady distortion model.
However, I have no idea on this distortion model, and I cannot find the conversion between them, unfortunately.
So, here are my questions.
Is there any way to convert radial/tangential distortion model to Brown-Conrady model?
If it exists (I guess it should because librealsense just export different value without any touch), please provide us that information.
Thank you for your reading.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Perhaps the Librealsense mode RS_DISTORTION_MODIFIED_BROWN_CONRADY would be useful to you. It is equal to Brown-Conrady, except that tangential distortion is applied to radially distorted points
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Perhaps the Librealsense mode RS_DISTORTION_MODIFIED_BROWN_CONRADY would be useful to you. It is equal to Brown-Conrady, except that tangential distortion is applied to radially distorted points
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
MartyG, hello again!
I just quickly modified code in C-Tutorials-3-pointcloud in librealsense SDK and checked it works, by using "struct rs_intrinsics".
By the way, why C++ API (rs::intrinsics) does not permit to modify "model" ?
It is quite awkward, but I'm now doing like this:
rs::intrinsics depth_intrin;
// depth_intrin.model(RS_DISTORTION_MODIFIED_BROWN_CONRADY); // what I want to do ...
auto modifyIntrinsicToModifiedBrownConrady = [](rs_intrinsics *intrin) {
intrin->model = RS_DISTORTION_MODIFIED_BROWN_CONRADY;
};
modifyIntrinsicToModifiedBrownConrady(&depth_intrin); // awkward, but anyway it works ...
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I'm very glad you got it working!
The only useful reference I could find about model() in regard to rs:intrinsics and distortion is this one, which explains the difference between the RealSense SDK and Librealsense distortion systems.
https://www.bountysource.com/issues/48438489-librealsense-vs-win-dcm-realsense-distortion-model Bountysource
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page