使用 Azure Kinect 感應器 SDK 影像轉換

遵循特定功能,在 Azure Kinect DK 中使用和轉換協調相機系統之間的影像。

k4a_transformation 函式

前置詞為 k4a_transformation 的所有函式都會在整個影像上運作。 這些函式需要透過 k4a_transformation_create () 取得轉換控制代碼 k4a_transformation_t,而且未透過 k4a_transformation_destroy () 配置。 您也可以參閱 SDK 轉換範例,文中將示範如何使用本主題中的三個函式。

涵蓋的函式如下:

k4a_transformation_depth_image_to_color_camera

概觀

函式 k4a_transformation_depth_image_to_color_camera () 會將深度相機的深度圖從深度相機的觀點轉換成彩色相機的觀點。 此函式的設計目的是要產生所謂的 RGB-D 影像,其中 D 代表記錄深度值的額外影像通道。 如下圖所示,k4a_transformation_depth_image_to_color_camera () 的彩色影像和輸出結果看起來好像是取自相同的觀點,也就是彩色相機的觀點。

影像轉換

實作

此轉換函式比直接呼叫每個像素的 k4a_calibration_2d_to_2d () 更為複雜。 它會將三角形網格從深度相機的幾何變形為彩色相機的幾何。 三角形網格可用來避免在轉換深度影像中產生漏洞。 Z 緩衝區可確保已正確處理遮蔽。 此函式預設啟用 GPU 加速。

參數

輸入參數是轉換控制代碼和深度影像。 深度影像解析度必須符合在建立轉換控制代碼時所指定的 depth_mode。 例如,如果使用 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED 模式建立轉換控制代碼,則深度影像的解析度必須是 1024x1024 像素。 輸出是轉換的深度影像,使用者必須透過呼叫 k4a_image_create () 來配置。 轉換的深度影像解析度必須符合在建立轉換控制代碼時所指定的 color_resolution。 例如,如果色彩解析度設定為 K4A_COLOR_RESOLUTION_1080P,則輸出影像解析度必須為 1920x1080 像素。 輸出影像分散已設定為 width * sizeof(uint16_t),因為影像會儲存 16 位元深度值。

k4a_transformation_depth_image_to_color_camera_custom

概觀

函式 k4a_transformation_depth_image_to_color_camera () 會將深度相機的深度圖和自訂影像從深度相機的觀點轉換成彩色相機的觀點。 此函式作為 k4a_transformation_depth_image_to_color_camera () 的延伸模組,其設計目的是要產生對應的自訂影像,其中每個像素都符合彩色相機的對應像素座標和已轉換的深度影像。

實作

此轉換函式會產生與 k4a_transformation_depth_image_to_color_camera () 相同的已轉換深度影像。 若要轉換自訂影像,此函式提供使用線性插補或最接近像素插補的選項。 使用線性插補可以在已轉換的自訂影像中建立新的值。 使用最接近的最接近像素插補可防止原始影像中未出現的值出現在輸出影像中,但會導致影像較不平滑。 自訂影像應該是單一通道 8 位元或 16 位元。 此函式預設啟用 GPU 加速。

參數

輸入參數是轉換控制代碼、深度影像、自訂影像和插補類型。 深度影像和自訂影像解析度必須符合在建立轉換控制代碼時所指定的 depth_mode。 例如,如果使用 1024x1024 K4A_DEPTH_MODE_WFOV_UNBINNED 模式建立轉換控制代碼,則深度影像和自訂影像的解析度必須是 1024x1024 像素。 interpolation_type 應為 K4A_TRANSFORMATION_INTERPOLATION_TYPE_LINEARK4A_TRANSFORMATION_INTERPOLATION_TYPE_NEAREST。 輸出是已轉換的深度影像和已轉換的自訂影像,使用者必須透過呼叫 k4a_image_create () 來配置。 已轉換的深度影像和已轉換的自訂影像解析度必須符合在建立轉換控制代碼時所指定的 color_resolution。 例如,如果色彩解析度設定為 K4A_COLOR_RESOLUTION_1080P,則輸出影像解析度必須為 1920x1080 像素。 輸出深度影像分散已設定為 width * sizeof(uint16_t),因為影像會儲存 16 位元深度值。 輸入自訂影像和已轉換自訂影像的格式必須為 K4A_IMAGE_FORMAT_CUSTOM8K4A_IMAGE_FORMAT_CUSTOM16,對應的影像分散應該據以設定。

