在图像中找到相似的(大)图案

时间:2018-08-22 10:08:42

标签: c++ opencv image-processing

我有重复图案的图像。我想基于相似的图案找到相似的图像。

图案由十字,三角形,正方形组成,这些形状组合起来形成了由那些“原始形状”制成的更复杂的结构。例如,想象一下由三角形或六边形等制成的十字架。

这些装饰物出现在墙纸,地毯,kilims,羊毛毛衣甚至一些画作中。

来自维基百科的示例图片为here

我的典型应用是找到例如图案相似的毛衣。暂时忽略颜色。

我尝试提取SIFT描述符(使用C ++和OpenCV)并在两个图像之间进行匹配。但是,它们匹配的区域很小,例如六边形和三角形的顶点,但理想情况下,我想匹配三角形和矩形的实际形状。

如果按比例缩小图像效果会更好一些,但我仍然觉得我需要一种不同于SIFT和朋友的方法。

有人可以针对此类问题建议其他方法吗?

1 个答案:

答案 0 :(得分:1)

如果您知道要寻找先验的模式,则可以进行老式模板匹配。它可能不像深度学习技术那样流行,但是对于受约束的问题可能是有效的。

  1. 加载您的N个模板
  2. 加载要测试的图像。
  3. 对图像和模板进行规范化(可能包括 转换为灰度以及一些直方图和白平衡 平衡)
  4. 为每个模板创建M个扰动(即, 不同的比例,旋转和透视变换)
  5. 在NxM模板和图像之间执行模板。

您可以通过执行template matching in the Fourier domain来略微优化上述内容,因为您只需对图像进行2D FFT。您还可以预先计算并存储这些插管-更好的是:存储其傅立叶变换。