2012-09-27 2 views
2

몇 가지 포인트 : http://www.youtube.com/watch?feature=player_embedded&v=MIYt1yNwoZU광학 플로우 :이 같은 것을 할 노력하고있어

내가 올바른 방법에있어, 그것을 코딩 2 시간 동안 잘 작동합니다. 내가 OpenCV의 2.4을 사용하고 있는데 몇 가지 옵션이 주변에있다

  • .. here 참조 :하지만 몇 가지 질문이 있습니다. 어느 것이 최고인가? 자동 감지 기능이있는 lucas kanade? 아니면 간단한 글로벌 오리엔테이션이면 충분할까요? 또는 심지어 칼만 필터? 지금은 밀도가 높은 farneback의 알고리즘을 사용하고 있으며 첫 번째 (더 간단한) 옵션이라고 생각하지만 아마도 가장 좋은 옵션은 아닙니다.

  • 이미지에 옵티컬 플로우를 계산 한 후 (하드 플로우이므로 옵티컬 플로 계산을 위해 2 배로 축소됨) 벡터의 평균을 취합니다. 정상 평균, 그들 모두를 합계하고 벡터의 숫자에서 나눈. 그래서 flow mat에 중첩 된 for 루프가있다. 더 좋은 방법?

    Point2f average_motion(0,0); float n=1; 
    
    for(int y = 0; y < flow.rows; y += step) 
        for(int x = 0; x < flow.cols; x += step) { 
    
         const Point2f& fxy = flow.at<Point2f>(y, x); 
    
         if(abs(fxy.x) > threshold || abs(fxy.y) > threshold) { 
          average_motion += fxy; 
          n++; 
         } 
    
        } 
    average_motion *= 1/n; 
    
    average_motion *= 1/n; 
    cout << average_motion << endl; 
    
  • 나는의 구형하지만 왼쪽/오른쪽 움직임을 이동하고있어 대신 위/아래 작품 정말 좋은, 조금 이상한 것 같다! 누군가 왜 나를 설명 할 수 있니?

  • 번역은 괜찮지 만 회전하는 데 걸리는 시간이 길어집니다. 평균 벡터를 얻으면 어떻게 학위를 얻을 수 있습니까? X 축 벡터 사이의 각도로 시도했지만 좋은 작동하지 않습니다. 약간의 암시?

  • 는 이제 OpenCV의 드로잉 API를 사용하여 물건을 그리기 해요하지만 2.4에서 또한 OpenGL을 지원하지 .. 좋은해야합니다,하지만 난 그것에 대한 예를 찾을 수 없습니다 ..

+0

참조 =? 아마도 [estimateRigidTransform] (http://opencv.willowgarage.com/documentation/cpp/structural_analysis_and_shape_descriptors.html)? – Hammer

답변

4

최고 접근 방식은 움직임을 예측하기 위해 칼만 필터를 사용하므로 패치를 그 방향으로 투사하고 다음 프레임의 검색 영역을 줄일 수 있습니다. 계산 속도 향상.

나쁜 소식은 칼만 필터를 제대로 추적하는 것이 어렵다는 것입니다.

2

꽤 빠르기 때문에 Lucas Kanade 메서드를 사용하는 것이 좋습니다. 또는 Lucas Kanade와 비슷한 RLOF의 GPU 구현을 사용할 수 있습니다. 고밀도 모션 벡터 필드를 추정하지 마십시오. 그리드 (예 : 각 다섯 번째 픽셀)의 모션 벡터를 추정하면 많은 런타임을 절약 할 수 있습니다. 또는 이동하려는 직사각형을 추적 할 기능을 시드하십시오. 사각형을 움직이려면 변형 행렬을 추정하는 것이 더 우아 할 것입니다. 아핀 또는 원근법 cv :: getPerspectiveTransform 또는 cv :: getAffineTransform. 아핀 변환에는 이동, 회전 및 크기 조정이 포함되며 원근감에는 쉐이핑이 포함됩니다. (두 RANSAC 모두 좋은 견적가입니다.) 직사각형 포인트의 새 위치는 행렬 연산을 통해 쉽게 계산할 수 있습니다.

은 [X, Y, 1] 매트릭스 * [x_old, y_old, 1], 당신은 회전/번역을 얻기 위해 추정 기능을 제기하여 시도 적이 OpenCV의 문서

관련 문제