通过正确定位补丁将重叠图像合并为单个图像

Posted

技术标签:

【中文标题】通过正确定位补丁将重叠图像合并为单个图像【英文标题】:Merging overlapping images into a single image by correctly positioning the patches one on the other 【发布时间】:2021-02-01 06:14:24 【问题描述】:

鉴于从图像中获取的许多补丁,任务是创建由补丁组成的单个图像。

我尝试过幼稚的解决方案:

    对于每 2 张图像,检查多个补丁并进行比较。 如果它们在某个置信度阈值以上相似,则创建 2 的新图像。 将新图像添加到池中并删除其他 2 个。 重复直到池大小为 1。

问题是这个解决方案很慢,主要瓶颈是补丁比较。 有没有更好的方法可以更快地做到这一点? 也许是更好的补丁选择和比较方法?

【问题讨论】:

请edit在帖子中包含minimal reproducible example。 补丁的方向是否相同?重叠像素是否相同? 是的,重叠像素是相同的(例如,假设边缘检测到的补丁)并且所有补丁的方向都正确,不需要倾斜。 【参考方案1】:

我会尝试:

    将所有图像的所有特征点排序一次。

    所以创建一个列表,其中存储特征或特征的散列,以及从哪个图像拍摄的信息,甚至可能是位置。然后按哈希(或即时)对这个列表进行排序。

    作为一项功能,您可以选择现在用于比较图像的内容。由于您没有缩放或旋转,因此您不需要缩放和旋转不变的功能,但是如果您使用这些功能不会受到伤害。我通常选择强度的局部最大值或最小值的像素。然后计算像素的直方图,直到与它的某个恒定距离(旋转不变)然后散列直方图...

    浏览列表

    检查一个哈希是否在列表中不止一次但来自不同的图像

    在有序列表中它们将被组合在一起

    如果是,则比较/合并特征所属的那些图像

    同时更新功能列表,只需将列表中的图像 ID 更改为新的合并图像 ID。

如果我没看错,您当前的方法是O(m*n^2),这将是O((n*m)*log(n*m)),其中n 是图像数量,m 是每张图像的平均特征数。

【讨论】:

以上是关于通过正确定位补丁将重叠图像合并为单个图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用Matlab将图像裁剪为重叠的块?

Flutter:使用Dart合并两个图像并将其存储为单个图像

合并两个或多个部分重叠的图像

如何重叠两个 SVG 图像?

从重叠的图像块重建图像

如何在存在重叠和噪声的情况下从图像中分割主要形状?