c++ - 在图像中查找相似(大)图案

标签 c++ opencv image-processing

我的图片中有重复的图案。我想根据相似的模式找到相似的图像。

图案由十字形、三角形、正方形组成,它们组合在一起形成由这些“原始形状”构成的更复杂的结构。例如,想象一个由三角形或六边形等组成的十字架。

这些装饰存在于墙纸、地毯、基里姆布、羊毛衫甚至一些画作中。

来自维基百科的示例图像是 here

我的典型应用是查找具有相似图案的毛衣。暂时忽略颜色。

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

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

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

最佳答案

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

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

您可以通过 template matching in the Fourier domain 稍微优化上面的内容因为您只需要对图像进行一次 2D FFT。您还可以预先计算和存储扰动 - 或者更好:存储它们的傅里叶变换。

关于c++ - 在图像中查找相似(大)图案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964523/

相关文章:

c++ - 如何将int数组转换为每个数组编号的二进制值的二维数组?

c++ - 线程构建 block 生成嵌套任务

c++ - 这段代码有效,还是编译器?

opencv - 使用 OpenCV 查找重叠/复杂的圆

opencv - opencv中的内存泄漏问题

c++ - 解密未找到函数重载错误消息

非图像基本结构中的 OpenCV float 与 double

c++ - 使用 C++、Qt 进行亮度、对比度、 Gamma 调整

opencv - 将 Mat 传递给 OpenCL 内核会导致段错误

c++ - 将 float 组图像转换为可用于 opencv 的格式