物体检测+分割
Posted
技术标签:
【中文标题】物体检测+分割【英文标题】:Object detection + segmentation 【发布时间】:2011-11-05 11:40:01 【问题描述】:我正在尝试找到一种可以接受复杂性的有效方法
检测图像中的对象,以便将其与周围环境隔离 将该对象分段为其子部分并标记它们,以便我可以随意获取它们我进入图像处理领域已经 3 周了,我已经阅读了很多算法(筛选、蛇、更多蛇、傅里叶相关等)和启发式算法,我不知道从哪里开始哪一个对于我想要实现的目标是“最好的”。考虑到感兴趣的图像数据集是一个非常大的数据集,我什至不知道我应该使用 OpenCV 中实现的算法还是我自己实现一个算法。
总结:
我应该关注哪种方法?为什么? 我应该使用 OpenCV 来处理这类事情还是有其他“更好”的替代方案?提前谢谢你。
编辑 -- 有关数据集的更多信息
每个数据集由 80K 的产品图片组成,这些图片共享相同的产品
概念,例如T 恤、手表、鞋子 尺寸 方向(90%) 背景(其中 95%)显然,除了产品本身之外,每个数据集中的所有图片看起来几乎相同。为了让事情更清楚一点,让我们只考虑“观察数据集”:
集合中的所有图片看起来几乎完全一样:
(同样,除了手表本身)。我想取出表带和表盘。问题是有很多不同的手表款式和形状。从我目前所读到的,我认为我需要一个允许弯曲和拉伸的模板算法,以便能够匹配不同风格的表带和表盘。
与其创建三个不同的模板(表带上部、表带下部、表盘),不如只创建一个并将其分成 3 个部分是合理的。这样,我就会有足够的信心,每个部分都可以按照预期的方式相互检测到,例如在表带下部下方无法检测到表盘。
在我遇到的所有算法/方法中,主动形状|外观模型似乎是最有前途的。不幸的是,我还没有设法找到一个下降的实现,我也没有足够的信心这是最好的方法,所以我自己写一个。
如果有人能指出我应该真正寻找什么(算法/启发式/库/等),我将不胜感激。如果您再次认为我的描述有点模糊,请随时要求更详细的描述。
【问题讨论】:
您介意描述您的图像的域,甚至是图像的一些样本。对于一般的对象检测/识别/分割,我相信或者通常认为域的良好边界会给你一个“边缘”来区分什么是分割的,什么不是。 @gary - 我想要实现的(许多)事情之一:拥有手表的图像,例如link,我希望能够独立处理表带和表盘的“上”和“下”部分。这就是为什么我需要某种支持分段的模板。 您能否从您的数据集中发布几张图片,以展示它们的多样性。例如,如果您的所有图像都是您链接的 wiki 图像,正面朝上,直接进入相机,并且没有比例、照明差异或手表品牌或类型的差异,您可以极大地简化您的算法。 【参考方案1】:从你所说的,乍一看,这里有一些东西:
使用 OpenCV 或 CvBlob 库对图像进行二值化并执行 Connected Components 是最简单的事情。对于具有非复杂背景的简单图像,这通常会产生对象
然而,查看您的示例图像,基于纹理的分割技术可能效果更好 - 表盘、表带和背景在纹理/粗糙度方面是明智的变化,这可能是一个理想的选择分开它们的方法。
通过特征变换可以很容易地找到一部分的粗糙度(在SO 上进行了一些解释,请查看那里提供的研究论文的链接),然后可以将均值偏移滤波器应用于特征的输出转变。这将使区域根据纹理清晰地分开。金字塔均值偏移和通过 SVD 查找特征值都在 OpenCV 中实现,因此,除非您可以优化自己的代码,否则就速度和效率而言,使用内置函数(如果存在)会更好(也更容易)。
【讨论】:
谢谢!非常感谢您的帮助 =)【参考方案2】:我想我会扭转这个问题。我不会寻找表盘,而是使用手表中的一组强大功能将目标图像“缝合”到模板上。第一款手表的表盘上有一组白色方块,第二款手表有许多白色圆圈。我会根据手表的类型:
分割出表盘中的正方形或圆形。分割步骤可能很棘手,因为它们通常都依赖于规模和光照 估计以上找到的特征区域的中心或角落。这些是新的特征点。 使用匈牙利算法来匹配模板手表和目标手表之间的特征。或者,可以获取原始图像中每个特征点的周围环境,并使用互相关进行匹配 使用模板和目标之间的匹配特征来估计缩放、旋转和平移 拼接图片 由于图像现在是已知形式,因此可以简单地通过预设坐标提取区域【讨论】:
以上是关于物体检测+分割的主要内容,如果未能解决你的问题,请参考以下文章