我有一个二维点的向量,我试图使用meanshift算法来检测数据中的多个模式,但我对方法签名有点困惑。
1)我可以传递我的向量(如果是什么形式),或者我必须转换为cv::Mat(如果是如何?如果我有负值的点)
2)我如何提取多个模式,从我可以看到的函数只返回一个int
谢谢
OpenCV的mean shift实现是用于跟踪单个对象的(作为CamShift算法的一部分),因此我不认为它已经扩展到使用多模态分布来跟踪多个对象。它会给你一个以概率图像(由cv::Rect window
的参考通道返回)的模式为中心的边界框。
您的数据是否表示为高斯分布(或其他对称分布)的混合?如果是这样,你可能可以使用k-means聚类来找到分布的均值(这将是对称分布的模式),尽管选择k会有问题。
或者,一个可能允许跟踪多个对象(或找到多个模式)的黑客可能涉及重复调用该函数,检索模式,然后从后投影直方图中将该部分归零。
至于数据的形式,函数输入是通过cv::Mat
,因此您必须转换数据。然而,你声称有负值,这个opencv函数期望一个概率直方图(通常你使用cv::calcBackProject()
从图像中计算),所以我希望它会抱怨,如果你试图传递它一个包含负值的cv::Mat
。