对于我的应用程序,我有大量带标签的图像,其中整个图像是一致的纹理(例如毯子,树皮,草地等的特写镜头)。
受先前问题的回答启发,我正在考虑以下方法:
将每个图像分割成NxN个像素块
将每个块的DCT展开
将每个DCT展平为1xM数组,并将其馈送给K-Means聚类算法,然后得到每个DCT的聚类标签
通过计算#3中每个图像的每个标签来计算每个图像的聚类标签的直方图。
通过为其提供一组[(直方图,图像标签)]来训练SVM分类器。
效果如何?我使用通过SIFT / SURF算法提取的特征实现了一个类似的系统,但我只能获得约60%的准确度。
我还可以通过哪些其他方式使用DCT对纹理进行分类?
#1 楼
到目前为止,您提出的建议听起来很合理。但是,我不认为只有像尝试过SIFT一样,您才能知道它的效果,就像您尝试过SIFT一样。但是我有一个问题。为什么要限制自己使用DCT?有许多用于纹理分类的表示形式:共现矩阵,局部二进制模式等。您仅发现一篇关于使用DCT进行纹理分类的论文这一事实表明,这不是最常用的功能对于这个问题。我建议您扩大文献搜索范围,以了解人们使用了哪些其他功能,以及他们的工作情况如何。
#2 楼
如果您不打算将图像分割为NxN块,而是使用滑动窗口-计算以图像每个点为中心的块的DCT,则实质上是使用小波方法。将图像分割成块与使用滑动窗口相同和下采样图像。因此,实质上,您是在使用简化形式的小波纹理分割。使用Gabor小波代替DCT通常是因为:它具有更多的参数(+比例和+方向)和平滑的衰减(而不是窗口的尖锐边缘)。
#3 楼
为什么要进行基于DCT的纹理分割/分类(或任何其他活动)的最大吸引力之一就是事实,即大多数JPEG图像和MPEG视频已经在DCT中。另一方面,通常认为基于Gabor的方法在计算上是昂贵的。DCT将MID转换为高频和/或对角线频率的系数反映了像素域中局部变化的良好表示。
但是,所有这些可能并不像听起来那样好。首先,在大多数标准DCT块中,尺寸均为8x8。因此,这暗示着,如果场景具有周期性为8个像素点的图案,则根据相邻块的相应系数的相似性,可以看到这种共振效果,但是,当周期性改变时,这种关系就会改变。
了解DCT与Gabor的纯块之间的关键区别在于Gabor具有刻度。因此,如果您更改纹理的“周期性”或“细度/粗糙度”,Gabor会发现它在DCT的固定评估@ 8x8块大小无法很好适应的位置。
需要实现的是通过一起查看多个块以评估这种规模现象来构建这种模式。例如,作为一种基本方法,请问如果我有16x16的块或32x32的大小的块,系数的结果模式将是什么?各个位置的系数将具有一定的关联关系,可以使人们发现纹理的真实比例。
这确实是一个很好的研究课题。
注意:即使是MPEG7(与创建MPEG的委员会非常接近的人)-他们提出基于Gabor的纹理功能,而不是基于DCT的功能。
评论
这几乎听起来像是我为ml-class.org做的神经网络分配@IvoFlipse:为ml-class.org +1。但是,这个问题与功能有关。最后,如果您的功能不适合该问题,则分类算法的好坏都没有关系。
Gabor滤波器组对于纹理分类可能非常有用。