Kinect开启骨骼平滑算法的方法

来源:互联网 发布:linux 16进制转10进制 编辑:程序博客网 时间:2024/05/16 16:05

这几天做Kinect开发,需要检测手在三维空间中的位置,检测时不免会出现抖动的情况,这时候可以调用SDK自带的平滑算法。


调用方法:(以下代码使用的是最新SDK 1.5正式版)

声明传感器变量

               KinectSensor sensor;

然后窗口的Load事件中我们都要写:

               this.sensor.SkeletonStream.Enable();

此时的函数不接受任何参量,也就是系统不会进行平滑,开启平滑算法的方法就是向Enable()方法中传参


声明TransformSmoothParameters变量

TransformSmoothParameterssmoothParameters;

为平滑算法的参数赋值:

smoothParameters.Smoothing = 0.5f; // 设置处理骨骼数据帧时的平滑量,接受一个0-1的浮点值,值越大,平滑的越多。0表示不进行平滑。
//smoothParameters.Correction; // 接受一个从0-1的浮点型,值越小,修正越多
//smoothParameters.JitterRadius; // 抖动半径,单位为m,如果关节点“抖动”超过了设置的这个半径,将会被纠正到这个半径之内
//smoothParameters.MaxDeviationRadius; // 用来和抖动半径一起来设置抖动半径的最大边界,任何超过这一半径的
点都不会认为是抖动产生的,而被认定为是一个新的点。该属性为浮点型,单位为米

//smoothParameters.Prediction; // 返回用来进行平滑需要的骨骼帧的数目


this.sensor.SkeletonStream.Enable(smoothParameters); // 开启骨骼流,利用平滑


阈值的选取没有什么方法,大家需要根据具体情况调整……这是最囧的一点,我也曾经想过一些平滑算法,但是水平不够,效果也不好

平滑的原理就是低通滤波器

注意:

一定要提前定义一个TransformSmoothParameters变量,然后用这个变量作为Enable()方法的参数;

走过的弯路:

由于没有定义一个临时的变量TransformSmoothParameters  smoothParameters作为Enable的参数,而是直接对this.sensor.SkeletonStream.SmoothParameters赋值,就会提示错误:

无法修改××的返回值,因为它不是变量


原创粉丝点击