通过 PCA 对 2D 图像进行降维

Dimension reduction of a 2D-Image via PCA

我想缩小 2D 图像的尺寸。我有大小为 100x50 的图像块,我想减少这些块的尺寸。

是否需要先将patch(100x50)转为vector(5000x1)然后应用PCA降维还是直接应用PCA对patch进行降维(100x50) 并缩小维度,让我们说 2x50

PCA 将向量 space 中的一个点作为输入并将其投影到子 space 上。以这种方式表达,那么很容易记住您需要将补丁调整为矢量。

使用 Matlab,调用您的补丁 X,您可以通过调用 X(:) 轻松完成此操作,而不必弄乱 reshape

降维是 R^n -> R^m,其中 n>m 所以根据你的文字,我的印象是你的意思是:

  1. 分辨率调整

    • 更改目标分辨率
  2. 数据缩减

    • 消除无关紧要的数据

要调整图像大小或减少数据,有很多方法可以做到,例如:

  1. linear/bilinear/cubic/...过滤

    • 适用于视觉数据大小调整(不适用于数据缩减)
  2. 基于频域DFFT/DCT/DST的数据缩减

    • 可用于更改分辨率而不会丢失大量数据
    • 通过转换为频域
    • (可选)去除噪音或无关紧要的数据(如 JPEG 压缩)
    • 以所需的分辨率转换回空间域
    • 当你停留在频域时,也可以用于数据缩减
    • 并仅使用有效频率(高振幅..)
  3. PCA

    • 不能用于预定的目标分辨率,因为
    • 它提取重要数据,其大小取决于内容

所以答案实际上取决于您究竟需要实现什么以及出于什么目的

您可以直接应用2D-PCA。至少它存在并且应该比 1D-PCA 表现更好(减少方面)。

2004 年的一篇被高度引用的研究论文: Yang, J. 等人,2004 年。二维 PCA:一种基于外观的人脸表示和识别的新方法。 IEEE 模式分析和机器智能汇刊,26(1),第 131–137 页。 Source

遗憾的是我不知道 Matlab 实现。