私は 2 次元の点のベクトルを持っています。平均シフト アルゴリズムを使用してデータ内の複数のモードを検出しようとしていますが、メソッド シグネチャによって少し混乱しています。
1) ベクトルを渡すことはできますか (そうであれば、どのような形式で)、cv::Mat に変換する必要がありますか (そうであれば、どのように? 負の値を持つポイントがある場合)。
2)複数のモードを抽出するにはどうすればよいですか。関数がintのみを返すことがわかります
ありがとう
私は 2 次元の点のベクトルを持っています。平均シフト アルゴリズムを使用してデータ内の複数のモードを検出しようとしていますが、メソッド シグネチャによって少し混乱しています。
1) ベクトルを渡すことはできますか (そうであれば、どのような形式で)、cv::Mat に変換する必要がありますか (そうであれば、どのように? 負の値を持つポイントがある場合)。
2)複数のモードを抽出するにはどうすればよいですか。関数がintのみを返すことがわかります
ありがとう
OpenCV の平均シフトの実装は、( CamShift アルゴリズムの一部として) 単一のオブジェクトを追跡するためのものであるため、マルチモーダル分布を使用して複数のオブジェクトを追跡するように拡張されたとは思いません。確率画像のモードを中心としたバウンディング ボックスが表示されます ( の参照パスによって返されますcv::Rect window
)。
データはガウス分布 (またはその他の対称分布) の混合として表現されていますか? その場合、 k の選択には問題がありますが、 k-meansクラスタリングを使用して分布の平均 (対称分布のモードになります) を見つけることができる場合があります。
あるいは、複数のオブジェクトの追跡 (または複数のモードの検出) を可能にするハックには、この関数を繰り返し呼び出し、モードを取得してから、逆投影ヒストグラムからこのセクションをゼロにすることが含まれる可能性があります。
データの形式に関しては、関数の入力は を介しているcv::Mat
ため、データを変換する必要があります。ただし、負の値があると主張し、このopencv関数は確率ヒストグラム(通常、を使用して画像から計算する)を期待しているため、負の値を含むcv::calcBackProject()
ものを渡そうとすると文句を言うと思います。cv::Mat