2011-08-28 188 views
15

我是试图找到的可接受的复杂性物体检测+分割

  • 一种有效的方式在图像中检测对象,所以我可以从其周围隔离它
  • 区段反对其子部件和对其进行标记以便我能那么随意

这是3周以来我进入了图像处理的世界获取他们,我看过这么多的算法(过筛,蛇,更多的蛇,傅里叶相关,等等)以及启发式,我不知道从哪里开始,哪一个是“最好的” “为了我想要实现的目标。考虑到感兴趣的图像数据集是一个相当大的图像数据集,我甚至不知道我是否应该使用OpenCV中实现的一些算法,或者如果我应该实现一个我自己的算法。

综述:

  • 我应该关注哪些方法呢?为什么?
  • 我应该使用OpenCV来处理那种东西,还是有其他更好的选择?

在此先感谢您。

编辑 - 关于数据集

每个数据集包括产品80K例如图像共享相同

  • 概念的更多信息T恤衫,手表,鞋
  • 大小
  • 取向(其中90%)
  • 背景(其中95%)

在每个数据集的所有图片的外观几乎相同除了产品本身,显然。为了让事情更加清楚一点,我们只考虑“手表集”:

组中的所有图片看起来几乎完全一样:

enter image description here

(再次,除了形成手表本身)。我想提取表带和表盘。事情是,有很多不同的手表风格,因此形状。从我目前阅读的内容来看,我认为我需要一种模板算法,允许弯曲和拉伸,以便能够匹配不同风格的肩带和表盘。

而不是创建三个不同的模板(带子的上半部分,带子的下半部分,表盘),只创建一个模板并将其分成3个部分是合理的。这样,我就足够确信,每个部分都是相对于彼此被检测到的,如预期的那样。在表带下部以下不会检测到表盘。

从我遇到的所有算法/方法论看,主动形状模型似乎是最有前途的模型。不幸的是,我还没有设法找到一个下降实现,我不够自信,这是最好的方法,以便自己写一个。

如果有人可以指出我应该真正寻找什么(算法/启发式/库/等),我会感激不尽。如果您再次认为我的描述有些模糊,请随时索要更详细的描述。

+0

您是否介意描述图像的域,甚至是图像的某些样本。对于一般的对象检测/识别/分割,我相信或者一般认为,域的良好边界会给你一个'边缘'来区分什么是分割的,哪些不是。 –

+0

@gary - 我想要实现的(很多)事情之一:拥有手表的图像,例如[链接](http://upload.wikimedia.org/wikipedia/commons/0/06/Seiko_7002-7020_Diver%27s_200_m_on_a_4-ring_NATO_style_strap.JPG),我希望能够独立处理'上'和'下'部分的表带和表盘。这就是为什么我需要某种支持分割的模板。 – sawidis

+0

你可以发布你的数据集中的几幅图像,以显示它们的多样性。例如,如果您的所有图像都是作为链接,面朝上,直接进入相机的维基图像,并且没有比例尺,照明差异或手表品牌或类型差异,则可以极大地简化您的算法。 – Maurits

回答

8

从你已经说过了,这里是第一眼弹出一个几件事情:

  • 最简单的事情做二值化图像,然后使用OpenCV的或CvBlob库连接的组件。对于非复杂背景的简单图像,这通常是yeilds对象
  • HOwever,看你的样品图像,基于纹理的分割技术可能会更好地工作 - 表盘,背带和背景明智变异的纹理/粗糙度,这可能是分离它们的理想方法。

    通过特征变换可以很容易地找到一部分的粗糙度(在SO上解释一下,检查提供在那里的研究论文的链接),然后可以将Mean Shift滤波器应用于特征变换的输出。这将使区域根据纹理明显分离。金字塔形Mean Shift和SVD的特征值都是在OpenCV中实现的,因此除非您可以优化您自己的代码,否则就速度和效率而言,使用内置函数(如果存在的话)会更好(也更容易)。

+0

谢谢!我真的很感激你的帮助=) – sawidis

3

我想我会解决这个问题。我不使用拨号盘,而是使用手表中一组强大的功能将目标图像“拼接”到模板上。第一只手表在表盘上有一组白色的正方形,第二只手表上有许多白色圆圈。我会每种类型的手表:

  • 分段拨出正方形或圆圈。分割步骤可能会很棘手,因为它们通常都是比例和光线依赖
  • 估计上述找到的特征区域的中心或角点。这些是新的特征点。
  • 使用匈牙利语算法来匹配模板手表和目标手表之间的功能。或者,可以采取各特征点的周围的原始图像中的搭配这些使用互相关的模板和靶之间
  • 使用匹配特征以估计缩放,旋转和平移
  • 拼接图像
  • 作为图像现在是已知的形式,人们可以通过预先设置的坐标简单地提取区域