本文內(nèi)容
● 獲取校準數(shù)據(jù)
● 坐標轉(zhuǎn)換函數(shù)
● 相關(guān)示例
● 后續(xù)步驟
本文完全復用Azure kinect 的校準函數(shù),使用校準函數(shù)可以轉(zhuǎn)換Femto Mega設(shè)備上每個傳感器的坐標系之間的點。 需要轉(zhuǎn)換整個圖像的應用程序可以利用圖像轉(zhuǎn)換提供的加速操作。
獲取校準數(shù)據(jù)
需要獲取設(shè)備校準數(shù)據(jù)才能執(zhí)行坐標系轉(zhuǎn)換。 校準數(shù)據(jù)存儲在 k4a_calibration_t 數(shù)據(jù)類型中。 該數(shù)據(jù)通過 k4a_device_get_calibration() 函數(shù),從設(shè)備中獲取。 校準數(shù)據(jù)針對不同設(shè)備,或同一個設(shè)備的不同工作模式都不一樣。 因此,k4a_device_get_calibration() 需要使用 depth_mode 和 color_resolution 參數(shù)作為輸入。
OpenCV 兼容性
校準參數(shù)與 OpenCV 兼容。 有關(guān)各個相機校正參數(shù)的詳細信息,另請參閱 OpenCV 文檔。 另請參閱 SDK 的 OpenCV 兼容性示例,其中演示了 k4a_calibration_t 類型與相應 OpenCV 數(shù)據(jù)結(jié)構(gòu)之間的轉(zhuǎn)換。
坐標轉(zhuǎn)換函數(shù)
下圖顯示了 Femto Mega的不同坐標系,以及用于在這些坐標系之間轉(zhuǎn)換的函數(shù)。 為了使插圖顯得簡潔,我們省略了陀螺儀和加速度傳感器的 3D 坐標系。
有關(guān)鏡頭失真的備注:2D 坐標始終引用 SDK 中失真的圖像。 SDK 的失真矯正示例 演示了圖像失真矯正。 一般情況下,3D 點永遠不會受到鏡頭失真的影響。
在 3D 坐標系之間轉(zhuǎn)換
函數(shù) k4a_calibration_3d_to_3d() 使用相機的外部校準將源坐標系的 3D 點轉(zhuǎn)換為目標坐標系的 3D 點。 源和目標可設(shè)置為四個 3D 坐標系中的任何一個,即,彩色相機、深度相機、陀螺儀或加速度傳感器。 如果源和目標相同,則返回未修改的輸入 3D 點作為輸出。
在 2D 與 3D 坐標系之間轉(zhuǎn)換
函數(shù) k4a_calibration_3d_to_2d() 將源坐標系的 3D 點轉(zhuǎn)換為目標相機的 2D 像素坐標。 此函數(shù)通常稱為投影函數(shù)。 盡管源可以設(shè)置為四個 3D 坐標系中的任何一個,但目標必須是深度相機或彩色相機。 如果源和目標不同,則會使用 k4a_calibration_3d_to_3d() 將輸入的 3D 點轉(zhuǎn)換為目標相機的 3D 坐標系。 以目標相機坐標系表示 3D 點后,將使用目標相機的內(nèi)部校準計算相應的 2D 像素坐標。 如果 3D 點超出了目標相機的可視區(qū)域,則有效值將設(shè)置為 0。
函數(shù) k4a_calibration_2d_to_3d() 將源相機的 2D 像素坐標轉(zhuǎn)換為目標相機坐標系的 3D 點。 源必須是彩色相機或深度相機。 目標可設(shè)置為四個 3D 坐標系中的任何一個。 除了 2D 像素坐標外,源相機圖像中像素的深度值(以毫米為單位)也需要作為函數(shù)的輸入,在彩色相機幾何中推導出深度值的一種方法是使用函數(shù) k4a_transformation_depth_image_to_color_camera()。 該函數(shù)使用源相機的內(nèi)部校準通過指定的像素坐標計算源相機焦點引出的 3D 射線。 然后,使用深度值查找此射線的確切 3D 點位置。 此操作通常稱為取消投影函數(shù)。 如果源和目標相機不同,該函數(shù)會通過 k4a_calibration_3d_to_3d() 將 3D 點轉(zhuǎn)換為目標的坐標系。 如果 2D 像素坐標超出了源相機的可視區(qū)域,則有效值將設(shè)置為 0。
函數(shù) k4a_calibration_2d_to_2d() 將源相機的 2D 像素坐標轉(zhuǎn)換為目標相機的 2D 像素坐標。 源和目標必須設(shè)置為彩色相機或深度相機。 該函數(shù)需要將源相機圖像中像素的深度值(以毫米為單位)作為輸入,在彩色相機幾何中推導出深度值的一種方法是使用函數(shù) k4a_transformation_depth_image_to_color_camera()。 它將調(diào)用 k4a_calibration_2d_to_3d() 轉(zhuǎn)換為源相機系統(tǒng)的 3D 點。 然后,它將調(diào)用 k4a_calibration_3d_to_2d() 轉(zhuǎn)換為目標相機圖像的 2D 像素坐標。 如果 k4a_calibration_2d_to_3d() 或 k4a_calibration_3d_to_2d() 返回無效的結(jié)果,則有效值將設(shè)置為 0。
相關(guān)示例
● 失真矯正示例
● 快速點云示例
了解相機校正后,接下來還可以了解設(shè)備同步。