iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0

在電腦視覺相關的研究中,我們常常需要在一些公開的數據集上做實驗,這樣才能確保我們的演算法是可以與其他人的研究成果進行比較的,並且提供他人驗證我們提出的方法的機會。

舉例來說,在 3D 重建和相機姿態估計的研究問題上,常常被拿來使用的有 TUM RGB-D Dataset 數據集,和 ScanNet 數據集。這些數據集包含了 RGB-D 圖像,以及相機的姿態資訊,可以拿來訓練,或是測試我們的演算法正確性。

在接下來的介紹與實作中,我們會使用 TUM RGB-D Dataset 作為範例。

首先我們要來下載數據集,這裡我們選擇 Freiburg2 Desk 這個場景作為範例 [連結]

以下是該場景的一些圖片,基本上這個相機沿著桌子的周圍拍了一圈,總共含有大約 3000 張圖片。

desk1

desk2

解壓縮後,我們可以看到以下的資料夾結構:

rgbd_dataset_freiburg2_desk/
├── rgb/        # RGB 圖像
├── depth/      # 深度圖像
├── rgb.txt
├── depth.txt
├── groundtruth.txt     # 相機的姿態
└── accelerometer.txt   # IMU 相關資訊

其中,rgb.txt 列舉了每一幀的 timestamp 和 RGB 圖像檔名,類似像這樣:

# Timestamp filename
1311868165.199145 rgb/1311868165.199145.png
1311868165.231193 rgb/1311868165.231193.png
1311868165.263005 rgb/1311868165.263005.png

其中 groundtruth.txt 也是按照這個格式,列舉了每一幀的 timestamp 和相機的姿態資訊,類似像這樣:

# Timestamp tx ty tz qx qy qz qw
1311868163.8697 -0.1357 -1.4217 1.4764 0.6453 -0.5498 0.3363 -0.4101
1311868163.8731 -0.1357 -1.4218 1.4764 0.6454 -0.5497 0.3361 -0.4102
1311868163.8764 -0.1358 -1.4219 1.4764 0.6455 -0.5499 0.3358 -0.4101

tx ty tz就是相機的位置,qx qy qz qw 則是相機的旋轉(用四元數表達)。

我們可以用以下的程式碼來轉換成我們熟悉的 4x4 extrinsic matrix:

import numpy as np
from scipy.spatial.transform import Rotation

def to_matrix(qx, qy, qz, qw, tx, ty, tz):
    r = Rotation.from_quat([qx, qy, qz, qw])
    t = np.array([tx, ty, tz])
    matrix = np.eye(4)
    matrix[:3, :3] = r.as_matrix()
    matrix[:3, 3] = t
    return matrix

也就是說,我們看透過讀取 rgb.txtgroundtruth.txt 來讀取對應的圖片和相機的姿態。


上一篇
Day8: 相機姿態估計 (Camera pose estimation)
下一篇
Day10: 數據集讀取
系列文
3D 重建實戰:使用 2D 圖片做相機姿態估計與三維空間重建30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言