图像中的对象检测

时间:2013-12-10 19:47:27

标签: algorithm image-processing machine-learning

我想检测图像中的一些元素。 为了这个目标,我得到图像和指定的元素(如鼻子),并从Pixel(0,0)开始搜索我的元素。 但是软件性能很差,因为我逐个遍历像素。 我想我需要一些智能算法来解决这个问题。 也许机器学习算法对此很有用。 你有什么想法?

3 个答案:

答案 0 :(得分:1)

我会从 viola jones object detection framework 开始。

这是一种supervised learning技术,允许您检测具有高度可用性的任何类型的对象。
(虽然文章主要是指面部,但它是为一般物体而设计的。)。

如果您选择这种方法 - 您的主要工作将是获得分类训练集。您可以稍后使用cross-validation评估算法的效果。

AFAIK,它在 OpenCV 库中实现(我不熟悉提供帮助的库)

答案 1 :(得分:0)

您可以使用图像和搜索模式的傅立叶变换进行非常快速的互相关

一个很好的实现是例如OpenCV's matchTemplate function

如果您的图案在图像上始终具有相同的旋转和比例,则效果最佳。 如果没有,您可以使用模式的几个缩放/旋转版本重复搜索。

这种方法的一个优点是不需要训练阶段。


另一种更简单的方法,特别适用于您的模式:

使用connected component labeling将具有正确数量的白色像素的斑点识别为元素的中心矩形。这将消除除少数误报之外的所有误报。集中搜索剩余的几个点。 对于那种东西,OpenCV再次有一个很好的Blob library

答案 2 :(得分:0)

如果您在计算机生成的图像中寻找简单的几何形状(如您提供的示例),那么您无需为机器学习而烦恼。

例如,这是您尝试在原始图像中找到的组件之一:

  

(按要求删除图片)

假设此组件始终以相同尺寸绘制,则顶部和底部线总是相隔21个像素。通过将此图像与垂直移动了21个像素的副本相结合,并将两个图像中较亮的图像作为每个位置的像素值,可以显着缩小搜索空间范围。

  

(按要求删除图片)

类似地,此组件左侧和右侧的垂直线相隔47个像素,因此我们可以使用47px水平移位重复此过程。这会在组件的位置产生大约24px高的垂直条。

  

(按要求删除图片)

通过在处理过的图像的垂直列中查找长度为22到26像素的黑色像素,可以非常轻松地检测这些条形。这将为您提供候选位置的简短列表,您可以在其中更彻底地检查此组件的存在,例如通过计算局部二维互相关。

以下是处理整个图像后的结果。到达这个阶段应该只需要几毫秒。

  

(按要求删除图片)