我正在尝试从两张图片中删除前景,这是一对示例图片:
如您所见,在拍摄第二个镜头之前,百威啤酒瓶已从场景中移走。
这些照片是用针孔相机 (iPhone) 拍摄的,棘手的部分是我手持相机,所以不能保证图像逐像素完美对齐,所以一个简单的负-阈值方法将不起作用。
然后,我决定使用 OpenCV 中的 findHomography
和 warpPerspective
进行图像配准,结果图像如下:
此图像使用我从 findHomography
获得的矩阵进行了变形,这在某种程度上提高了对齐质量,但仍然没有对齐,因此我可以使用一种简单的方法来移除前景。
所以,最后,我决定实现“模糊减法”算法:对于 image1 中的每个像素,我将查看 image2 中的 7x7 邻居(7 x 7 内核?),使用灰度级的最小差异作为负的结果,并将结果阈值化为二值图像,这就是我得到的:
结果还是不好。请注意瓶子中的白色整体,这是由于前景和背景的灰度值相似而产生的。所以我不确定现在该怎么办。
我可以想到两种方法来解决这个问题,第一种是得到一个更好对齐的图像对,简单地减去对;二是使用更稳健的方式提取前景。
任何人都可以就如何处理此类问题给我一些建议吗?我相信应该有一些最先进的算法或处理管道,但谷歌搜索后,我一无所获。
我正在将 OpenCV 与 C++ 结合使用,如果您能告诉我如何使用这些工具来完成它,那就太棒了。
非常感谢!
最佳答案
问题不在你的算法中。您遇到问题是因为两个场景不是从完全相同的角度拍摄的,如下面的动画所示。这种细微的差异突出了减法的边缘。
您需要一个静态相机才能应用此方法。
关于c++ - 像素级图像配准/对齐?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20134703/