2011-10-05 3 views
0

저는 opencv에 완전히 익숙하며 최근 kinect가 탐지 한 가장 가까운 얼룩의 중심을 찾기 위해 과제를 할당 받았습니다. kinect 앞에서 손이 몸에 비해 가장 가까운 얼룩이됩니다.kinect를 사용하여 opencv에서 가장 가까운 블록을 찾으려면 제안이 필요합니다.

나는 샘플 코드를 제공 받았는데,이 코드는 온라인 here에서도 찾을 수있다. 지금까지는 두 가지 접근법 만 생각할 수 있습니다. 하나는 cvFindContours()를 사용하여 객체의 모든 윤곽선을 얻은 다음 각 객체를 반복하여 가장 가까운 객체를 찾습니다. 문제는 각 컨투어의 깊이 정보를 얻는 데 사용할 수있는 기능이 있는지 모르기 때문에 어떻게해야할지 모릅니다.

두 번째 아이디어는 depthMat 행렬을 반복하면서 가장 가까운 값인 가장 가까운 값을 찾아 블록을 찾기 위해 전파하고 블록을 그립니다. 이 문제는 너무 많은 계산이 필요하다는 것인데, 이는 내 kinect 비디오 응답이 매우 느리게 일어납니다.

누구나이 작업에 대한 좋은 제안이 있습니까? 감사.

답변

0

반복 범위 게이팅을 시도해 볼 수 있습니다. 제한된 거리에서 Kinect의 최대 유효 거리는 약 6m이므로이 방법이 효과적 일 수 있습니다.

깊이를 센티미터로 가정합니다 (카운트의 경우 적절하다고 판단되는 10, 100 또는 1000 카운트의 빈으로 카운트를 나눕니다).

  • closestDepth - 마스크로를 곱하여 실제 물체 거리를 얻기 위해 사용하는 깊이 이미지를해야한다 : 그 루프가 발발하면

    Mat depthData, objectMask; 
    Mat closestDepth, closestObjectMask, closestDist; 
    
    // getting depth data from kinect out here... 
    
    for(int i = 600; i > 0; i -= 20) 
    { 
        threshold(depthData, objectMask, (double)i, 1, THRESH_BINARY_INV); 
        // gated out all objects (may need to adjust pixel count for best results) 
        Scalar pixelCount = sum(objectMask); 
        if(pixelCount.val[0] < 1.0) 
        { 
         break; 
        } 
    
        closestDepth = depthData; // last good depth data 
        closestObjectMask = objectMask; // last good object mask 
        closestDist = i; // last closest distance 
    } 
    

    , 다음이 있어야합니다.

  • closestDist은 -

희망 도움이 가장 가까운 물체 (큰 윤곽 또는 비슷한 그것을 추적)의 마스크해야한다 - "블랙 아웃"

  • closestObjectMask 전 범위 게이트의 거리에 있어야한다 !