标签: kinect

Otsu阈值处理深度图像

我试图从kinect获得的深度图像中减去背景.当我学会了什么otsu阈值时,我认为它可以用它.将深度图像转换为灰度,我希望可以应用otsu阈值来对图像进行二值化.

不过我用OpenCV 2.3实现了这个(试图实现),但是徒劳无功.然而,非常意外地将输出图像二值化.我连续进行了阈值处理(即将结果打印到屏幕上以分析每一帧),并发现对于某些帧,阈值被发现为160ish,有时它被发现为0.我不太明白为什么会发生这种情况.可能是由于kinect返回的深度图像中的0的高数量,这对应于无法测量的像素.有没有办法可以告诉算法忽略值为0的像素?或者otsu阈值对我想做的事情不好?

以下是相关代码的一些输出和部分.您可能会注意到第二个屏幕截图看起来可以做一些很好的二值化,但是我希望实现一个能够区分对应于场景中的椅子和背景的像素.

谢谢.

            cv::Mat1s depthcv(depth->getHeight(), depth->getWidth());
            cv::Mat1b depthcv8(depth->getHeight(), depth->getWidth());
            cv::Mat1b depthcv8_th(depth->getHeight(), depth->getWidth());
            depthcv.data =(uchar*) depth->getDepthMetaData().Data();
            depthcv.convertTo(depthcv8,CV_8U,255/5000.f);

            //apply otsu thresholding
            cv::threshold(depthcv8, depthcv8_th, 128, 255, CV_THRESH_BINARY|CV_THRESH_OTSU);
            std::ofstream output;
            output.open("output.txt");
            //output << "M = "<< endl << " "  << depthcv8 << endl << endl;
            cv::imshow("lab",depthcv8_th);
            cv::waitKey(1);
Run Code Online (Sandbox Code Playgroud)

图片1 这第二个截图看起来可以做一些很好的二值化

opencv kinect background-subtraction

13
推荐指数
1
解决办法
6581
查看次数

矢量化Kinect真实世界坐标处理算法的速度

我最近开始使用pylibfreenect2在Linux上使用Kinect V2.

当我第一次能够在散点图中显示深度帧数据时,我很失望地看到没有任何深度像素似乎在正确的位置.

房间的侧视图(通知天花板是弯曲的). 输入图像描述hethat therere

我做了一些研究,并意识到有一些简单的触发来完成转换.

为了测试,我开始使用pylibfreenect2中的预编写函数,该函数接受列,行和深度像素强度,然后返回该像素的实际位置:

X, Y, Z = registration.getPointXYZ(undistorted, row, col)
Run Code Online (Sandbox Code Playgroud)

这在纠正职位方面做得非常出色: 在此输入图像描述

使用getPointXYZ()getPointXYZRGB()的唯一缺点是它们一次只能处理一个像素.这在Python中可能需要一段时间,因为它需要使用嵌套的for循环,如下所示:

n_rows = d.shape[0]
n_columns = d.shape[1]
out = np.zeros((n_rows * n_columns, 3), dtype=np.float64)
for row in range(n_rows):
    for col in range(n_columns):
        X, Y, Z = registration.getPointXYZ(undistorted, row, col)
        out[row * n_columns + col] = np.array([Z, X, -Y])
Run Code Online (Sandbox Code Playgroud)

我试图更好地理解getPointXYZ()如何计算坐标.据我所知,它看起来类似于OpenKinect for Forfor函数:depthToPointCloudPos().虽然我怀疑libfreenect2的版本还有更多内容.

使用该gitHub源代码作为示例,然后我尝试在Python中重新编写它以进行我自己的实验,并出现以下内容:

