【问题标题】:Pattern Recognition in C++C++ 中的模式识别
【发布时间】:2012-09-17 03:31:47
【问题描述】:

我有一个简单的模板灰度图像,上面有白色背景和黑色形状,我有几个相似的测试图像,我想比较这两个图像,看看模板是否与任何测试图像匹配。您能否推荐一个用于 C++ 的简单(易于使用)模式识别库,它获取两张图像并比较它们并显示结果?

【问题讨论】:

  • 您是否在严格搜索相同的图像,或者可能被噪声、压缩伪影或其他缺陷破坏的图像的缩放/旋转/翻译版本? “匹配”到底是什么意思?
  • 比例相同,旋转和平移可以不同。没有噪音,没有缺陷。

标签: c++ image-processing pattern-recognition


【解决方案1】:

在图像上实施神经网络。输入应该是图像的灰度。你应该将你的网络训练成一个训练集,使用交叉验证集选择适当的正则化参数,最后在测试集上测试你的网络。

http://www.codeproject.com/Articles/13582/Back-propagation-Neural-Net

(我自己这样做是为了训练一个网络来识别手写数字——效果很好。)

【讨论】:

  • 虽然我是 ANN 的 H.U.G.E 支持者并尝试在任何可能的情况下使用它们,但它们对于 OP 的问题可能是矫枉过正的。如果他正在处理@twalberg 提出的许多/大部分失真,那么是的,ANN 在消除噪音方面会做得很好。然而,对于几乎没有失真的黑白图像匹配,简单的 2D 互相关可能就足够了。图像减法 la bokan 仅适用于最精确的情况。
【解决方案2】:

您需要的库有多简单取决于您的问题的具体参数。 OpenCV 是一个很棒的图像处理库,应该能够做你需要的事情。 Here 是 OpenCV 模板匹配的教程。它使在匹配指标之间切换并为您的问题选择最佳指标变得非常容易。

【讨论】:

  • 这个模板匹配解旋转和尺度不变吗?
  • 我不相信,如果您需要这些,那么one of these 教程将是一个更好的选择。您检测对象中的特征并将它们全部匹配。然后通过一组点对应关系,您可以获得旋转和缩放。
【解决方案3】:

只需对所有像素执行 image1-image2 即可。然后总结所有的差异。结果越低,图像越接近。

如果您的图案可能有多种尺寸,那么您必须调整它的大小并检查每个位置。

【讨论】:

  • 您应该指定您需要对差值求平方或取其绝对值。平方更常见。
猜你喜欢
  • 1970-01-01
  • 2011-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-10
  • 1970-01-01
  • 2011-06-18
  • 2018-12-14
相关资源
最近更新 更多