Python 通过正确定位面片,将重叠图像合并为单个图像

Python 通过正确定位面片,将重叠图像合并为单个图像,python,algorithm,opencv,image-processing,processing-efficiency,Python,Algorithm,Opencv,Image Processing,Processing Efficiency,给定从图像中获取的许多面片,任务是创建由面片组成的单个图像 我尝试过天真的解决方案: 对于每2张图像,检查多个补丁并进行比较 如果它们在某个置信阈值以上相似,则创建2的新图像 将新映像添加到池中,并删除其他2个映像 重复此操作,直到池大小为1 问题是这个解决方案非常慢,主要的瓶颈是补丁比较。 有没有更快的更好的方法? 也许是更好的补丁选择和比较方法?我会尝试: 对所有图像中的所有特征点进行一次排序。 所以,创建一个列表,其中存储了特征的散列或特征本身,以及从哪个图像中获取的信息,甚至可能是位置信

给定从图像中获取的许多面片,任务是创建由面片组成的单个图像

我尝试过天真的解决方案:

  • 对于每2张图像,检查多个补丁并进行比较
  • 如果它们在某个置信阈值以上相似,则创建2的新图像
  • 将新映像添加到池中,并删除其他2个映像
  • 重复此操作,直到池大小为1
  • 问题是这个解决方案非常慢,主要的瓶颈是补丁比较。 有没有更快的更好的方法? 也许是更好的补丁选择和比较方法?

    我会尝试:

  • 对所有图像中的所有特征点进行一次排序。

    所以,创建一个列表,其中存储了特征的散列或特征本身,以及从哪个图像中获取的信息,甚至可能是位置信息。然后按散列(或动态)对列表进行排序

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

  • 浏览列表

  • 检查一个哈希是否多次出现在列表中,但来自不同的图像

    在有序列表中,它们将分组在一起

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

    还要更新功能列表,以便将列表中的图像id更改为新的合并图像id


  • 如果我看得对的话,你当前的方法是
    O(m*n^2)
    ,这将是
    O((n*m)*log(n*m))
    其中
    n
    是图像数量,
    m
    是每个图像的平均特征数量。

    请在帖子中加入补丁。补丁的方向是否都是相同的?重叠像素是相同的吗?是的,重叠像素是相同的(例如,假设检测到边缘的面片),并且所有面片的方向正确,无需倾斜。