#camera information based on the Kinect v2 hardware
CameraParams = {
  "cx":254.878,
  "cy":205.395,
  "fx":365.456,
  "fy":365.456,
  "k1":0.0905474, …
Run Code Online (Sandbox Code Playgroud)

python numpy vectorization kinect libfreenect2

13
推荐指数
1
解决办法
1947
查看次数

将键盘事件发送到C#中另一个不处理Windows事件的应用程序

这是我的情况:我们正在编写一个必须将Microsoft Kinect坐标转换为键盘和鼠标事件的应用程序.

当我们需要控制鼠标时,一切都按照我们在任何应用程序中的预期进行.当我们需要将键盘事件(如按键或键盘)发送到不处理Windows事件的应用程序(例如游戏)时,就会出现问题.

我们尝试了.net框架的SendKeys类,它只适用于Windows应用程序.当应用程序是像Half-Life或Doom这样的游戏时,我们无法获得相同的效果.所以,这是我的问题:我们如何有效地将键盘事件发送到这些其他应用程序?

c# mouse events keyboard-events kinect

12
推荐指数
1
解决办法
5194
查看次数

来自视野的Kinect内在参数

微软声称Kinect的视角为垂直43度,水平57度(此处说明).鉴于这些,我们可以计算内在参数,即焦点和投影中心吗?我假设投影中心可以给出(0,0,0)?

谢谢

编辑:有关我正在尝试做什么的更多信息

我有一个用Kinect记录的图像数据集,我试图将像素位置(x_screen,y_screen和z_world(mm))转换为真实世界坐标.

如果我知道相机放置在真实世界坐标系中的点(x',y',z'),通过执​​行以下操作就足以找到真实世界的坐标:

x_world = (x_screen - c_x) * z_world / f_x
y_world = (y_screen - c_y) * z_world / f_y
Run Code Online (Sandbox Code Playgroud)

其中c_x = x'c_y = y'f_x, f_y是焦距?而且,只要了解视野,我怎样才能找到焦距?

谢谢

math geometry projection camera-calibration kinect

12
推荐指数
1
解决办法
2万
查看次数

隐式转换为'System.IDisposable'错误

这就是我想要做的

private KinectAudioSource CreateAudioSource()
{
    var source = KinectSensor.KinectSensors[0].AudioSource;
    source.NoiseSuppression = _isNoiseSuppressionOn;
    source.AutomaticGainControlEnabled = _isAutomaticGainOn;
    return source;
}
private object lockObj = new object();
private void RecordKinectAudio()
{
    lock (lockObj)
    {
        using (var source = CreateAudioSource())
        {
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

'using'语句给出了一个错误,指出 - "'Microsoft.Kinect.KinectAudioSource':在using语句中使用的类型必须可以隐式转换为'System.IDisposable'".如何消除此错误,这是什么意思?

c# kinect

12
推荐指数
4
解决办法
7万
查看次数

我可以在虚拟机上使用Kinect API吗?

这个编程指南暗示这是可能的,所以我想到了什么.

但是现在,它不起作用.

主机操作系统是Vista 64位,VMWare Workstation 6.5.3运行Windows 7企业版32位.

VM上安装的软件:

  • Visual C#2010 Express
  • Microsoft服务器语音平台运行时
  • Microsoft服务器语音识别语言 - Kinect
  • Microsoft Speech Platform SDK
  • 适用于Windows SDK Beta的Kinect

我插入Kinect,设备被VM识别,然后我运行Sample Shape Game,它无法识别设备.它说"插入Kinect然后重试",结果证明是错误0x80080014,这导致 http://social.msdn.microsoft.com/Forums/en-US/kinectsdknuiapi/thread/4da8c75e-9aad-4dc3- bd83-d77ab4cd2f82 / 这给了我两件事要看:

  1. 它是用特殊电缆插入的吗?是
  2. 是设备管理器中的所有4个条目?没有

在设备管理器中,我看到一个包含Microsoft Kinect Audio Control,Microsoft Kinect Camera和Microsoft Kinect Device的"Microsoft Kinect"组,但除了VMware VMaudio之外,"声音,视频和游戏控制器"下没有任何内容.应该有"Kinect USB Audio".

我猜我还有一些与VMWare USB /硬件选项有关的问题(无论是带有USB/CD/HD /软盘等图标的托盘)还是一些巧妙的重启和(联合)插件组合,但我几乎没有热情.

有任何想法吗?TIA

编辑:我意识到我在OpenKinect的主机(Vista)系统上有一些挥之不去的驱动程序.删除后,我再也看不到VM中的Kinect了.嗯.

virtual-machine kinect

11
推荐指数
1
解决办法
7140
查看次数

如何将kinect的深度图像与彩色图像对齐

由Kinect上的颜色和深度传感器产生的图像略微不对齐.我怎样才能改变它们以使它们排成一行?

c# kinect

11
推荐指数
1
解决办法
6761
查看次数

使用Kinect for Windows SDK时,您可以使用Kinect的模拟器,还是必须使用硬件?

我希望我的几个开发人员立即开始使用Kinect SDK,时间紧迫.因为他们不在美国,所以我需要花费太多时间才能获得Kinect以及与PC一起使用所需的电缆.

有没有办法可以在没有物理硬件的情况下使用SDK?也许用模拟器或其他方法?

kinect

11
推荐指数
1
解决办法
3246
查看次数

如何在kinect中实现波形手势?

我想使用手势,因此kinect可以选择以手势为主要玩家的人.在此之后,他可以控制PC.选择该人并给予他们控制权已完成.现在我必须实现一个手势,但我不知道如何开始.

谁能帮我?

c# gesture-recognition gesture kinect

11
推荐指数
1
解决办法
8582
查看次数

Kinect SDK 2与Xbox 360 Kinect兼容吗?

我正在尝试使用Kinect for Xbox 360开发面部识别应用程序.我想知道应该使用哪个SDK和Visual Studio版本来最佳地访问Kinect.

kinect kinect-sdk

11
推荐指数
1
解决办法
2万
查看次数