2013-06-10 2 views
0

kinect 센서로 탐지 알고리즘을 작성했습니다. 이제 나는 합동 머리를 정교하게 다듬었다. 이런 관점에서 바닥까지의 거리를 계산한다kinect로 fall 감지하기

public void verificaCaduta(SkeletonFrame skeletonFrame, KinectDati_Joints joints) 
     { 
      if (skeletonFrame != null && joints != null) 
      { 
       float A = skeletonFrame.FloorClipPlane.Item1; 
       float B = skeletonFrame.FloorClipPlane.Item2; 
       float C = skeletonFrame.FloorClipPlane.Item3; 
       float D = skeletonFrame.FloorClipPlane.Item4; 

       //dovrei calcolare la distanza dal pavimento 
       //joint head 
       float addendo1 = A * joints.head.Position.X; 
       float addendo2 = B * joints.head.Position.Y; 
       float addendo3 = C * joints.head.Position.Z; 

       float addendo1_d = A * A; 
       float addendo2_d = B * B; 
       float addendo3_d = C * C; 


       float numeratore = addendo1 + addendo2 + addendo3 + D; 
       float denominatore = addendo1_d + addendo2_d + addendo3_d; 

       float distanza = numeratore/(float)System.Math.Sqrt(denominatore); 
       // Console.WriteLine("probabile caduta " + distanza); 

       if (distanza <= 0.60) 
       { 
        Console.WriteLine("fall detection ?"); 
       } 
      } 
     } 

바닥으로부터의 거리가 0.6 I 낙하 검출 이전 인 경우. 하지만 지금은 알고리즘을 복잡하게 만들 것입니다. 나는 바닥에서 distanze를 계산하고 모든 정보를 결합 할 것이다.

우리가 나를 도울 수 있습니까 ????

안부 모든

답변

0

는 방법 "DistanceFromJointToFloor"로 거리 산출 코드를 추출하고 각 관절 호출 새로운 방법을 반복. 0.6f의 당신의 문턱까지의 거리 결과를 비교 :

public float DistanceToFloor(SkeletonFrame skeletonFrame, Joints joint) 
{ 
    float A = skeletonFrame.FloorClipPlane.Item1; 
    float B = skeletonFrame.FloorClipPlane.Item2; 
    float C = skeletonFrame.FloorClipPlane.Item3; 
    float D = skeletonFrame.FloorClipPlane.Item4; 

    //dovrei calcolare la distanza dal pavimento 
    //joint head 
    float addendo1 = A * joints.head.Position.X; 
    float addendo2 = B * joints.head.Position.Y; 
    float addendo3 = C * joints.head.Position.Z; 

    float addendo1_d = A * A; 
    float addendo2_d = B * B; 
    float addendo3_d = C * C; 


    float numeratore = addendo1 + addendo2 + addendo3 + D; 
    float denominatore = addendo1_d + addendo2_d + addendo3_d; 

    float distanza = numeratore/(float)System.Math.Sqrt(denominatore); 
    return distanza; 
} 

하는 것은 다음 수정 방법은 다음과 같습니다 (참고 : 난하지만 난 당신이에서 관절을 추출 할 수있는 모음입니다 가정 어떤 유형 KinectDati_Joints 모른다) :

public void verificaCaduta(SkeletonFrame skeletonFrame, KinectDati_Joints joints) 
{ 
    if (skeletonFrame != null && joints != null) 
    { 
     foreach(Joint joint in joints) 
     { 
      float distanza = DistanceToFloor(skeletonFrame, joint); 
      if (distanza <= 0.60) 
      { 
        Console.WriteLine("fall detection ?"); 
        Console.WriteLine("with joint: " + joint); 
        Console.WriteLine("distance:" + distanza); 
      } 
     } 
    } 
} 
관련 문제