2014-07-23 1 views
2

Kinect V2에서 깊이와 색상 해상도가 서로 다른 것으로 알고 있습니다. SDK에서 매핑 API를 사용할 수 있으므로 색상 프레임에서 색상 값을 가져 와서 인터넷의 여러 게시물에 표시된 것처럼 깊이 프레임에 넣기가 쉽습니다. 그러면 최종 이미지 크기가 512x414가됩니다.Kinect V2 원래 해상도로 백그라운드에서 플레이어/사용자를 추출하는 방법 1920x1080

하지만 플레이어/사용자를 원본 색상 프레임으로 추출하여 최종 이미지의 해상도가 1920x1080이되도록했습니다.

매핑 API를 사용하여 색상 프레임에 User/PLayer 픽셀을 표시하는 것으로 생각할 수 있습니다. 그런 다음 몇 가지 휴리스틱을 적용하고 RGB 값 인접 픽셀을 표시하고 사용자/플레이어 이미지를 완성합니다.

우리가 할 수있는 최선의 방법에 대한 제안이 있습니까?

답변

1

안녕하세요. 심도에서 색상으로 매핑하는 대신 색상 프레임을 depthspace에 매핑하고 출력 이미지의 크기를 이미지의 크기와 동일하게 설정해보세요. 출력 이미지에 대한

coordinateMapper.MapColorFrameToDepthSpace(depthData, depthPoints); 

for (int colorIndex = 0; colorIndex < depthPoints.Length; ++colorIndex) 
      { 
       DepthSpacePoint depthPoint = depthPoints[colorIndex]; 

       if (!float.IsNegativeInfinity(depthPoint.X) && !float.IsNegativeInfinity(depthPoint.Y)) 
       { 
        int depthX = (int)(depthPoint.X + 0.5f); 
        int depthY = (int)(depthPoint.Y + 0.5f); 

        if ((depthX >= 0) && (depthX < depthWidth) && (depthY >= 0) && (depthY < depthHeight)) 
        { 
         int depthIndex = (depthY * depthWidth) + depthX; 
         byte player = bodyData[depthIndex]; 
         if (player != 0xff) 
         { 
          int sourceIndex = colorIndex * 4; 

          OutImage[sourceIndex] = _colorData[sourceIndex++];  
          OutImage[sourceIndex] = _colorData[sourceIndex++];  
          OutImage[sourceIndex] = _colorData[sourceIndex++];  
          OutImage[sourceIndex] = 0xff;       
         } 
        } 
       } 
      } 

초기화 :

OutImage= new byte[colorWidth*colorHeight*4]; //1920x1080x4