天天看點

Kinect 中景深圖與彩圖對齊研究

Kinect的彩圖和景深圖兩個圖是不對齊的,DepthImageFrame提供了MapToColorImagePoint方法用以計算指定景深圖坐标所對應的彩圖點。原以為從景深圖坐标到彩圖坐标是仿射變換關系,是以,在對齊時,在景深圖指定了三個點(0,0),(0,400),(400,0),計算這三個點對應的彩圖坐标,然後再求出變換矩陣,進行坐标變換。昨天客戶反應,當人物走到攝像頭的右側時,會出現圖像錯位現象:

懷疑是否是景深圖和彩圖對齊的問題。下面進行詳細測試,對景深圖每隔10個像素點進行采樣,計算對應的彩圖坐标,繪制在同一張圖上,景深圖坐标為紅點,彩圖坐标為綠點。

比對代碼:

<a></a>

                    private List&lt;Point&gt; points = new List&lt;Point&gt;();

                     for (int x = 0; x &lt; 640; x += 10)

                     {

                         for (int y = 0; y &lt; 480; y += 10)

                         {

                             ColorImagePoint p = depthImageFrame.MapToColorImagePoint(x, y, ColorImageFormat.RgbResolution640x480Fps30);

                             points.Add(new Point(p.X, p.Y));

                             points.Add(new Point(x, y));

                         }

                     }

繪制代碼:

                        Point[] list = points.ToArray();

                         Bitmap match = new Bitmap(640, 480);

                         Graphics g = Graphics.FromImage(match);

                         Pen pen1 = new Pen(Color.Red, 2);

                         Pen pen2 = new Pen(Color.Green, 2);

                         int i = 0;

                         foreach (Point p in list)

                             i++;

                             if (i % 2 == 0)

                             {

                                 g.DrawLine(pen1, p, new Point(p.X + 1, p.Y + 1));

                             }

                             else

                                 g.DrawLine(pen2, p, new Point(p.X + 1, p.Y + 1));

                         match.Save("match_" + timeString + ".png", System.Drawing.Imaging.ImageFormat.Png);

其中,timeString 記錄的是目前時間。

結果如下:

可以看出,它是一個很複雜的場,用肉眼可以看出有16個特殊位置:

不去深究這十六個點時什麼。從上面可以看出,這個變換不是仿射變換,無法使用仿射變換矩陣。應該進行逐點變換。KinectSensor類提供了逐點變換的方法:MapDepthFrameToColorFrame。

現在需要了解,景深圖和彩圖的坐标變換關系是穩定的還是不穩定的呢(随着時間推移,這個變換關系會不會發生改變?),如果是穩定的,我們隻需要求一次變換,如果不是穩定的,則需要每次都要求解變換。

将兩個不同時間點生成的比對圖拖到photoshop中,将紅點對齊,可以發現綠點也是對齊的,隻有一張圖例外,右上角未對齊,差别也不大:

由此可見,這個對齊關系比較穩定,可以隻計算一次,把結果存儲起來,坐标變換時,查表就行了。

本文轉自xiaotie部落格園部落格,原文連結http://www.cnblogs.com/xiaotie/archive/2012/03/09/2386085.html如需轉載請自行聯系原作者

xiaotie 集異璧實驗室(GEBLAB)