2009-12-10 2 views
7

문제점 : 움직이는 비디오의 두 프레임을 정렬하려고합니다.밀도가 높은 옵티컬 플로우에서 속도 벡터를 추출하는 방법은 무엇입니까?

저는 현재 "cvCalcOpticalFlowLK"함수를 사용하려고합니다. 그리고 결과는 "CvArr"형태로 x와 y의 속도 벡터를 출력합니다.

결과를 얻었으나이 벡터 배열을 사용하는 방법을 모르겠습니다.

내 질문은 ... 어떻게 각 픽셀의 속도를 알 수 있습니까? 그 특정 지점의 각 픽셀 값의 값입니까?

참고 : 훨씬 더 쉽게 cvCalcOpticalFlowPyrLK()와 같은 다른 광학 흐름 함수를 사용했지만 조밀 한 광학 흐름이 필요합니다.

+0

저는 결과 이미지를 가지고 놀았습니다. 그리고 각 픽셀 값이 각 픽셀의 속도를 나타내지 만 어떤 단위가 정확하게 측정 되는가를 가정 할 것입니다. 누구나 "속도 값"이 해당 픽셀의 속도와 어떻게 일치하는지 알고 있습니까? 프레임 당 픽셀입니까? 또는 다른 것? 각 픽셀의 값은 32 비트 부동 소수점에 있습니다. – monky822

답변

4

내 원래의 가정은 사실이었습니다. 옵티컬 플로우 함수의 "velx"및 "vely"출력은 각 픽셀 값의 실제 속도입니다. 최상의 추출을 위해 원시 데이터에서 픽셀에 액세스하여 값을 가져 왔습니다. 이를 수행하는 방법은 두 가지가 있습니다.

cvGet2D() -이 방법은 속도가 느리지 만 1 픽셀 만 액세스해야한다면 괜찮습니다.

또는

(UCHAR *) (화상 -> imageData의 높이 + * 화상 -> widthStep + 폭);

각 화소에 대한 움직임 벡터를해야 할 경우 '고밀도 광 흐름'이라는 있는지 계산해야 다음,

0

velx 및 광학 흐름이 아닌 실제 속도입니다

는 아래의 링크를 참조하십시오. 사용한 메서드가 더 이상 사용되지 않습니다. 이것을 사용하십시오 calcOpticalFlowFarneback()

관련 문제