【问题标题】:Matching like images based on a template基于模板匹配类似图像
【发布时间】:2011-06-03 05:03:06
【问题描述】:

我无法想出一种方法来描述我想更好地理解的问题领域,因此我设置了以下场景来帮助说明

鉴于下面的图像,我将如何编写一些程序来找到与位置 1 中的图像匹配的所有快乐面孔(称为模板图像),而忽略位置 2 和 5 中的悲伤面孔图像。

...

我不是在寻找任何人来为我解决这个问题,我只需要一个有见地的第一步来帮助我开始,因为这对我来说是未知的领域。

这会叫什么?为了找到有用的信息,我应该查询谷歌和堆栈溢出什么?有没有人有可以帮助我入门的库或代码 sn-p?

另外,我是一名 .NET / C# 程序员,所以任何碰巧用我的母语写成的东西都会受到特别赞赏,但不会破坏交易。

提前谢谢... 迈克

【问题讨论】:

  • 查看以下链接将帮助您使用 AForge.net 识别图像Detecting some simple shapes in images
  • 所有图像的比例/尺寸是否相同?
  • @nav ... 图像都将具有相同的比例和大小。然而,图像的旋转将是可变的。理想情况下,我想编写一些代码,可以 a) 告诉它是一张快乐的脸,b) 旋转每个快乐的脸以像模板一样排列...
  • 编辑 - 感谢所有伟大的回应。我现在有了一点点推动力,我需要开始自己动手解决这个问题!

标签: c# image-processing ocr


【解决方案1】:

一个简单的穷人算法只是为了在这种情况下完成工作。

  1. 确定图像的边界框并假设它的中心是圆。
  2. 在圆圈内搜索两只眼睛作为 BLOB 的。即总共包含 20 个或像素的对象,这些对象适合一个定义的小矩形。
  3. 一旦您必须确定两只眼睛的位置,您就可以确定两条线之间相交线的斜率,从而确定脸部的方向。
  4. 从两只眼睛中间的点一直向下穿过圆心到嘴巴的距离返回 2 个可能距离中的 1 个。即悲伤或快乐。

快速、肮脏和硬编码到这个特定的图像,但它会很快完成这项工作。

AForge 选项可能是一种更好的通用方法。

【讨论】:

    【解决方案2】:

    一个可能的算法是:

    1. 计算图像的梯度
    2. 对于每个梯度向量,计算梯度方向
    3. 计算梯度向量的方向直方图(角度与频率)

    这个方向直方图对于“快乐”和“悲伤”的笑脸是不同的。

    玩得开心。

    【讨论】:

      【解决方案3】:

      该技术实际上取决于实际情况。这有几个名称,例如基于内容的检索、模板匹配、图像描述等。

      我的建议:

      如果您的场景类似于以已知角度旋转已知大小的面孔,请寻找更简单的技术,例如两张图像的相关性。对每个角度都这样做,你就明白了。

      如果你知道图像之间唯一的变化是旋转,这意味着你只有快乐和悲伤的脸旋转,没有其他扭曲,你可以寻找旋转不变的匹配方法。傅立叶理论可以帮助您,还可以映射到与相关性相关的极坐标。

      最坏的情况是,您有多种变体,您需要研究图像描述符和模式匹配技术。这些也取决于图像类型,其中有几个。如果你最终得到这些,你将有一个带有一些库/代码的方案来从图像中提取特征和一个分类器来告诉你哪些是相同的,哪些不是,有某种信心(例如距离测量特征向量之间)。

      【讨论】:

        【解决方案4】:

        最简单的技术可能是template matching。不过,您的示例图像中的差异非常小,因此在您的示例中可能很难区分例如图像 1 和 5。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-04-05
          • 1970-01-01
          • 1970-01-01
          • 2017-06-07
          • 2016-04-13
          • 2019-05-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多