通过 DCT 进行纹理分类

信息处理 图像处理 分类
2021-12-24 08:16:01

使用离散余弦变换的特征对图像的纹理进行分类有多可行?谷歌搜索“纹理分类 dct”只能找到一篇关于这个主题的学术论文,使用神经网络。

对于我的应用程序,我有一个大的标记图像语料库,其中整个图像是一致的纹理(例如,毯子、树皮、草地等的特写镜头)。

受对上一个问题的回答的启发,我正在考虑以下方法:

  1. 将每个图像分成 NxN 像素块
  2. 取每个块的 DCT
  3. 将每个 DCT 展平为 1xM 数组并将其馈送到 K-Means 聚类算法,并获取每个 DCT 的聚类标签
  4. 通过从 #3 计算每个图像的每个标签来计算每个图像的聚类标签的直方图
  5. 通过输入一组 [(histogram,image label)] 来训练 SVM 分类器

这会有多好?我实现了一个类似的系统,使用通过 SIFT/SURF 算法提取的特征,但我只能获得大约 60% 的准确度。

我还可以通过哪些其他方式使用 DCT 对纹理进行分类?

3个回答

到目前为止,您提出的建议听起来是一种合理的方法。但是,我认为除非您尝试过,否则您不会知道它的效果如何,就像您尝试过 SIFT 一样。

但我有个问题。你为什么要限制自己使用 DCT?有很多表示已用于纹理分类:共现矩阵、局部二进制模式等。事实上,您只找到了一篇关于使用 DCT 进行纹理分类的论文,这表明这不是最常用的特征对于这个问题。我建议您扩大文献搜索范围,看看人们使用了哪些其他功能,以及它们的效果如何。

如果您不将图像拆分为 NxN 块,而是使用滑动窗口 - 计算以图像的每个点为中心的块的 DCT,它本质上将使用小波方法。您将图像分割成块与使用滑动窗口和下采样图像相同。所以本质上你正在使用简化形式的小波纹理分割。使用 Gabor 小波代替 DCT 通常是因为:它有更多的参数(+scale 和 +direction)和平滑衰减(而不是窗口的锐利边缘)。

人们想要进行基于 DCT 的纹理分割/分类(或任何其他活动)的最大吸引力之一是大多数 JPEG 图像和 MPEG 视频已经在 DCT 中。另一方面,通常认为基于 Gabor 的方法计算成本高。

DCT 系数 MID 到高频和/或对角频率反映了像素域中局部变化的良好表示。

然而,这一切可能并不像听起来那么好。首先,在大多数标准中,DCT 块是 8x8 大小。因此,隐含的含义是,如果场景具有周期性为 8 个像素点的模式,则这种共振效果将在相邻块的相应系数的相似性方面可见,但是,当周期性变化时,这种关系会发生变化。

了解纯 DCT 块与 Gabor 之间的关键区别在于 Gabor 具有规模。因此,如果您更改纹理的“周期性”或“精细度/粗糙度”,Gabor 会发现它无法很好地适应 DCT 的固定评估 @ 8x8 块大小。

然而,人们需要实现的是通过一起查看多个块来评估这种规模现象来构建这样的模式。例如,作为一种基本方法,询问我是否会有 16x16 块或 32x32 大小的块,系数中的结果模式是什么?各个位置的系数将有一些关系可以利用,并允许人们发现纹理的真实比例。

这确实是一个很好的研究课题。

注意:即使是 MPEG7(与创建 MPEG 的委员会非常接近)——他们也提出了基于 Gabor 的纹理特征而不是基于 DCT 的特征。