2012-11-27 2 views
2

옵티컬 플로우 벡터의 중심을 찾아야합니다. OpenCV Lucas Kanade 함수를 적용하여 시각적으로 광학 흐름 벡터를 볼 수 있습니다. 이제 어떻게이 벡터들을 클러스터링하고 그들의 중력 중심을 찾으십니까? 흐름 벡터가 클러스터링되는 위치를 찾는 것은 내가 달성하기를 원하는 것입니다.옵티컬 플로우 클러스터의 중심점

벡터가 Point2f 이전 포인트와 다음 포인트입니다. 이 벡터를 클러스터하는 방법을 잘 모르겠습니다. kmeans 기능을 사용하는 경우 Mat 샘플의 구조는 무엇입니까?

kmeans (샘플, clusterCount, 라벨, TermCriteria (CV_TERMCRIT_ITER | CV_TERMCRIT_EPS, 0.0001, 10000), 시도, KMEANS_PP_CENTERS, 센터);

감사합니다.

답변

0

결과에 따라 결과가 달라집니다.

std::vector<cv::Point2f> prevPts, currPts; 
... run lucas kanade ... 
cv::Mat samples(prevPts.size(), 2, CV_32FC1); 
for(unsigned int n = 0; n < prevPts.size(); n++) 
{ 
    samples.at<float>(n,0) = currPts[n].x - prevPts[n].x; 
    samples.at<float>(n,1) = currPts[n].y - prevPts[n].y; 
} 
... run clustering 

이 글로벌 접근 방식처럼 : 당신은 당신의 모습 코드가 다음에 다음 및 이전 점의 차이를 추정하여 움직임을 계산하는 것보다 같은 이동 픽셀을 클러스터링합니다. 그러나 대부분의 경우 당신은 또한 그 입장을 고려해야합니다. 다른 세분화 방법을 고려해야하거나 위치를 추가 치수로 추가해야합니다.