2014-04-13 1 views
1

현재 OpenCV C++를 통한 옵티컬 플로우 작업을하고 있습니다. 나는 calcOpticalFlowPyrLK를 포인트 그리드 (각 5 * 5 픽셀 스퀘어 당 하나의 관심 포인트)와 함께 사용하고있다. 가장 좋은 방법이다옵티컬 플로우 - 모션 히스토그램

:

1)의 값의 히스토그램 (방위 및 거리를 계산 각 프레임

2)에 대한 계산 값 (방위 및 거리)의 히스토그램을 계산한다)를 그 주어진 픽셀이 여러 프레임 동안 걸렸습니다 (예 : 100)

OpenCV의 기능이이 작업에 적합합니까? 어떻게 calcOpticalFlowPyrLK와 함께 간단한 방법으로 사용할 수 있습니까?

+0

히스토그램? 그게 어떻게 효과가 있니? – berak

+1

양자화 또는 선형 보간법. –

+0

오른쪽. 하지만 제 질문은 어떨까요? – DouglasAdams

답변

1

나는 몇 달 전에 동일한 OpenCV 도구를 찾고있었습니다. 불행히도 OpenCV에는 모션 히스토그램 구현이 포함되어 있지 않습니다. 대신, 각 프레임에 대해 calcOpticalFlowPyrLK를 실행하고 각 변위의 방향/길이를 계산해야합니다. 그런 다음 히스토그램을 직접 작성하거나 채워야합니다. 아니 하드는 소리, 날 믿어 :)

+0

Ok. 그게 내가하는 일이야. 하지만 몇 가지 추가 기능을 갖춘 멋진 구현을 찾고있었습니다. 귀하의 게시물을 가져 주셔서 감사합니다. 그 대답은 내 질문이다. – DouglasAdams

0

발굽의 주먹 부분에 대한 OpenCV의 구현은 아래와 같이 할 수있다 : * 플로트 * 값에 대한

const int rows = flow1.rows; 
const int cols = flow1.cols; 

for (int y = 0; y < rows; ++y) 
for (int x = 0; x < cols; ++x) 
{ 
    Vec2f flow1_at_point = flow1.at<Vec2f>(y, x); 
    float u1 = flow1_at_point[0]; 
    float v1 = flow1_at_point[1]; 
    magnitudeImage += sqrt((u1*u1) + (v1 + v1)); 
    orientationImage += atan2(u1, v1); 
}