我试图在一个不完全恒定的背景上确定一个物体的运动和旋转(可以是纯色的,但不一定是)。这是一个例子:
使用关键点来查找tutorials中的转换不起作用,因为我正在处理的对象不一定为此提供足够的边缘。 由于背景的改变,构建差异图像并进行分割通常也会失败。在这个例子中它并没有那么糟糕,但可能会改变反射或轻微变形。
关于如何找到将对象(在本例中为蓝色的东西)从一个图像映射到另一个图像的转换矩阵(仿射,只有四个自由度)的任何想法?
答案 0 :(得分:0)
对图像减法结果使用二进制阈值(如此处所述 - Foreground Extraction) - 它应删除小的变化(这是闪电变化的结果)。在此之前你可能会尝试使用一些滤镜来模糊边缘,中值滤波器可能是一个不错的选择(但也尝试不同的滤镜) - 尝试在输入图像和图像减法结果上使用此技术。
<强> //编辑:强>
要确定转换,您可以尝试使用SURF - http://docs.opencv.org/doc/tutorials/features2d/feature_homography/feature_homography.html
如果您不需要计算旋转,请尝试使用光流技术 - http://robots.stanford.edu/cs223b05/notes/CS%20223-B%20T1%20stavens_opencv_optical_flow.pdf或更简单的方法:
1.在第一和第二图像上计算标记轮廓的几何中心(只是添加所有点的位置并将结果除以点数)(将它们命名为contour1和contour2)。或者,您可以计算填充轮廓的质心 - 这取决于您
你的转型是:movementVector = centerOfContour2 - centerOfContour1
如果结果不够准确,请尝试在图像上找到最大轮廓并在空图像上绘制此轮廓(这样您就不会有任何噪音,伪像等)。对新图像执行所有操作。