如何识别较大图像中的重复子图像?

信息处理 图像处理 fft 算法
2022-02-03 21:17:29

我有一张集成电路微观芯片的大图像。像素尺寸类似于 15000 x 10000。

示例图片: Commodore Amiga Paula 图片 http://tinytransistors.net/images/chips/Amiga_A500/Paula_total.jpg

该图像包含许多重复的结构化子图像。一些大块甚至可能重复 3 或 4 次,因为需要重复的功能。(请参阅示例图像左侧的优秀候选人)

我想确定最大(以像素为单位)重复子图像块,然后突出显示这些子图像的位置。我会重复这个过程,寻找下一个最大的重复子图像块,突出显示那些,等等。

需要明确的是,我没有提前获得子图像。问题不仅在于找到图像中某些子图像的位置。那是第二步。:)

虽然图像实际上是彩色图​​像,但它可以很容易地转换为灰度图像而不会丢失内容。

像这样的图像显然存在一些“噪音”,并且必须有一些可调整的“软糖因素”来考虑匹配的内容。

我不完全确定从哪里开始,或者这是否是正确的 SE。FFT 会是一个潜在的解决方案吗?使用 MatLab?特定的一次性图像分析工具?

我可以编写一些简单的图像分析软件,将图像分解成更小的块,然后在图像中搜索这些块。但这对我来说听起来非常慢,必须有一种更有效的方法来做到这一点。

1个回答

一种天真的方法是设置最大尺寸、0.25 图像宽度,并以“滑动窗口”方式将每个可能的正方形与其他所有可能的正方形进行比较。

所以以 5000 x 5000 的正方形作为参考(例如 0,0 到 4999,4999)。现在抓住所有其他可能的“窗口”。首先将您的参考正方形与 (5000,0 到 9999,4999) 的正方形进行比较,然后将您的参考正方形与 (5001,0 到 10000,4999) 的正方形进行比较,然后再与 (5002,0 到 10001,4999) 等进行比较.

因此,您的比较函数可以减去参考帧和目标帧的每个像素之间的(灰度)差异并给出分数。

接下来(在将您的参考与所有其他可能的正方形进行比较之后),您选择一个新的参考,即 (1,0 到 5000,4999) 处的正方形,并将该参考正方形与所有其他可能的正方形进行比较。

一旦整个过程以 5000,5000 大小完成,您就会知道大小为 5000x5000 的任何结构是否与图像的任何其他部分匹配(达到阈值)。

然后,您将参考正方形变小,例如 4999x4999 并以 4999x4999 的大小重复整个过程,以查看是否有任何大小为 4999x4999 的结构“重复”

您将继续进行,直到您的最小尺寸。

然后......你会想尝试而不是正方形......不同比例的矩形。

如您所见,这在计算上是令人望而却步的,因此您必须做出妥协:

  • 使源图像更小只有当你有一个近乎匹配时,检查那个位置的高分辨率地图
  • 以 10 像素为增量滑动
  • 自己确定一些基本的参考结构,并仅将其用作参考
  • 尝试“蒙特卡罗”方法,尝试随机位置并获取有希望的位置的统计信息,以进行逐像素检查
  • 在 gpu 上实现
  • 将结构限制为仅几个矩形形状,而不是全部
  • 预处理图像以获得更高的对比度
  • 从使用小尺寸(20x20 像素)开始,一旦你找到小匹配,在那里扩大你的“正方形”以寻找可能是“真实”重复结构的更大匹配

所以没有魔法。有什么是域启发式。你告诉你的脚本你认为结构的可能大小/形状/位置/方向。

但是,“为什么”需要识别重复结构的问题实际上是如何优化问题的基础。

编辑:一种完全不同的方法是使用一些为“对象分割”预先调整的算法来通过并找到任何似乎具有定义边界的东西,然后对所有“对象”运行聚类算法,它应该将最相似的组合在一起。然后您可以手动选择匹配项或执行最终阈值步骤。这可能更类似于“人类”大脑的操作方式,因为它可能更快