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