2013-12-10 18 views
0

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

+0

你可以上传一些图片或者说对对象的你试图检测和图像的变化几句话? – GilLevi

回答

1

我会从viola jones object detection framework开始。

这是一个supervised learning技术,它允许您检测任何类型的高provavility对象。
(即使文章主要是指脸部,但它是为一般物体设计的。)。

如果您选择了这种方法 - 您的主要任务就是获取分类培训集。稍后您可以评估算法的使用情况cross-validation

AFAIK,它OpenCV库实现的(我不熟悉的图书馆提供帮助)

+0

非常感谢您的回复,您认为这个算法对我来说确实有用吗? –

+0

@SamanGholami您必须评估此解决方案的准确性(使用交叉验证或专用测试集),但如果您设法获得足够的训练集,我相信它会足够好(精度高于90%)。 – amit

0

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

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

这将工作最好的,如果你的模式总是具有相同的旋转和缩放翻过你的形象。 如果没有,您可以重复使用您的模式的几个缩放/旋转版本进行搜索。

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


另外,更简单的方法,将特别的工作模式是这样的:

使用connected component labeling识别斑点与白色像素的权数是你的元素的中心矩形。这将消除所有的几个误报。把你的搜索集中在剩下的几个点上。 再次OpenCV有一个不错的Blob library这种东西。

0

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

例如,这里有你想要的原始图像中找到的组件之一:

(图片来源:要求移除)

假设这部分总是在相同的画尺寸,顶部和底部线总是会相隔21个像素。通过将该图像与其自身的副本垂直移动21个像素并将两个图像中较亮的图像作为每个位置的像素值,可以大大缩小搜索空间。

(图像由请求移除)

类似地,垂直线的在该组件的左侧和右侧是47个像素分开的,所以我们可以重复此过程来用一个47px水平移位。这导致组件位置处的高度约为24px的竖条。

(图像由请求移除)

可以通过寻找在长处理后的图像的垂直列22个26的像素之间的黑像素的运行很容易地检测这些棒。这将为您提供候选人职位的简短列表,您可以更彻底地检查是否存在此组件。通过计算局部2D互相关。

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

(图片来源:要求移除)