如何识别图像中的不同对象?

Tru*_*Tru 13 opencv image-processing pattern-matching computer-vision

我打算编写一个程序来检测和区分某些对象与几乎可靠的背景.前景和背景具有高对比度差异,我将进一步增加以帮助对象识别过程.我打算使用Hough变换技术和OpenCV.

样本图片

如上图所示,我想分别识别圆形物体和方形物体(或有限形状的任何其他形状).由于我对图像处理很陌生,我不知道这种情况是否需要实现神经网络以及预先学习的每个形状.模板匹配等技术是否可以让我在没有神经网络的情况下实现这一目标?

kar*_*lip 10

这些帖子将帮助您入门:

您可能需要调整这些代码中的一些参数以匹配您的圆/正方形,但这些示例中显示了该技术的核心.


vsz*_*vsz 9

如果你打算检测除了圆形以外的形状(并且从我假设你做的图像中),我建议使用倒角匹配以便快速启动,特别是当你有一个很好的对比时.

简单来说,基本前提如下:

  1. 您进行边缘检测(例如,cvCanny在opencv中)
  2. 您可以创建距离图像,其中每个像素的值表示距离最近边缘的距离.
  3. 您可以获取要检测的形状,沿着形状边缘定义样本点,并尝试在距离图像上匹配这些点.基本上,您只需在距离图像上添加值,这些值位于采样点坐标"下方",给定对象的特定位置.
  4. 找到一个很好的最小化算法,这取决于你的应用程序的有效性.

这种基本方法是一种通用的解决方案,通常效果很好,但没有进一步的改进,它的速度非常慢.

通常,首先分离感兴趣的对象是个好主意,因此您不必总是对整个图像进行完整搜索.找到一个好的threshold,所以你可以分开对象.您仍然不知道它是哪个对象,但您只需在此对象附近进行匹配.

另一个好主意是,不要在高分辨率图像上进行全面搜索,而是首先以非常低的分辨率进行搜索.结果不会非常准确,但您可以了解在更高分辨率下搜索的一般区域,因此您不会浪费时间在没有任何兴趣的区域.

有许多更先进的技术,但仍然值得看一下基本的倒角匹配,因为它是大量技术的基础.