2

オプティカル フロー ベクトルの重心を見つける必要があります。OpenCV の Lucas Kanade 関数を適用し、オプティカル フロー ベクトルを視覚的に確認できます。では、これらのベクトルをクラスター化し、それらの重心を見つけるにはどうすればよいでしょうか? フロー ベクトルがクラスター化されている場所を見つけることが、私が達成したいことです。

ベクトルはPoint2fの前のポイントと次のポイントです。これらのベクトルをクラスター化する方法がわかりません。kmeans関数を使用する場合、Matサンプルの構造はどうすればよいですか?

kmeans(サンプル, clusterCount, ラベル, TermCriteria(CV_TERMCRIT_ITER|CV_TERMCRIT_EPS, 0.0001, 10000), 試行, KMEANS_PP_CENTERS, センター );

ありがとう。

4

1 に答える 1

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

これはグローバルなアプローチのようなものです。ただし、ほとんどの場合、位置も考慮する必要があります。他のセグメンテーション方法を検討するか、位置を追加のディメンションとして追加する必要があります。

于 2013-01-16T20:05:39.087 に答える