c++ - 像素级图像配准/对齐?

标签 c++ opencv image-processing computer-vision

我正在尝试从两张图片中删除前景,这是一对示例图片:

Image 1 Image 2

如您所见,在拍摄第二个镜头之前,百威啤酒瓶已从场景中移走。

这些照片是用针孔相机 (iPhone) 拍摄的,棘手的部分是我手持相机,所以不能保证图像逐像素完美对齐,所以一个简单的负-阈值方法将不起作用。

然后,我决定使用 OpenCV 中的 findHomographywarpPerspective 进行图像配准,结果图像如下:

Img 3

此图像使用我从 findHomography 获得的矩阵进行了变形,这在某种程度上提高了对齐质量,但仍然没有对齐,因此我可以使用一种简单的方法来移除前景。

所以,最后,我决定实现“模糊减法”算法:对于 image1 中的每个像素,我将查看 image2 中的 7x7 邻居(7 x 7 内核?),使用灰度级的最小差异作为负的结果,并将结果阈值化为二值图像,这就是我得到的:

Image4

结果还是不好。请注意瓶子中的白色整体,这是由于前景和背景的灰度值相似而产生的。所以我不确定现在该怎么办。

我可以想到两种方法来解决这个问题,第一种是得到一个更好对齐的图像对,简单地减去对;二是使用更稳健的方式提取前景。

任何人都可以就如何处理此类问题给我一些建议吗?我相信应该有一些最先进的算法或处理管道,但谷歌搜索后,我一无所获。

我正在将 OpenCV 与 C++ 结合使用,如果您能告诉我如何使用这些工具来完成它,那就太棒了。

非常感谢!

最佳答案

问题不在你的算法中。您遇到问题是因为两个场景不是从完全相同的角度拍摄的,如下面的动画所示。这种细微的差异突出了减法的边缘。

enter image description here

您需要一个静态相机才能应用此方法。

关于c++ - 像素级图像配准/对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134703/

相关文章:

merge - OpenCV 中的 Alpha channel

c++ - 编写 Nim 游戏

c++ - 调试客户机器上生成的核心文件

c++ - 可嵌入公式解释器

c++ - gcc 链接错误 : undefined reference to symbol '_ZN2cv5flann12SearchParamsC1Eifb' ,

c++ - 如何在 opencv 中进行 Mul 混合

c++ - LNK2019视觉社区C++

python - 获取分割图像的最大连通分量

android - 如何将android触摸坐标转换为OpenCV图像坐标?

android - android中的连接组件标签