物体检测+分割

15
我正在尝试找到一种可接受复杂度的高效方法,以便于:
  • 检测图像中的对象,以便于将其与周围环境隔离开来
  • 将该对象分割为其子部分并对其进行标记,以便于可以随意获取它们
自从进入图像处理领域以来已经过去了3个星期,我已经阅读了许多算法(如sift、snakes、更多的snakes、傅里叶相关等)和启发式方法,但我不知道从哪里开始以及哪种方法最适合我要实现的目标。考虑到所涉及的图像数据集非常大,我甚至不知道是否应该使用OpenCV中实现的某些算法,还是应该自己实现算法。
总结如下:
  • 我应该关注哪种方法?为什么?
  • 我应该使用OpenCV处理这种东西,还是有其他“更好”的选择?
谢谢您提前的帮助。
编辑--有关数据集的更多信息
每个数据集包含80K张共享相同概念(例如T恤、手表、鞋子)、大小、方向(其中90%)和背景(其中95%)的产品图片。
除产品本身外,每个数据集中的所有图片看起来几乎相同。为了使事情更清晰一些,让我们只考虑“手表数据集”:该数据集中的所有图片看起来几乎完全相同。

enter image description here

我想提取手表的表带和表盘(除了手表本身)。问题在于有许多不同的手表款式和形状。从迄今为止所读的内容来看,我认为我需要一个模板算法,允许弯曲和拉伸,以便能够匹配不同样式的表带和表盘。

与其创建三个不同的模板(表带上部、表带下部、表盘),创建一个模板并将其分割成3个部分是合理的。这样,我就足够自信,每个部分都按照预期检测到了,例如,表盘不会被检测到在表带下部。

在我遇到的所有算法/方法中,主动形状|外观模型似乎是最有前途的。不幸的是,我还没有找到一个像样的实现,并且我不太自信这是最好的方法,因此不能自己编写。

如果有人能指出我应该真正寻找什么(算法/启发式/库等),我将不胜感激。如果您认为我的描述有点模糊,请随时要求更详细的说明。


您介意描述一下您的图像领域,甚至提供一些图像样本吗?对于一般的物体检测/识别/分割,我相信或者普遍认为,良好的领域边界将为您区分应该进行分割和不应该进行分割的内容提供优势。 - Gary Tsui
@gary - 我想要实现的其中一件事情是:拥有一个手表图片例如链接,我想能够独立处理表带的“上半部分”和“下半部分”以及表盘。这就是为什么我需要一些支持分割的模板。 - sawidis
你能否从你的数据集中发布几张图片,以展示它们的多样性。例如,如果你的所有图片都像你链接的维基图片一样,正面朝上,直接对着相机,没有比例、光照差异或手表品牌或类型的差异,那么你可以大大简化你的算法。 - Maurits
2个回答

8
根据您所说,以下是一些首次浏览时出现的简单事情:
  • 最简单的方法是使用OpenCV或CvBlob库对图像进行二值化和连接组件。对于具有非复杂背景的简单图像,这通常会产生对象。
  • 然而,从您的示例图像来看,基于纹理的分割技术可能效果更好 - 手表表盘、表带和背景在纹理/粗糙度上差异很大,这可能是将它们分开的理想方式。
  • 可以通过Eigen变换(在SO中有一些解释,检查提供的研究论文链接)轻松找到部分的粗糙度,然后可以在Eigen变换的输出上应用均值漂移滤波器。这将按纹理明确分离区域。OpenCV中实现了金字塔式均值漂移和通过SVD查找特征值,因此除非您可以优化自己的代码,否则就最好(并且更容易)使用内置函数(如果存在)就速度和效率而言。


3
我认为我会把这个问题反过来。而不是寻找表盘上的刻度,我会使用手表的一系列强大功能将目标图像“缝合”到模板上。第一只手表在表盘上有一组白色的正方形,第二只手表有许多白色圆圈。我会按照手表类型进行以下操作:
  • 将表盘中的正方形或圆圈分割出来。分割步骤可能会很棘手,因为它们通常既与比例有关,又与光线有关。
  • 估计上述发现的特征区域的中心或角落。这些是新的特征点。
  • 使用匈牙利算法将模板手表和目标手表之间的特征进行匹配。或者,可以使用交叉相关来匹配原始图像中每个特征点周围的区域。
  • 使用模板和目标之间匹配的特征来估计缩放、旋转和平移。
  • 缝合图像。
  • 由于图像现在处于已知形式,因此可以通过预设坐标轻松提取区域。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接