深度圖向點雲圖的轉換

深度圖轉點雲的計算方法不復雜,是根據內外參矩陣變換公式獲得的。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圖也是能夠的。(這裏要注意深度沒有值的時候,在應用的時候的具體狀況,是否須要在這種狀況下具體處理)
相關文章
相關標籤/搜索