Kinect 中景深图与彩图对齐研究

简介:

Kinect的彩图和景深图两个图是不对齐的,DepthImageFrame提供了MapToColorImagePoint方法用以计算指定景深图坐标所对应的彩图点。原以为从景深图坐标到彩图坐标是仿射变换关系,因此,在对齐时,在景深图指定了三个点(0,0),(0,400),(400,0),计算这三个点对应的彩图坐标,然后再求出变换矩阵,进行坐标变换。昨天客户反应,当人物走到摄像头的右侧时,会出现图像错位现象:

 

怀疑是否是景深图和彩图对齐的问题。下面进行详细测试,对景深图每隔10个像素点进行采样,计算对应的彩图坐标,绘制在同一张图上,景深图坐标为红点,彩图坐标为绿点。
匹配代码:

复制代码
                     private List<Point> points =  new List<Point>();
                      for ( int x =  0; x <  640; x +=  10)
                     {
                          for ( int y =  0; y <  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( 640480);
                         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)

相关文章
|
1月前
|
算法 计算机视觉
OpenCV(四十):图像分割—漫水填充
OpenCV(四十):图像分割—漫水填充
76 0
|
1月前
|
存储 算法 图形学
【计算机图形学】实验二 用扫描线算法实现多边形填充
【计算机图形学】实验二 用扫描线算法实现多边形填充
46 2
|
10月前
|
算法 图形学
计算机图形学 之 中点画线算法
计算机图形学 之 中点画线算法
181 1
|
10月前
|
人工智能 编解码 算法
使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线检测(含源码)
使用LabVIEW AI视觉工具包快速实现霍夫圆和霍夫直线检测(含源码)
160 0
|
12月前
|
数据可视化 C++
【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
【影像配准】配准之棋盘网格图(镶嵌图像)(附有 C++ 代码)
|
10月前
|
数据可视化 Go
一行代码绘制高分SCI火山图
经过一段时间的文献阅读和资料查询,终于找到了一个好用而且简单的包——ggVolcano, 它是一个基于R语言和ggplot2绘图包开发的生物信息学数据可视化工具。它可以用于绘制火山图(Volcano plot),帮助研究者分析高通量实验数据,如基因表达谱或蛋白质组学数据,以识别差异表达或差异富集的基因或蛋白质。
242 0
论文技术路线图如何绘制?
本文介绍基于Visio软件绘制技术路线图、流程图、工作步骤图等的方法~
460 1
|
机器学习/深度学习 人工智能 计算机视觉
华南理工TANGO项目原作解读: 文本驱动的三维物体风格化模型
华南理工TANGO项目原作解读: 文本驱动的三维物体风格化模型
127 0
|
机器学习/深度学习 传感器 并行计算
马普所开源ICON,显著提高单张图像重建三维数字人的姿势水平 | CVPR 2022
马普所开源ICON,显著提高单张图像重建三维数字人的姿势水平 | CVPR 2022
125 0
|
传感器 JSON 数据可视化
【视觉高级篇】22 # 如何用仿射变换来移动和旋转3D物体?
【视觉高级篇】22 # 如何用仿射变换来移动和旋转3D物体?
158 0
【视觉高级篇】22 # 如何用仿射变换来移动和旋转3D物体?