首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >像素级图像配准/对齐?

像素级图像配准/对齐?
EN

Stack Overflow用户
提问于 2013-11-22 08:28:43
回答 4查看 4.7K关注 0票数 3

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

这些照片是从针孔相机(iPhone)捕获的,并且,棘手的部分是我手持相机,因此不能保证图像逐个像素完全对齐,因此简单的减阈值方法将不起作用。

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

这张图像与我从findHomography得到的矩阵发生了扭曲,这在某种程度上提高了对齐质量,但仍然没有对齐,所以我可以使用一种简单的方法来去除前景。

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

结果仍然不是很好。注意瓶子里的白色整体,这是由于前景和背景的灰度值相似而产生的。

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

我相信应该有一些最先进的算法或处理管道,但在谷歌搜索后,我什么也得不到。

我正在使用OpenCV和C++,如果你能告诉我如何使用这些手头的工具,那就太棒了。

首先,非常感谢!

EN

回答 4

Stack Overflow用户

发布于 2013-11-22 09:25:55

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

您需要一个静态摄像头才能应用此方法。

票数 4
EN

Stack Overflow用户

发布于 2013-11-23 09:03:42

我建议在面具上使用数学形态学,这样你就可以去掉伪影。尝试同时应用打开和关闭,以消除黑色和白色的小区域。

Mathematical Morphology

Mathematical Morphology in opencv

这两张图片之间的差异非常大,所以你需要使用一个大的结构元素,但我不认为你能够摆脱阴影。对于背景中的两个大条带,您也可以尝试使用水平形状的结构元素。

编辑

有没有可能产生灰度图像而不是二值图像?如果是,您可以尝试使用阴影的hat方法,但我不确定这一点。

这是我使用两个不同的结构元素来关闭和打开的结果

代码语言:javascript
复制
Mat mask = imread("mask.jpg",CV_LOAD_IMAGE_GRAYSCALE);
morphologyEx(mask,mask,MORPH_CLOSE,getStructuringElement(CV_SHAPE_ELLIPSE,Size(50,10)));
morphologyEx(mask,mask,MORPH_OPEN,getStructuringElement(CV_SHAPE_ELLIPSE,Size(10,50)));
imshow("open",mask);
imwrite("maskopenclose.jpg",mask);

票数 1
EN

Stack Overflow用户

发布于 2013-11-24 22:27:13

我建议使用光流对齐和OpenCV的背景减去算法:

http://docs.opencv.org/trunk/doc/tutorials/video/background_subtraction/background_subtraction.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20134703

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档