在图像分类中使用边缘检测

机器算法验证 机器学习 神经网络 图像处理
2022-03-23 15:59:30

我的对象识别中有五种类型的对象(花、建筑物、脸、一双鞋和一辆车),我需要对它们进行分类。通过此类数据集中的边进行识别似乎是一种有效且可区分的方法。所以我使用了精明的边缘检测器(在某处阅读它作为一种好方法)来找到图像中的边缘。现在我想用这个边缘图像对我的对象进行分类。但是由于我是图像识别的新手,我真的不知道我应该如何从这个边缘图像中选择特征进行分类。

  1. 将图像中的所有像素(在精明边缘检测器之后)用作任何 ANN 分类器的特征是否是一种好方法,但我认为这会产生很多冗余特征(因为除了边缘之外,大部分图像都是黑色的)并且可能有可能减少这些。有没有什么算法可以从精明检测器后形成的图像中选择合适的特征?

  2. 第二种可能性是使用任何特征匹配算法,该算法可以计算训练和测试数据集(都有边)之间像素的距离,并以最小距离预测结果。这是我的方法,但不确定任何现有算法。所以需要一些帮助。

我也尝试考虑 CNN(因为它们本质上使用边缘方法),但这些似乎在计算上真的很昂贵。

3个回答

您的方法符合流行的梯度直方图方法。请参阅此处和相应的Wikipedia条目。现在除非你有一些已经标记的数据,否则训练这样一个系统是相当费力的。如果可能的话,我会先使用一些可用的实现来进行试验,比如scikit-image提供的实现。

还有一些其他功能,例如Linear Binary Pattern,但它们不如 HOG 强大。请参阅scikit-image对应的模块中的功能列表及其实现。

至于 CNN,您不需要提取任何特征。系统会自动学习这些特征。这是深度架构的优点之一。大量论文表明,这些系统学习了一些面向边缘的过滤器功能(与您正在考虑的想法相同)。

请注意,这些功能不考虑颜色。这可能是您考虑的一个有趣的功能。或者提取每个颜色通道的特征。

希望这可以帮助。

如果要使用边缘检测,则必须使用距离变换来进行您正在考虑的分类。完成后,您需要在测试图像(没有标签的图像)和训练图像(有标签的图像)之间创建一个距离矩阵。

但是我可以建议使用 HoG 变换,或者至少使用 Sobel 滤波器而不是边缘检测器。Sobel 滤波器至少在 Matlab 中很容易实现,而且我确信有人已经实现了 HoG 滤波器。原因很简单:边缘检测器为您提供二进制特征,我认为这使得比较更难,因为它不是尺度和位置不变的。

完成特征向量后,选择一个分类器(SVM、CART、NN 等)进行分类。

请记住,在进行计算机视觉和图像处理时,您应该确保所有图像都是在相同的条件下拍摄的。数据的初步准备(曝光、调整大小、照明、过滤等)大大减少了以后可能出现的问题。

  1. 是的,选择图像像素作为输入特征似乎是一个合理的选择。请记住,即使是相对较小的图像,特征的数量也会增长得非常快(即 256 x 256 像素的图像会产生 65 536 个特征)。因此应该应用一些降维技术(即PCA)。您可以使用提供所有必要工具的 Python scikit-learn 库。

  2. 我不确定您的方法的性能 - 如果您的数据集没有每个类别的代表性图像数量,它可能会失败。您可以考虑尝试从灰度共生矩阵(启用许多有用的指标,但您的图像应以灰度表示)或 Zernike Moments获得的其他特征来描述图像中的对象/形状(更多信息在这里)。

问候。