KinectSensor.IsKnownPointの挙動
About
DepthImagePixel.IsKnownPointの他に、KinectSensor.IsKnownPointなるメソッドがKinectSDK1.6から追加されました。ところがコレの働きが良く分かりません。文面のみ見ると、範囲内に収まっているかいないかをtrue,falseで判定してくれそうですが、検証した所、そうでは無いようです。もしくは実装されたものの、きちんと動作していないのか。はたまたそもそも使い方が異なるのか。
- &ref(): File not found: "WpfApplication1_IsKnownPointTester.zip" at page "Kinect/KinectForWindowsSDK/Tips/KinectSensorIsKnownPointMethodsWorks";
- VisualStudio2012
- KinectSDK1.6
- WPF
検証
まずKinectSensorを取得、ColorStreamとDepthStreamを解像度640で有効化します。次いで任意の値を与えた「ColorImagePoint」と「DepthImagePixel」を生成してKinectSensor.IsKnownPointメソッドの引数として与え、その結果を見ます。
詳細はサンプルを直接見てもらうとして、この様に、スライダの値が変更された場合に任意のColorImagePointやDepthImagePixelを生成しています。
private void slider_CIP_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e) { //仮に作る ColorImagePoint colorImagePoint = new ColorImagePoint(); colorImagePoint.X = (int)slider_ColorImagePointX.Value; colorImagePoint.Y = (int)slider_ColorImagePointY.Value; //結果を表示する this.label_CIP_Result.Content = KinectSensor.IsKnownPoint(colorImagePoint); }
結果
先に示した画像の通り、どうやら有効化しているカメラの解像度外の値を示すColorImagePointを与えても、KinectSensorIsKnownPointメソッドはtrueを返すようです。負の値を与えているので確かでしょう。つまりColorImagePointが有効範囲内にあるかどうかを識別するためにKinectSensorIsKnownPointメソッドは利用するべきではないということです(KinectSDK1.6時点)。
またDepthImagePixelに関しては、深度値Depthを0にした場合にのみ、KinectSensorIsKnownPointメソッドはfalseを返します。この挙動は、DepthImagePixel.IsKnownPointの挙動と同じことが分かります。
- DepthImagePixel.IsKnownPointの検証