Top > Kinect > KinectForWindowsSDK > Tips > KinectSensorIsKnownPointMethodsWorks
Last-modified: Tue, 23 Oct 2012 00:16:37 JST
Counter:1486 Today:1 Yesterday:1 Online:10
このエントリーをはてなブックマークに追加

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

検証

0.png

 まず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の挙動と同じことが分かります。