(1) 影像擷取
為擷取 Kinect 的影像資訊,系統中安裝了 Microsoft 的官方開發套件 Kinect for Windows SDK 2.0,其中包含了 Kinect 的驅動程式與許多開發工具、範例程式,圖 3 - 16 為範例程式擷取的影像結果。研究中採用 LabVIEW MakerHub 所編撰的 Interface for Microsoft Kinect One by LabVIEW MakerHub 套件進行軟體開發,藉由 此套件能夠於 LabVIEW 中擷取 Kinect 的 RGB 影像、紅外線影像、深度影像與骨 架資訊,提供研究中所需的影像感測資訊,並搭配 NI Vision Assistant 14.0 進行影 像處理程式的撰寫。
圖 3 - 16 以範例程式擷取深度影像 (2) 感測器座標系轉換
Kinect 取出的深度影像資訊為 512 x 424 之二維矩陣,每個像素內存入該點的 深度資訊,範圍為 0~10000 mm,又稱為深度座標系。深度座標系即為 Kinect 輸出 的原始深度影像,此資訊無法直接用來做飛行器定位。其 X、Y 軸的單位為像素、
Z 軸的單位為公釐(mm),三軸單位並不一致,直接套用會隨實際距離產生比例誤 差,越近的物體在影像上越大,越遠的物體在影像上越小。若直接套用自動控制 模型,將無法在不同距離下提供一致的控制輸出。因此需要建立自深度座標系轉
圖 3 - 17 Kinect 視角示意圖
圖 3 - 17 為 Kinect 攝影機之視角示意圖,由於受視角的關係,不同距離影像 的像素所代表之實際長度與寬度都不一樣,會與拍攝距離成正比,距離越近,每 一像素換算成的寬度就越小,反之亦然。欲建立轉換函式,須先定義空間中同一 點的兩個座標系統,分別為:深度座標系 D:{ 𝑥𝑡𝑑 , 𝑦𝑡𝑑 , 𝑧𝑡𝑑 },世界座標系 W:
{ 𝑥𝑡𝑤 , 𝑦𝑡𝑤 , 𝑧𝑡𝑤 },其深度座標(𝑥𝑡𝑑 , 𝑦𝑡𝑑 , 𝑧𝑡𝑑)與世界座標(𝑥𝑡𝑤 , 𝑦𝑡𝑤 , 𝑧𝑡𝑤)之關係式如 下:
𝑥𝑡𝑤 = 𝐶𝑥 × 𝑥𝑡𝑑 × 𝑧𝑡𝑑 𝑦𝑡𝑤 = 𝐶𝑦 × 𝑥𝑡𝑑 × 𝑧𝑡𝑑
𝑧𝑡𝑤 = 𝑧𝑡𝑑 (式 3-1)
深度座標轉世界座標的轉換公式,為求解常數𝐶𝑥, 𝐶𝑦值,可帶入官方提供的規 格進行推算,影像視角為 70 x 60、解析度為 512 x 424,取其邊界條件,推導如下:
θ= 70°/ 2 = 35°
𝑥𝑡𝑤 = tan 𝜃 × 𝑧𝑡𝑑
𝐶𝑥 =tan 𝜃 =tan(70/2)°= 2.735 × 10−3 (式 3-2)
同理推得 y 方向,如下列所示。
圖 3 - 18 空間擷取範圍示意圖
(4) 影像疊合
由於飛行器在深度影像中所占的面積並不大,在區塊辨識上容易因為像素點 過少而無法辨識。當飛行器距離 Kinect 越遠時,深度影像上所呈現出的面積就越 小,若將影像與前兩次影像資訊進行疊合,就能夠有效補足點的數量,進而增加 定位成功的機率。疊合方式為取近三次的影像,於同一 X、Y 座標下之深度值進 行比較,並取平均值進行儲存,運算過程如下:
𝑊′𝑥,𝑦 = 𝐴𝑉𝐸𝑅𝐴𝐺𝐸( 𝑧𝑡𝑤, 𝑧𝑡−1𝑤 , 𝑧𝑡−2𝑤 ) (式 3-5)
(5) 飛行器座標判定
為將影像中飛行器部分的區塊擷取標示而出,先將影像進行二值化處理,依 序對每個 X、Y 座標內儲存之深度值進行判斷,深度值若為 0 或 10000 即代表無 效點,而數值在兩者之間則代表為正常,依此二值化出一張黑白影像,過程如下:
𝑊′′𝑥,𝑦 = { 1 , 0 < 𝑧𝑡𝑤′ < 10000
0 , 𝑜𝑡ℎ𝑒𝑟𝑤𝑖𝑠𝑒 (式 3-6)
研究中使用 LabVIEW 提供的 “IMAQ Count Objects 2” 函式進行影像標籤化