kinect 安裝方式空间

Kinect开发学习笔记之(一)Kinect介绍和应用
我的图书馆
Kinect开发学习笔记之(一)Kinect介绍和应用
Kinect开发学习笔记之(一)Kinect介绍和应用
一、Kinect简介
& & & Kinectfor Xbox 360,简称 Kinect,是由微软开发,应用于Xbox 360 主机的周边设备。它让玩家不需要手持或踩踏控制器,而是使用语音指令或手势来操作 Xbox360 的系统界面。它也能捕捉玩家全身上下的动作,用身体来进行游戏,带给玩家“免控制器的游戏与娱乐体验”。其在日于美国上市,建议售价149美金。Kinect在销售前60天内,卖出八百万部,目前已经申请金氏世界记录,成为全世界销售最快的消费性电子产品。
& & & &日,微软正式发布面向Windows系统的Kinect版本“Kinect for Windows”,建议售价249美金。而在2012年晚些时候,微软还将发布面向“教育用户”的特别版Kinect。(以上来自wiki百科)
& & & &Kinect有三个镜头,中间的镜头是 RGB 彩色摄影机,用来采集彩色图像。左右两边镜头则分别为红外线发射器和红外线CMOS 摄影机所构成的3D结构光深度感应器,用来采集深度数据(场景中物体到摄像头的距离)。彩色摄像头最大支持分辨率成像,红外摄像头最大支持640*480成像。Kinect还搭配了追焦技术,底座马达会随着对焦物体移动跟着转动。Kinect也内建阵列式麦克风,由四个麦克风同时收音,比对后消除杂音,并通过其采集声音进行语音识别和声源定位。
1.2、软件开发环境
1.2.1、非官方组合
& & & 一开始微软对Xbox 360推出Kinect的时候,并没有在windows的开发包。而由于Kinect强大的功能和相对低廉的价格,geeks们纷纷表示希望能在电脑上用它。于是就有多位大牛开发了驱动,目前我了解到的有三个:
1)CL NUI Platform
& & & 由NUI的大牛AlexP开发(他开发的其他著名产品包括PS3的windows驱动),可以到下载,目标平台是windows7,能够获取彩色摄像头,深度传感器以及加速度传感器数据,使用简单方便。
2)OpenKinect/libfreenect
& & & &由号称第一个破解Kinect的Hector Martin发起,可以到下载,目标平台是Linux
and Mac,据说有人成功移植到了windows上。因为很多geek都是Mac的拥趸,所以开发参与者众多,不仅仅是个可以获得数据的driver,geek们还写了其他高级的东西,比如我前面提到的骨骼化,将彩色摄像头作为纹理贴在深度数据上等等,很吸引人啊。
& & & &OpenNI(opennatural interface开放自然交互)是一个多语言,跨平台的框架,它定义了编写应用程序,并利用其自然交互的API。可以到下载。从名字判断其终极目标大约是实现少数派报告的效果,从目前放出来的一些demo,恐怕已经超越了这个终极目标。它不是专为Kinect开发,但有Kinect的生产商PrimeSense的支持。这个感觉也是目前相对来说用的比较多的非官方组合:SensorKinect
+ NITE + OpenNI;其中SensorKinect是Kinect的驱动。NITE是PrimeSense提供的中间件,可以分析Kinect读取的资料,输出人体动作等等。
1.2.2、微软官方SDK
& & & &Kinect体感游戏在Xbox 360 上获得很好的评价,但是对于 Windows 平台上的开发却一直只能使用非官方的解决方案(上面所说),例如NKinect 配合CL NUI SDK;但是微软终于在2011 年 6 月推出了 Kinect forWindows SDK Beta,特别是可以使用 C# 与.NETFramework 4.0 来进行开发。Kinect for Windows SDK主要是针对Windows7设计,内含驱动程序、丰富的原始感测数据流程式开发接口、自然用户接口、***文件以及参考例程。Kinect
for Windows SDK可让使用C++、C#或VisualBasic语言搭配MicrosoftVisualStudio2010工具的程序设计师轻易开发使用。目前最新是V1.6 。
& & & Kinectfor Windows SDK的下载地址:
& & & &Kinect SDK目前只支持Windows 7,分为x86和x64两个版本。开发工具方面还需要.NET Framework 4.0和Visual Studio 2010 (最低Express版本)的支持。这个在后面的开发环境的配置中再做介绍。
1.2.3、非官方和官方开发包的优缺点
1)官方SDK:
& & & &提供了音频支持、调整倾角的转动电机、在全身跟踪骨骼跟踪方面:非标准姿势检测(相对于OpenNi的投降姿势…),头部、手、脚、锁骨检测以及关节遮挡等细节上的处理更为细致(但精度是否更高还不能确定)。此外,支持多传感器(多台Kinect);
& & & &微软对非商业使用的限制。此外,未提供手势识别和跟踪功能,未实现RGB图像/深度图像的互对齐,只是提供了对个体坐标系的对齐。在全身骨骼跟踪中,SDK只计算了关节的位置,并未得出其旋转角度。从可移植的角度来看,SDK beta只能用于Kinect/Win7平台,而OpenNi还至少支持华硕的W***I Xtion体感设备,今后支持的硬件平台还可能更多。相比较而言SDK beta不支持Unity3D游戏引擎、不支持记录/回放数据写入磁盘、不支持原始红外视频数据流、也不支持像OpenNi一样的角色入场和出场的事件响应机制。
2)非官方OpenNI/NITE:
& & & &可用于商业开发、包含手势识别和跟踪功能、可自动对齐深度图像和RGB图像,全身跟踪、关节旋转角度计算、看起来性能较好、已有众多游戏产品应用、支持记录/回放数据写入磁盘、支持原始红外视频数据流、支持角色入场和出场的事件响应机制。支持Primesense和华硕的W***I Xtion硬件平台和windows、Linux和Mac等软件平台。自带的代码全面支持Unity3D游戏引擎。
& & & &未提供音频功能、不支持调整倾角的转动电机、在全身跟踪骨骼跟踪方面:无法跟踪头部、手、脚和锁骨的旋转动作,需要标准姿势检测(即著名的投降姿势…),关节遮挡等细节上的处理似乎存在算法bug。不能自动***并识别Kinect多机环境。***过程较为繁琐,特别是NITE还要申请开发***编码。OpenNi也没有提供可用视频和深度图输入的事件触发机制(但OpenNI提供了类似功能的函数可使用,虽然不是回调函数,但是也很好用)。
& & & &OpenNI最大的优势就是允许跨平台多设备,以及商业应用。但从原始数据的采集和预处理技术上看,微软的SDK似乎更稳定一些,况且还提供了不错的骨骼和语音支持。对于部分身体部位识别方面的功能,SDKbeta没有提供局部识别和跟踪,这需要自己的后续开发(至少在相当一段时期内微软可能都不会提供此类功能)。OpenNi/NITE虽然提供了手势识别和跟踪,然而在全身骨骼姿势识别和跟踪上还要更多借鉴微软的产品。
因此,按照目前在社区中的表现,SDK beta和OpenNi/NITE孰优孰劣还真无法一下子确定。而且随着越来越多的开发者加入微软这一方,SDK beta的普及可能会更快,但在更高层次的应用上,对二者的选用往往是需要一定智慧的。
(这部分参考:)
二、Kinect应用开发汇总
& & & 本文(百度文库上面的内容,来源未知)汇总了当前使用Kinect SDK for Windows 开发出的各种各样的应用,点击相应的链接可以看到对应Kinect应用的Demo视频。
Kinect试衣镜,这款基于kinect体感技术的神奇的试衣镜,让客户可以快速的试穿衣服,提高销售效率和企业形象。
Kinect自制应用3D试衣间
3D摄像机,&用两个KINECT实现3D摄像机的基本效果。
雕塑工具,立等可取Kinect成街头快速人像雕塑工具,利用Kinect对人体进行3D建模,然后根据人体的3D信息,连接相应的塑模设备,塑造出人体塑像。
用Kinect 操控遥控直升机&
Kinect Robo,使用Kinect作为机器人的头,通过kinect检测周围环境,并进行3D建模,来指导机器人的行动。
Kinect控制高达机械人
空气吉他,通过Kinect手势操作虚拟吉他弹奏音乐。
Kinect弹奏中国古代乐器,通过手势的改变可以演奏出不同中国古代乐器的声音。
Kinect破解“初音”,将体感控制应用到漫画人物----初音上。
变身奥特曼,捕捉玩家骨架数据,虚拟为奥特曼的形态与之随动,并且附加一些特技效果。
Kinect破解玩光剑,Kinect检测玩家的动作,虚拟出光剑的影像,与之随动。
计算机相关应用
Kinect手势操作浏览器,通过Kinect手势对浏览器进行翻页,下拉,放缩等操作。
Air Presenter,让你的演讲从此与众不同,用kinect进行演讲的软件。
Kinect多点触摸,使用kinect实现隔空多点触摸,浏览图片、地图等。
Kinect体感控制看片,第四军医大学西京医院骨科的医生们将破解的kinect应用在手术室,在术中,手术者可通过体感控制查看患者的影像资料。大大方便了医生手术,减少了手术室的人员流动。
Kinect蜡笔物理,使用Kinect手势绘图,通过体感控制所绘图形,并使之具有物理特性,比如重力,吸引力等。
用Kinect控制闪电(特斯拉线圈)
Kinect破解玩马克思佩恩
kinect破解玩求生之旅2 体感打僵尸
Kinect破解玩魔兽世界&&&
Kinect破解玩街头霸王&&&
Kinect破解玩超级马里奥兄弟&
Kinect破解玩兵者诡道&&&
Kinect破解玩 现代战争&&
& & & &一群来自卡内基梅隆的学生使用Kinect的交互特点实现了18个各种各种的有趣的想法。他们仅仅用了两周的时间,从大二学生到研究生不等。让我们来看一下他们实现的奇思妙想吧!
& & & &原文及视频信息链接
1. Comic Kinect
& & & 此示例主要应用了Kinect的骨架跟踪技术和玩家分段数据,将拳击和脚踢的交互通过可视的漫画效果表现出来,并且同步发出一些拟声效果。
2. Mario Boo
& & & &当Kinect传感器检测到有人出现在视野内时,会出现一个幽灵保持在人的背后,随着人的运动而运动,并且会根据深度信息的远近而改变自身大小。
3. Magrathea
& & & &Magrathea使用Kinect根据桌上的任何物体动态的产生地形图。摄像头读取桌上物体的不断变化深度信息,可以展现出类似地球地形逐渐进化的过程。
4. We be Monsters
& & & &从中午舞狮中获取灵感,运用Kinect的骨架跟踪技术,两个人分别同坐自己的四肢操纵虚拟怪兽的四肢和头尾。
5. Mix&Match Interaction Toy
& & & &使用了Kinect/OpenNI 骨架技术,使得3张卡片组成的人体可以跟玩家随动,并且通过手的滑动更换图片。
6. Kinect Flock
& & & &作者创建了一个微粒系统,当用户移动时,像棉絮一样的东西会随之涌动,当用户静止时,则聚集到参与者的深度区域。
7. roboScan
& & & &roboScan是一个3D模型+扫描仪,将一个Kinect设备固定在一个ABB 4400机械手上。设定好的动作和操作者同时控制机器人和摄像机的3D位置。Kinect的深度数据用来产生一个精确的外部环境的模型。
8. Neurospasta
& & & & Neurospasta是一个需要全身投入的自由形态游戏平台。参与者可以控制他们各自基于Kinect的木偶,也可以通过功能设定控制别人的化身。
9. Will-o-the-Wisp
& & & 这个设计充满了神秘色彩,玩家可以控制一个发光的球体,球体根据玩家手的运动而动,根据深度信息变大或变小。
10. Balloon Grab
& & & &通过检测手掌张开还是握紧的手势,作者开发了一个基于模拟气球飞行的简易小游戏。
11. Hand-Tracking Visualization
& & & &该软件使用手势控制音频的可视化效果,结合检测到场景中手距Kinect的深度信息。参与者手的位置,速度以及其他参数被用来创建一个交互式的声音的可视化效果。
& & & & 感觉Kinect的应用也应景一句话:Kinect的应用取决于你的想象空间!
版权声明:本文为博主原创文章,未经博主允许不得转载。
[转]&[转]&[转]&
喜欢该文的人也喜欢Kinect深度图与摄像头RGB的标定与配
我的图书馆
Kinect深度图与摄像头RGB的标定与配
7973人阅读
Kinect(1)
AI and Image Processing(10)
版权声明:本文为博主原创文章,未经博主允许不得转载。
自从有了Kinect,根据深度图提取前景就非常方便了。因此出现了很多虚拟现实、视频融合等应用。但是,Kinect自身的RGB摄像头分辨率有限,清晰度也不及一些专业摄像头,因此有了用第三方摄像头代替Kinect摄像头的想法。现在的问题是,如何将Kinect的深度图与第三方摄像头的RGB图像对准?
我们知道,当使用Kinect的RGB时,有方便的MapColorCoordinatesToDepth()和MapDepthCoordinatesToColor()方法可以使用,这些函数将深度图和RGB对准到一起,从而可根据深度图准确的提取出RGB中的前景。但打算使用第三方摄像头时,这些函数都没有用了,它们不可能知道我们所用摄像头的参数以及空间位置,因此只能靠自己标定的方法解决这一问题。
在标定之前,先要固定好Kinect和摄像头的位置,让深度摄像头和RGB摄像头的像平面尽量平行,距离也不要隔得太远,就像下面这样(做得很丑,请见谅-_-!!):
一、RGB摄像头的标定
RGB摄像头的标定想必大家都很熟悉,最常用的就是棋盘法。用待标定的摄像头拍摄多幅不同视角下的棋盘图片,将这些图片扔给OpenCV或Matlab,从而计算出该摄像头的内参以及对应于每一幅图像的外参。这里就写写我在标定过程中的一些感受和经验吧。
1、标定所用的棋盘要尽量大,至少要有A3纸的大小;
2、棋盘平面与摄像头像平面之间的夹角不要太大,控制在45度以下;
3、棋盘的姿势与位置尽可能多样化,但相互平行的棋盘对结果没有贡献;
4、用于标定的图片要多于10张;
5、注意设置好摄像头的分辨率,长宽比最好和深度图的相同,比如:3)。
以下是一些用于标定的样图:
二、深度摄像头的标定
深度摄像头看起来和RGB摄像头差别很大,实际上有很多相似之处。就Kinect而言,其通过一个红外散斑发射器发射红外光束,光束碰到障碍物后反射回深度摄像头,然后通过返回散斑之间的几何关系计算距离。其实,Kinect的深度摄像头就是一个装了滤波片的普通摄像头,只对红外光成像的摄像头(可以这么认为)。因此要对其标定,只需用红外光源照射物体即可,LED红外光源在淘宝上就20元一个。还有一点必须注意,在拍摄红外照片时,要用黑胶带(或其他东西)将Kinect的红外发射器完全挡住,否则其发出的散斑会在红外照片中产生很多亮点,不利于棋盘角点的检测。以下是对应于上面RGB图像的红外图:
三、计算内参
得到以上图片之后,就可以分别对RGB摄像头和深度摄像头计算内参了。可以使用OpenCV,自己写一小段程序,然后把图片扔进去。也可以使用著名的Matlab Camera Calibration Toolbox。自己写代码累,Matlab我没装,因此我使用&GML Calibration Toolbox,可以在这里下载&&。这是一个C++写的标定程序,有友好的用户界面,精度也不错,使用非常方便。
分别将RGB和红外的照片扔进去,得到RGB摄像头的内参(包括畸变参数):
=== Intrinsic ===
554.952628 & & &0.000000 & & & & & 327.545377
0.000000 & & & & & 555.959694 & & &248.218614
0.000000 & & & & & 0.000000 & & & & & 1.000000
=== Distortion ===
0.025163 & & & & &-0.118850 & & & & &-0.006536 & & & & &-0.001345&
和Kinect深度摄像头的内参(这个对所有Kinect应该都是差不多的):
=== Intrinsic ===
597.599759 & & &0.000000 & & & & & 322.978715
0.000000 & & & & & 597.651554 & & &239.635289
0.000000 & & & & & 0.000000 & & & & & 1.000000
=== Distortion ===
-0.094718 & & & & &0.284224 & & & & & -0.005630 & & & & &-0.001429&
现在说说怎么配准,由于Kinect可以得到真实点的三维坐标,因此深度图的配准可以用一些简单特殊的方法。
设P_ir为在深度摄像头坐标下某点的空间坐标,p_ir为该点在像平面上的投影坐标(x、y单位为像素,z等于深度值,单位为毫米),H_ir为深度摄像头的内参矩阵,由小孔成像模型可知,他们满足以下关系:
又设P_rgb为在RGB摄像头坐标下同一点的空间坐标,p_rgb为该点在RGB像平面上的投影坐标,H_rgb为RGB摄像头的内参矩阵。由于深度摄像头的坐标和RGB摄像头的坐标不同,他们之间可以用一个旋转平移变换联系起来,即:
其中R为旋转矩阵,T为平移向量。最后再用H_rgb对P_rgb投影,即可得到该点对应的RGB坐标:
需要注意的是,p_ir和p_rgb使用的都是齐次坐标,因此在构造p_ir时,应将原始的像素坐标(x,y)乘以深度值,而最终的RGB像素坐标必须将p_rgb除以z分量,即(x/z,y/z),且z分量的值即为该点到RGB摄像头的距离(单位为毫米)。
现在的问题是,如何求联系两个坐标系的旋转矩阵和平移向量。这就要用到摄像头的外参了。
外参矩阵实际上也是由一个旋转矩阵R_ir(R_rgb)和平移向量T_ir(T_rgb)构成的,它表示将一个全局坐标系下的点P变换到摄像头坐标系下,分别对深度摄像头和RGB摄像头进行变换,有以下关系:
在第一式中,将P用P_ir、R_ir和T_ir表示,并带入第二式,可得:
从上式可以看出,这是在将P_ir变换为P_rgb,对比之前的式子:
因此,我们只需在同一场景下,得到棋盘相对于深度摄像头和RGB摄像头的外参矩阵,即可算出联系两摄像头坐标系的变换矩阵(注意,所有旋转矩阵都是正交阵,因此可用转置运算代替求逆运算)。虽然不同场景下得到的外参矩阵都不同,计算得到的R和T也有一些变化,但根据实际实验结果来看,使用一个正面棋盘的标定图像就可达到较好的效果,如下图:
注意,这两幅图像必须来自于同一场景,否则没有意义。当然你也可以使用多个场景下的外参,然后使用OpenCV的StereoCalibration函数求得两个摄像头的最佳相对变换矩阵,由于时间关系,我没有做这个测试。
使用GML Calibration Toolbox得到以上两图的外参(在菜单栏的Calibration-&Export Calibration Data菜单中选择导出),然后根据上式,扔进Mathematica里面去做矩阵运算,得到最终的R和T:
R={&{0.999853, -0..0167495},&
{0..999708,&&0.0239986},
{-0.0168257, -0..999571} &}
T={ &{15.2562}, {70.2212}, {-10.9926} &}
最后写一个小程序测试一下,看看配准前(左)和配准后(右)的区别:
从图像上看,配准已经很精确了。若还要更好,可以手动微调一下两个摄像头的平移向量T,主要改x分量和y分量,这样可以控制RGB和深度图的左右对齐和上下对齐。另外,还可以加入对畸变系数的处理,不过由于Kinect的摄像头以及我使用的RGB摄像头本身质量较高,畸变影响不大,这里就全部忽略了。
================================分割线=====================================
由于之前换电脑,一时疏忽将最后配准的代码丢了,所以没法提供给大家,万分抱歉。感谢ctgushiwei朋友的提出,在此说一下这个测试程序的思路。
1、获取Kinect的深度图像;
2、获取RGB摄像头的图像;
3、为深度图像中的每一个像素附上对应的RGB颜色,比如你要给坐标为(x, y)的深度图像素附上颜色,具体步骤如下;
1)构造一个三维向量p_ir = (x, y, z),其中x,y是该点的像素坐标,z是该像素的深度值;
2)用Kinect内参矩阵H_ir的逆,乘以p_ir得到对应的空间点坐标P_ir,具体公式见上文第四部分(配准);
3)由于P_ir是该点在Kinect坐标系下的坐标,我们需要将其转换到RGB摄像头的坐标系下,具体的,就是乘以一个旋转矩阵R,再加上一个平移向量T,得到P_rgb;
4)用RGB摄像头的内参矩阵H_rgb乘以P_rgb,得到p_rgb,p_rgb也是一个三维向量,其x和y坐标即为该点在RGB图像中的像素坐标,取出该像素的颜色,作为深度图像中对应像素的颜色;
5)对深度图像中的每一个像素都做上述操作,得到配准后的深度图。
我的同类文章
Kinect(1)
AI and Image Processing(10)
想问一下楼主在第二段中提到的两个函数来自哪里?谢谢32楼
谢谢你,成功了。0.031楼
博主请问用opnecv的cvStereoCalibration函数能标定kienct深度相机和外部彩色相机么,即如果两相机分辨率不一样,这函数能用么,还有matlab的stereo_gui立体标定工具箱,两相机分辨率不一样的话,这个工具箱能用么30楼
还想问你一个问题,就是我买了你给的链接上的红外光源的地址,为什么把kinect上的红外光源挡住,开启自己的光源的时候怎么样都是漆黑一片,如果不挡住的话直接用kinect上的红外光源检测而且检测的角点效果还不错可不可以直接用啊Re:
回复u:你好,想问下,如果只用kinect的深度摄像头,怎么会能拍出棋盘格的角点呢,而且你说角点检测效果还不错,请问是如何做到的?谢谢!Re:
回复u:角点检测不错的话,就可以用。Re:
回复AIchipmunk:既然最后的测试代码找不到了,可否讲个思路,对这方面可能都是第一次接触,我们都可以自己尝试着写测试代码,也可以方便后来学习的人,多谢啦Re:
回复u:已将思路写于文章最后,感谢提议!Re:
回复AIchipmunk:真的是太感谢你了!!还有个问题,就是对于图像分辨率要求不高的条件下深度图和彩色图对齐的话只用Kinect自带的方法可以吗,不用你所说的配准的方法。Re:
回复u:可以,这样只需调用一个SDK中的函数。Re:
回复AIchipmunk:为什么你在最终计算R和T的时候没有用到内参矩阵,只是在最后的编程实现映射的时候用到了,请问是这样吗?我在编程实现的时候RGB图和D图大小不一样怎么解决?Re:
回复u:计算RT只需要外参即可,内参只是用于将空间点投影到像平面。图像大小不一样也没关系,他们的大小关系会反映在内参矩阵中。Re:
回复AIchipmunk:那就是说最后编程实现都不用管图像大小关系,直接照你的方法写就可以啦?Re:
回复u:是的Re:
回复AIchipmunk:C++懂吗?现在代码编写出来了,能否帮忙看下哪里有问题Re:
回复u:不好意思,现在才看到Re:
回复AIchipmunk:多谢了,现在编程也实现了一部分,但是可能哪里出席那问题了,小问题较多!29楼
你好,请问kinect相机的的深度图和彩色图大小怎么设置成一样的?另外标定的话,是不是和普通相机标定一样?只是配准不一样?28楼
你好,我用你的方法标定kinect的彩色及深度摄像头,用MATLAB做的,最后的R和T是将统一场景下的彩色及深度图像放在一起标定,还是单独标定彩色,得到Rir和Tir,然后在单独得到Rrgb和Trgb?27楼
你好,我用的是kinectV2 ,深度分辨率为512*424,而我的第三方摄像头分辨率为,该怎么把他们的长宽比调成一样的,有什么方法。谢谢Re:
回复momolenghun:请问你的标定与校准问题解决没?能不能交流下,就是最后的配准部分,请问还需要矫正吗Re:
回复momolenghun:其实分辨率不一样也没关系,图像之间的映射关系会反映在两个内参矩阵当中。Re:
你好 博主,你的意思是两个相机分辨率的长宽比不一样也行是嘛,这种情况下标定步骤跟你博文讲到的也一样是吧。还有一个问题,直接用kinect样例程序infrared basic获取的红外图能用来标定深度相机吗 。谢谢Re:
回复momolenghun:可以,标定方法不变。infrared basic可以用,不过最好还是用额外的红外灯,因为Kinect自己打出的红外是散斑,不方便后面的棋盘角点检测。Re:
回复AIchipmunk:博主,你了解libfreenect嘛,知道怎么用libfreenect由kinect深度相机获取视差图吗Re:
回复momolenghun:抱歉,不了解26楼
我想问一下,怎么保存得到的红外图?infrared basic程序中,也不能截图啊Re:
回复u:已解决Re:
请问你kinect与外部摄像机对齐搞定了吗, 我也在研究这个问题,遇到瓶颈了,想请教请教Re:
回复kinectaa:请问你kinect与外部摄像机对齐搞定了吗Re:
没有呢 你也在研究这个问题吗Re:
回复kinectaa:是啊 先按博主的方法试试吧 国外有人发布了一个kinect标定程序,matlab写的,可同时标定kinect深度相机,RGB相机和外部RGB相机,但他要的是深度相机获取的视差图,用libfreenect获取的,我libfreenect没装,也不知道怎么用libfreenect获取。Re:
国外的那个标定程序我也研究过,加我qq,方便讨论25楼
畸变参数我看有的论文写的是需要标定5个畸变参数,3个径向畸变,2个切向畸变,文中的4个畸变参数表示的是什么畸变、24楼
不外接RGB摄像头,用楼主的方法可以对看kinect自身的RGB和深度摄像头进行标定吗?多谢Re:
回复zpy215990:当然可以23楼
不外接RGB的话,用楼主的方法可以对kinect自身的RGB,深度摄像头进行标定吗?多谢Re:
回复zpy215990:当然可以啊!我也在研究,可以交流!22楼
你好,我想问一下,您最后做配准测试的那个程序,是用什么写的?MATLAB可以吗?我用MATLAB可以分别得到彩色与深度图像,但是怎么可以向您一样,显示在一起呢?Re:
回复u:matlab肯定可以啦,应该更简单!Re:
你好,你最后写的测试小程序能不能分享一下,谢谢。Re:
回复u:我是用C#写的,Matlab不了解,不好回答哦~21楼
好文,挺好理解20楼
外参矩阵实际上也是由一个旋转矩阵R_ir(R_rgb)和平移向量T_ir(T_rgb)构成的楼主我想知道这4个矩阵具体是怎么得到的,最后能够发我一份测试例子的代码,感谢楼主,Re:
回复jzli2011:摄像机的外参和内参矩阵都可以通过相机的标定获得,可以找这方面资料看看。至于代码,前面已经说了,换电脑后把这部分代码弄掉了。。。实在抱歉Re:
回复AIchipmunk:内参和外参的问题已经解决了,现在有个新的问题,如果深度图和rgb图的比例不一样会不会对摄像机配准有影响,kinect深度图是320*240,4:3,如果rgb图是甚至呢???Re:
回复jzli2011:我看了一下,kinect1.0深度图是320*240,rgb图是640*480kinect2.0深度图是512*424,rgb图是,看不懂19楼
楼主,能否分享一下源码,以供学习。谢谢。18楼
博主,你好~ 我通过OpenNI2获取到了IR图像呢create(device,openni::SENSOR_IR);原来获取到的图像是跟彩色图像一样也是三通道。Re:
回复scliu12345:原来如此,祝好17楼
博主,你好~ 我试了一下,怎么获取到的深度图像一片黑色呢。如果按照博主的说法,那岂不是标定的只是接受段呢。看论文里边,有些人是通过“深度图”,自己标记角点进行标定的呢。Re:
回复scliu12345:就是要标定接收端啊。用深度图人工选取标定也是可以的,但不好保证精度。图像一片黑,可能是红外光照不够吧。Re:
回复AIchipmunk:你好!重新运行了一次,GML C++ Camera Calibration sources 0.71;DetectionManagerMdl.dll没有呢。 找了一下,确实没有生成这个dll文件呢~Re:
回复AIchipmunk:然后是我在win7_32位下VS2010运行GML C++ Camera Calibration sources 0.71报一堆错误呢。首先是版本问题,然后是一系列变量没有定义的问题呢。Re:
回复AIchipmunk:你好!我用的是这款http://detail.tmall.com/item.htm?id=&spm=a1z09.2.9.25.TV8CAr;然后但是我获取的是深度图(cv::Mat cvRawImg16U( oniDepthImg.getHeight(), oniDepthImg.getWidth(), CV_16UC1, (void*)oniDepthImg.getData() ); (借鉴:http://blog.csdn.net/scliu12345/article/details/))呢。如果方便的话,可不可以看一下你的代码呢?Re:
回复scliu12345:GML为何要下源码呢,有编译好的可以下载。看来你用的是OpenNI,而且用的是OpenNI获取深度图的函数。红外图并不是深度图,它是成为深度图之前的原始数据(Raw Data),我不知道OpenNI是否有访问Raw Data的能力。我用的是微软官方SDK。Re:
回复AIchipmunk:本本有问题,运行编译好的那个文件的时候,换台计算机就好了。然后用Depth Basics-D2D C++ Sample里边获取到的也是深度信息呢~我看看哪个能够获取Raw data哈~Re:
回复scliu12345:官方例子里面有一个叫Infrared Basics-D2D的就是Re:
回复AIchipmunk:你好!怎么看那里边只是把m_pTempColorBuffer(感觉只是调色板)传到绘图里边呢,然后用Direct2D绘制出来了。 想问一下:1、intensity是什么含义呢?红外下获取到的是什么信息呢?2、怎么把图片保存出来呢?(尝试过将m_pTempColorBuffer数据保存早cv::Mat中,保存失败;尝试过将m_pBitmap保存为位图,也失败呢。)(应该是能力问题了,?~)3、GetScreenshotFileName这个函数怎么没有实现相应功能呢?Re:
回复AIchipmunk:你好!我刚看到在OpenNI里边可以获取IR图像呢;oniDepthStreame.create(device,openni::SENSOR_IR);//获取IR图像;不过我还是出了点问题呢。我看看SDK那里边的吧~16楼
你好,为什么我使用 GML Calibration Toolbox这个工具检测不到角点?我记得有一次检测成功了,但是,第二天我输入同样参数就死活检测不出来了!15楼
你好, 请问你是如何保存 IR(深度) 图像? 通过截图? 看了2楼也没有具体方法, 谢谢!Re:
回复cosmoszz:使用SDK中的获取彩色图像例子,将例子中的图像格式改改就可以了Re:
回复cosmoszz:请问你解决怎么保存红外图像了吗?Re:
回复cosmoszz:opencv每月有保存图像方法?14楼
你好,我现在只能看懂矩阵部分。请问你的测试小程序用什么语言编的?输入什么?输出什么?用什么画图(后处理)?得到深度图和彩色图的配准后,有什么作用,比如在游戏时能判断玩家的身体位置的移动?问题比较蠢~力学专业,求问13楼
博主,最后一部分Mathematica运算,具体是什么?你用的是kinect的深度和外置相机的彩色吗?两个相机的拍到的范围不一样,最后转到同一个坐标系下能直接拼接吗?麻烦您解答一下~Re:
回复catherine627:1、就是用Mathematica计算我文中写的几个公式啊,都是矩阵运算。2、准确的说只能将两个相机视场的重叠部分配准。12楼
博主分析的很到位,可否分享下测试代码呢?QQ邮箱:Re:
回复zzzhouzhenmaomao:抱歉,换电脑后把这部分代码弄掉了Re:
回复AIchipmunk:我用你指定的红外光源照射棋盘格采集的红外图像全是黑的,不知道为什么?Re:
回复zzzhouzhenmaomao:你好,我用Kinect v2自带的红外图像获取程序,为什么显示的红外图像也是漆黑一片呢,谢谢?Re:
回复zzzhouzhenmaomao:已经解决,不劳费心,不过还是希望博主能分享下最后那个配准的代码Re:
您好,标定深度摄像头的时候,怎么截图呢?我是用SDK中的例子,应该使用那个呢?11楼
博主,当我链接Kinect的时候,外接的摄像头打不开,请问博主时怎么同时打开Kinect和外接摄像头的?Re:
回复oqqjiao123456:没有什么特殊方法,就是分别打开。如果实在不行,也许是你主板上总线带宽不够。Re:
回复AIchipmunk:楼主请问你是怎么解决同时打开kinect和外接普通摄像头的问题的,谢谢!QQ:Re:
回复AIchipmunk:谢谢博主,问题已解决,是摄像头驱动的问题Re:
回复oqqjiao123456:请问你是怎么解决同时打开kinect和外接普通摄像头的问题的,谢谢!10楼
博主,得到外参数后,如何让两图像的像素点匹配?9楼
红外光源是什么型号,希望能把淘宝店铺链接发给我,谢谢!!Re:
回复hgl0417:原来的淘宝店找不到了,不过和这个比较类似:http://item.taobao.com/item.htm?spm=a230r.1.14.101.wj6ix8&id=8楼
如果不考虑,角点提取的问题的话,能不能不需要用红外光线去照射,直接用采集的红外图像来对深度摄像头进行标定啊?7楼
为什么我得到的参数是楼主的两倍呢?[
654.417; 0 .797; 0 0 1 ]Re:
回复dgsxingchen:你好,能交流下吗?最后的配准部分Re:
回复dgsxingchen:我用的图片分辨率是640x480,你的图片应该比我的大吧。Re:
回复AIchipmunk:嗯,我使用的的确是的,不过标定跟分辨率有关系吗?为什么会有关系?Re:
回复dgsxingchen:矩阵的值是和图片大小有关的,因为内参矩阵的值都是以像素为单位的。6楼
你好,我买了个IR light想校准kinect红外摄像头,可是我无论怎么做,kinect得到的都是一片黑。。。我的IR light在黑暗中才发光,是不是由于我的IR light太小了。。。还是其他什么原因?我把kinect上面的红外发射器挡住了,用的就是得到深度图的程序,有任何不对的吗?谢谢Re:
回复MVL:我用的IR light应该算是比较大,包含了好几十个红外LED。另外,看红外用的不是深度图模式,而是Kinect专门用于看红外的一种模式。在Kinect Explorer里面有,也可以直接用Infrared Basics这个程序来看。Re:
回复AIchipmunk:你用的是kinect for windows是吧,不是kinect for xbox 360?Re:
回复MVL:确实是Kinect4Windows,不过我朋友说XBox版也可以。毕竟SDK并没有区分这两种设备。换一个好的红外光源,然后用Infrared Basics看看就知道了。5楼
你好,我想问一下,标定的最终目的是求出p_ir(空间某点在深度图像上的投影坐标)和p_RGB (空间统一点在RGB图像上的投影坐标)之间的关系,对吗?这样就形成了我们自己的MapColorCoordinatesToDepth()MapDepthCoordinatesToColor()函数,对吗?不知道你能不能把最终测试的小程序代码发给我呢?邮箱:rw. 。 还有个问题哈,就是在RGB摄像头标定的时候,你说要设置分辨率,长宽比最好和深度图像相同,不相同会有什么问题呢?谢谢你的帮助Re:
回复MVL:第一个问题:没错,是找p_rgb和p_ir之间的关系。第二个问题:如果大小不一样,平移向量(T向量)就不再代表真实意义上两个摄像机的平移。可以理解为,大的图片离摄像头进,小的图片离摄像头远,从而造成T矩阵中Z分量很大,不过这任然是可以使用的,相当于多了一个缩放过程。长宽比不同,意味着视场大小不同,一个看到的东西多,另一个看到的东西少,在相互Map时就会有很多盲点,不方便使用。代码的话,我得找找,找到了我会共享上来。Re:
回复AIchipmunk:我还有个问题哈,你说RGB图像和深度图像长宽比不一样会造成map时有盲点,我想问一下,如果我得到深度图,然后resize一下,最终和RGB图像一样大小,再进行calibrate可以吗Re:
回复MVL:如果要拉伸长宽比,估计不会有好结果,因为公式中的两个变换都是刚体变换(旋转和平移),是没有比例伸缩的功能的。你可以自己试试,我也没有试验过,只是从公式上推测。Re:
回复AIchipmunk:谢谢你的回复,我先做做看,如果有问题了再请教你哈~~~代码的话,希望你能尽早共享出来~~~或者提示一下我该如何写测试代码也行。。。4楼
你好,能加一下你的qq吗3楼
请问牛人,如果利用Kinect传感器来做客流统计可以吗?我们公司在寻找类似的技术方案。Re:
回复ardentlover:如果是用Kinect的骨架信息统计人流的话,简单但不准确,因为目前Kinect在一个视野中最多只能识别6个人,人多的话就会漏掉。因此需要用原始的深度图或RGB来进行统计,需要做图像分析与处理。记得国外有一些不错的解决方案,可以找找。2楼
你好,我想请问一下,深度相机获得的图片保存格式与彩色图一样吗?标定方法也一样吗?Re:
回复u:保存格式和标定方法都完全一样1楼
你好,“大牛”。看了你的文章很有启发!我最近也在做kinect方面的实验,想请教几个问题,可以几个Q吗?QQ:Re:
回复xShuGen12:平时很少上Q,有问题还是尽量在这提出来吧,也方便其他人。
喜欢该文的人也喜欢

参考资料

 

随机推荐