我正在尝试使用参考模板图像查找图像的平移和旋转。模板图像是以下图片之一。x1c 0d1x
由于分辨率很小(320*240),我们想用opencv(Image Registration)的图像配准类来解决对齐问题。我们不想使用基于特征的对齐。
到目前为止,我做了以下函数来对齐参考mImageTemplate
图像和图像以找到旋转和平移图像-input
:
cv::Mat pixelMapRegistration::align(cv::Mat input)
{
cv::Mat transformed;
cv::Ptr<cv::reg::Map> rot_shift_res;
cv::reg::MapperGradEuclid rot_shift = cv::reg::MapperGradEuclid();
rot_shift_res = rot_shift.calculate(mImageTemplate, input);
cv::reg::Map* res = rot_shift_res.get();
rot_shift_res->inverseWarp(input, transformed);
return transformed;
}
不幸的是,到目前为止它还不起作用。有人看到问题了吗?
2条答案
按热度按时间vmdwslir1#
解决方案不仅是一种,而是几种不同的对齐方法。这些图像配准技术只有在目标已经接近模板位置时才有效。因此我不再使用它了。
为了实现上述对准问题,几种方法的流水线完成了工作:
或
最后,您仍然会遇到这样的问题:如果零件从模板旋转超过+/- 90°,则上述粗略对齐方法都无法正确旋转零件。因此,使用增强相关系数(ECC)检查您的对齐是否成功,如果不成功,请将其旋转180°。
41zrol4v2#
在你的图像中,你有一个静态的渐变背景和一个移动的前景。你需要摆脱背景细节,因为它会影响MapperGrad。你可以尝试拍摄一张空白的照片,并使用绝对差异,或者你可以尝试做一个形态学的TopHat或BackroundSegmentation来过滤掉背景。但我怀疑你将需要从背景没有细节的更干净的图像开始。这当然是最简单的。
如果移动很小,您可以直接使用MapperGrad,但如果移动很大,如在图像集中,则需要将MapperGrad输入到MapperPyramid中。
我认为真实的的答案是你会想使用形状或模板匹配之类的东西来代替。图像配准并不真正意味着是一个特征/模式匹配工具,因为它考虑了整个图像。它实际上是当你试图在不使用基准点,视频稳定等的情况下减轻捕获之间的振动时。