k4a_transformation_color_image_to_depth_camera

概觀

函式 k4a_transformation_color_image_to_depth_camera() 會將深度相機的彩色影像從彩色相機的觀點轉換成深度相機的觀點 (請參閱上圖)。 它可用來產生 RGB-D 影像。

實作

對於深度圖的每個像素,函式會使用像素的深度值來計算彩色影像中對應的子像素座標。 然後,我們會查詢彩色影像中此座標的色彩值。 雙線性插補會在彩色影像中執行,以取得子像素精確度的色彩值。 沒有相關深度讀數的像素會指派給輸出影像中的 BGRA 值 [0,0,0,0]。 此函式預設啟用 GPU 加速。 由於這個方法會在已轉換彩色影像中產生漏洞,而且不會處理遮蔽,因此建議您改用函式 k4a_transformation_depth_image_to_color_camera ()

參數

輸入參數是轉換控制代碼、深度影像和彩色影像。 深度和彩色影像的解析度必須符合建立轉換控制代碼時所指定的 depth_mode 和 color_resolution。 輸出是轉換的彩色影像,使用者必須透過呼叫 k4a_image_create () 來配置。 轉換的彩色影像解析度必須符合在建立轉換控制代碼時所指定的 depth_resolution。 輸出影像會儲存四個 8 位元值,代表每個像素的 BGRA。 因此,影像的分散是 width * 4 * sizeof(uint8_t)。 資料順序是交錯像素,也就是藍色值 - 像素 0、綠色值 - 像素 0、紅色值 - 像素 0、Alpha 值 - 像素 0、藍色值 - 像素 1 等等。

k4a_transformation_depth_image_to_point_cloud

概觀

函式 k4a_transformation_depth_image_to_point_cloud () 會將相機所拍攝的 2D 深度圖轉換成相同相機座標系統中的 3D 點雲端。 因此相機可以是深度或彩色相機。

實作

函式會提供對等的結果,讓每個像素執行 k4a_calibration_2d_to_2d (),但計算作業會更有效率。 呼叫 k4a_transformation_create () 時,我們會預先計算所謂的 xy 查閱資料表,以儲存每個影像像素的 x 和 y 比例因素。 呼叫 k4a_transformation_depth_image_to_point_cloud () 時,我們會將像素的 X 比例因素與像素的 Z 座標相乘,以取得像素的 3D X 座標。 同樣地,3D Y 座標是使用 Y 比例因素乘法來計算。 SDK 的快速點雲端範例示範如何計算 xy 資料表。 使用者可以遵循範例程式碼來實作此函式自己的版本,例如加速其 GPU 管線。

參數

輸入參數是轉換控制代碼、相機規範和深度影像。 如果相機規範設定為深度,則深度影像的解析度必須符合建立轉換控制碼時所指定的 depth_mode。 否則,如果規範設定為彩色相機,則解析度必須符合所選 color_resolution 的解析度。 輸出參數是 XYZ 影像,使用者必須透過呼叫 k4a_image_create () 來配置。 XYZ 影像解析度必須符合輸入深度圖的解析度。 我們會針對每個像素,以公釐為單位儲存三個帶正負號的 16 位元座標值。 因此,XYZ 影像分散會設定為 width * 3 * sizeof(int16_t)。 資料順序是交錯像素,也就是 X 座標 – 像素 0、Y 座標 – 像素 0、Z 座標 – 像素 0、X 座標 – 像素 1 等等。 如果無法將像素轉換成 3D,函式會將值 [0,0,0] 指派給像素。

範例

轉換範例

下一步

現在您已了解如何使用 Azure Kinect 感應器 SDK 影像轉換函式,您也可以了解

您也可以檢閱

座標系統