Kinect体感游戏网 - xbox360 kinect体感游戏论坛 - xbox360 kinect体感游戏开发 - cnKinect.com

 找回密码
 注册
搜索
查看: 2157|回复: 9

[讨论] kinect sdk中深度和rgb的对齐问题   [复制链接]

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-7-30 16:36:21 |显示全部楼层
本帖最后由 20091001753 于 2012-3-25 16:12 编辑

试着做了一个从rgb图像中扣取人物的代码。发现rgb图像和深度图像在时间和空间上都有一定的差距。
请问怎么将这两者对齐(时间和空间)
或者说扣取人物这个功能还需要什么其他的处理,因为之前看某位大牛用openNI做的一个打砖块的游戏中是可以把人物较为完整的扣取出来的。
小弟是新手,望各位大神不吝指教。
P.S.我是用C#做开发的。



附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-8-1 20:53:52 |显示全部楼层
回复 20091001753 的帖子

我现在遇到的问题是,GetColorPixelCoordinatesFromDepthPixel这个函数是从深度坐标映射到RGB坐标。但是kinect获得的RGB图是640*480,深度图是320*240,这两个是不成比例的。
使用GetColorPixelCoordinatesFromDepthPixel直接将对应的RGB像素扣取出来的话肯定是虚的,需要进行压缩才可以。
请问这个应该如何解决?

使用道具 举报

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-8-1 21:58:43 |显示全部楼层
本帖最后由 sbihero 于 2011-8-1 21:58 编辑

回复 20091001753 的帖子

我在C#中尝试这样的声明: nui.DepthStream.Open(ImageStreamType.Depth, 2, ImageResolution.Resolution640x480, ImageType.DepthAndPlayerIndex);
结果抛出异常了。


使用道具 举报

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-8-1 22:15:10 |显示全部楼层
回复 20091001753 的帖子

靠...知道原因了。depth支持640*480
但是DepthAndPlayerIndex只支持320*240。

我的项目要求抠取人物的图像...有什么解决方案吗?

使用道具 举报

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-8-1 22:42:25 |显示全部楼层
本帖最后由 sbihero 于 2011-8-1 22:56 编辑

回复 20091001753 的帖子

那请问一下你的NuiImageGetColorPixelCoordinatesFromDepthPixel是如何调用的呢?usDepthValue,*pcViewArea 分别传入的是什么值?

我的usDepthValue值只要不是0,返回的x、y就会超出分辨率的范围,查完了文档也不知道是为什么。

使用道具 举报

Rank: 2

分享
0
主题
1
sbihero 发表于 2011-8-2 01:50:31 |显示全部楼层
回复 20091001753 的帖子

ok,解决了。就是不知道为什么这个函数还会返回越界的坐标。明明已经把分辨率信息传进去了.....

使用道具 举报

Rank: 2

分享
0
主题
0
tiangler 发表于 2011-8-3 11:38:55 |显示全部楼层
我也做了一个,发现是有越界的问题。下面是效果图:



个人经验:
1、关于NuiImageGetColorPixelCoordinatesFromDepthPixel的参数:pcViewArea没有用到,可以直接传入NULL;usDepthValue的值应该为原始buffer里的16位数值,不需要右移3位
2、关于如何将320*240的深度图坐标映射到640*480的彩色图坐标:用NuiImageGetColorPixelCoordinatesFromDepthPixel获取到彩色图的坐标后,不止需要标记这一个像素点,而是应该标记一个以其为中心的3*3的矩阵,这样分割出来的图像才不会有空洞。
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

Rank: 2

分享
0
主题
0
goneflash 实名认证  发表于 2011-8-10 23:22:45 |显示全部楼层
回复 tiangler 的帖子

你好~请问你做的把rgb贴到深度图上去是用c#的写的吗?有没有什么例程参考还是您自己写的呢?求指导...谢谢^_^

使用道具 举报

Rank: 1

分享
0
主题
0
zergb 发表于 2012-2-21 14:41:23 |显示全部楼层
20091001753 发表于 2011-8-3 12:57
回复 tiangler 的帖子

其实我“NuiImageGetColorPixelCoordinatesFromDepthPixel”从来都没成功过。

NuiImageGetColorPixelCoordinatesFromDepthPixel函数确实有失效的时候,这是因为该像素的深度信息不可用的,判断依据是改点的深度值为0。这时由于非法值的存在,导致运算结果越界,必须通过判断进行筛选。以下是示例代码,请参考。

                for(int i=0; i<KINECT_DEPTH_W*KINECT_DEPTH_H; ++i)
                {
                        // 真实深度
                        RealDepth = (pBufferRun & 0xfff8) >> 3;

                        // RGB和深度对齐,跳过无效点
                        if (RealDepth==0)
                                continue;

                        // 有效点转换坐标
                        NuiImageGetColorPixelCoordinatesFromDepthPixel(
                                KINECT_DEPTH_W==320 ? NUI_IMAGE_RESOLUTION_320x240 : NUI_IMAGE_RESOLUTION_640x480,
                                NULL,
                                i % KINECT_DEPTH_W,
                                i / KINECT_DEPTH_W,
                                pBufferRun,
                                &lX,
                                &lY
                                );
                }

使用道具 举报

Rank: 2

分享
0
主题
1
peter_wwj 发表于 2012-4-26 14:52:49 |显示全部楼层
那如果是用openni实现的抠人,该怎么做匹配啊,我做的效果非常差》。。。。。

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

xbox360 kinect体感游戏网热门内容|Kinect体感游戏网 (京ICP备09096674号-7)

GMT+8, 2012-5-19 04:35 , Processed in 0.787606 second(s), 14 queries .

www.cnkinect.com

© 2010-2015 xbox360 kinect体感游戏网

回顶部