iT邦幫忙

0

如何使用相機內外參數合併兩組點雲?

  • 分享至 

  • xImage

本人程式新手,最近新接觸到點雲覺得挺有趣,找到了一個資料集,試著自己操作了一下,但是合併的時候一直不成功,想知道問題到底出在哪裡。

使用的是redwood-3dscan數據集
用了這兩張圖片及對應的深度圖
https://ithelp.ithome.com.tw/upload/images/20230331/2015922774mAcRw50b.jpghttps://ithelp.ithome.com.tw/upload/images/20230331/20159227MZFHqswlbc.pnghttps://ithelp.ithome.com.tw/upload/images/20230331/20159227pvw4VnYvRX.jpghttps://ithelp.ithome.com.tw/upload/images/20230331/201592273PnUknnHgm.png
以及相機的內部參數
width=640, height=480, fx=525.0, fy=525.0, cx=319.5, cy=239.5
還有外部參數矩陣
(上)
[[0.991329, 0.0559279, -0.119017, 2.33994]
[-0.0703969, 0.990158, -0.121068, 2.58752]
[0.111073, 0.128395, 0.985497, -0.274198]
[0, 0, 0, 1]]
(下)
[[0.949165, 0.1907, -0.250508, 2.54486]
[-0.196732, 0.980476, 0.000979962, 2.41068]
[0.245799, 0.0483527, 0.968132, -0.351573]
[0, 0, 0, 1]]

程式碼如下

rgb_1 = o3d.io.read_image("上圖路徑")
rgb_2 = o3d.io.read_image("下圖路徑")
depth_1 = o3d.io.read_image("上圖深度")
depth_2 = o3d.io.read_image("下圖深度")
rgbd_1 = o3d.geometry.RGBDImage.create_from_color_and_depth(rgb_1, depth_1, 1000.0, 5.0, False)
rgbd_2 = o3d.geometry.RGBDImage.create_from_color_and_depth(rgb_2, depth_2, 1000.0, 5.0, False)

intrinsics = o3d.camera.PinholeCameraIntrinsic(
    width=640, height=480, fx=525.0, fy=525.0, cx=319.5, cy=239.5)

extrinsics_1 = [[0.991329, 0.0559279, -0.119017, 2.33994], [-0.0703969, 0.990158, -0.121068, 2.58752], [0.111073, 0.128395, 0.985497, -0.274198], [0.0, 0.0, 0.0, 1.0]]
extrinsics_2 = [[0.949165, 0.1907, -0.250508, 2.54486], [-0.196732, 0.980476, 0.000979962, 2.41068], [0.245799, 0.0483527, 0.968132, -0.351573], [0.0, 0.0, 0.0, 1.0]]

pcd_1 = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_1, intrinsics, extrinsics_2)
pcd_2 = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_2, intrinsics, extrinsics_1)

pcds = pcd_1 + pcd_2

但是合併出來的點雲有明顯的錯位
https://ithelp.ithome.com.tw/upload/images/20230331/20159227B3WDlVKobu.jpg
不知道是不是哪裡出錯了?
還請大家多多指教,感恩

貓虎皮 iT邦新手 3 級 ‧ 2023-04-01 20:14:40 檢舉
雖然我沒有碰過open3d,但為什麼
```py
pcd_1 = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_1, intrinsics, extrinsics_2)
pcd_2 = o3d.geometry.PointCloud.create_from_rgbd_image(rgbd_2, intrinsics, extrinsics_1)
```
的`extrinsics_2`、`extrinsics_1`是相互對調放,而不是一個放`extrinsics_2`、一個放單位矩陣?

(很抱歉留言不吃md)
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友回答

立即登入回答