opencv MeanShift:感兴趣的区域是哪个?

时间:2014-06-13 11:03:25

标签: c++ opencv

关于opencv和c ++中meanShift算法的一个非常基本的问题! 我不清楚哪个是搜索和相应移位的区域。 我的意思是:我实现了一个非常基本的例子 我向meanShift函数提供以下3个参数:

1)反投影矩阵A,

2)初始区域B从哪里开始搜索, cv :: Rect B(x,y,w,h);

3)TermCriteria对象C,
cv :: TermCriteria C(cv :: TermCriteria :: MAX_ITER,10,0.01);

然后我将这些参数传递给函数: cv :: meanShift(A,B,C);

现在,在矩形B移位的意义上,算法工作正常 从其初始位置B到与搜索的直方图相对应的新位置。 然而,新职位总是非常接近初始职位。 如果搜索到的对象不是非常接近起始位置B,则不执行移位。 我的意思是:就好像只在附近进行搜索一样 初始位置。是否有可能告诉算法在更广泛的区域搜索? 我尝试在TermCriteria中使用参数稍微玩一下,但似乎没有 影响必须进行搜索的区域。 非常感谢! Valerio

1 个答案:

答案 0 :(得分:2)

我认为你是正确的"我试图在TermCriteria"中尝试一些参数。

假设您在图像域中工作,查看文档,看起来因为epsilon条件指的是移动的最小距离,您将其设置为0.01像素。尝试将其更改为更大的数字,表示您希望它移动的最小像素数,例如将其设置为" 1"为1像素。 MAX_ITER标准也会在这里发挥作用,你可以设置为" 10"所以当前最大移位距离是10 * 0.01 = 0.1像素。如果您想要更大的班次,请将其设置为更大的数字,即100.现在使用:

    cv::TermCriteria C(cv::TermCriteria::MAX_ITER | cv::TermCriteria::EPS, 100, 1.0);

最小偏移是1个像素,最大值是100个像素(编辑:实际上这更像是最大值的下限,因为它可以在迭代中移动> 1个像素。)

^^请注意,您还没有将cv :: TermCriteria :: EPS添加到arg列表中。

如果这仍然不起作用,那么您的数据中可能存在噪声问题导致算法在错误的位置停止,因此可能需要进行一些预处理以消除噪声。