为什么物体检测需要图像分割?

Why is image segmentation needed for object detection?

像SLIC这样的图像分割算法有什么意义?无论如何,大多数对象检测算法都适用于整个(正方形)子图像集。

分割图像唯一可以想到的好处是,现在分类器具有可用的形状信息。那正确吗?

我所知道的大多数分类器都采用矩形输入图像。哪些分类器允许您将可变大小的图像片段传递给它们?

首先,SLIC,以及我猜你指的那种算法,不是分割算法,它们是过度分割 算法。这两个术语之间存在差异。 分割 方法将图像拆分为 对象 过度分割 方法将图像拆分为小 clusters(具有相似特征的空间相邻像素组),这些clusters通常称为superpixels。请参阅下面的超像素图像**:

现在,回答你原来问题的部分内容:

为什么要使用超像素?

  • 它们降低了您data/complexity问题的维度。从 N = w x h 像素到 M 超像素,M << N。也就是说,对于由 N = 320x480 = 153600 个像素组成的图像,M = 400M = 800 个超像素似乎足以 过度分割 它。现在,让后者如何对它们进行分类,只需考虑如何更容易你的问题从N=100K减少到N=800 训练样本 train/classify。超像素仍然正确地表示您的数据,因为它们遵守图像边界。

  • 它们允许您计算更复杂的特征。对于像素,您只能对它们进行一些简单的统计,或者使用 filter-bank/feature 提取器提取其附近的一些特征。然而,这非常局部地代表了您的像素的邻居,而没有考虑上下文。使用超像素,您可以从属于它的所有像素计算出一个 超像素描述符 。也就是说,特征通常像以前一样在 pixel 级别计算,但是,然后通过不同的方法将特征合并到超像素描述符中。这样做的一些方法是:超像素内所有像素的简单平均值、直方图、词袋、相关性。举个简单的例子,假设你只考虑 grayscale 作为你的 image/classifier 的特征,如果你使用简单的像素,你所拥有的是像素的强度,这是非常局部和嘈杂的。如果使用超像素,则可以计算内部所有像素强度的直方图,这比单个局部强度值更能描述区域。

  • 它们允许您计算 特征。在超像素上,您可以计算一些区域统计数据(一阶为均值或方差或二阶协方差)。您现在可以提取一些以前没有的其他信息(例如形状、长度、直径、面积...)。

如何使用它们?

  1. 计算像素特征
  2. 将像素特征合并到超像素描述符中
  3. Classify/Optimize 超像素描述符

在步骤2.中,通过平均、使用直方图或使用词袋模型,计算超像素描述符固定大小(例如100个箱子直方图)。因此,最后您将 X = N x K 训练数据(N = 100K 像素乘以 K 特征)减少到 X = M x D(具有 M = 1K 超像素和 D超像素描述符的长度)。通常 D > KM << N,因此您最终会得到一些 区域性 /更稳健的特征,这些特征可以更好地代表具有较低数据维度的数据,这很好并且降低了复杂性您的问题(分类、优化)平均减少 2-3 个数量级!

结论

您可以计算更复杂(稳健)的特征,但您必须小心使用超像素作为数据表示的方式、时间和目的。您可能会丢失一些信息(例如,您丢失了 2D 网格格),或者如果您没有足够的训练示例,您可能会使问题变得更加困难,因为特征更复杂并且可能是您将线性可分问题转换为非线性的。

** 来自 SLIC 超像素的图像:http://ivrl.epfl.ch/research/superpixels