深度圖轉點雲的計算方法不復雜,是根據內外參矩陣變換公式獲得的。spa
一個相機的三維點[x,y,z]和它在圖像中的像素座標[u,v,d],存在着一個固定的對應關係(對於小孔成像的相機原理的相機)code
上述的公式是從世界座標獲得圖像中像素座標,同理也可從從圖像的像素座標轉換到世界座標下。blog
根據這個公式能夠對點雲進行構建。class
若是相機發生了位移和旋轉,那麼只須要對這些點進行相應的處理便可。(通常相機在0時刻是與世界座標重合的)原理
對於深度圖中的點,轉換成三維座標在程序中通常是以下這樣的:程序
for (int m = 0; m < depth.rows; m++) for (int n=0; n < depth.cols; n++) { // 獲取深度圖中(m,n)處的值 ushort d = depth.ptr<ushort>(m)[n]; // d 可能沒有值,若如此,跳過此點 if (d == 0) continue; // d 存在值,則向點雲增長一個點 PointT p; // 計算這個點的空間座標 p.z = double(d) / camera_factor; p.x = (n - camera_cx) * p.z / camera_fx; p.y = (m - camera_cy) * p.z / camera_fy; }
點雲也能夠加入顏色,如有RGB圖也是能夠的。(這裏要注意深度沒有值的時候,在應用的時候的具體狀況,是否須要在這種狀況下具體處理)