我在stackoverflow上问了这个问题,但被建议来这里。
我有一些图像要分类。我看到卷积神经网络可能最适合这个,例如这里。但是,对于我的图像,它们的旋转版本(在任何程度上)实际上是相同的图像。我应该怎么做才能使这方面也被考虑在内。
我认为的一种方法是为每个训练图像创建多个旋转版本(例如,每 30 度旋转),并将它们添加到具有相同标签的训练集。还有其他方法吗?另外,如果我将每个图像都放在圆形区域中会有帮助吗?
下面显示了两个示例图像:
我在stackoverflow上问了这个问题,但被建议来这里。
我有一些图像要分类。我看到卷积神经网络可能最适合这个,例如这里。但是,对于我的图像,它们的旋转版本(在任何程度上)实际上是相同的图像。我应该怎么做才能使这方面也被考虑在内。
我认为的一种方法是为每个训练图像创建多个旋转版本(例如,每 30 度旋转),并将它们添加到具有相同标签的训练集。还有其他方法吗?另外,如果我将每个图像都放在圆形区域中会有帮助吗?
下面显示了两个示例图像:
只需先对图像进行编码,然后对编码数据进行分类(小波变换)。相似图像区域的部分将产生非常相似的编码矩阵。通过将小于或等于某个小常数的绝对值归零来进一步去噪编码矩阵应该可以减少过度拟合并提高准确性。
这是一个简单的 Haar-Wavelet 变换编码器的示例:
首先,我们获取 RGB 图像的 R 值并将其划分为 8x8 矩阵,例如:
现在我们从第一行开始:
将两个相邻的值分组,我们得到 4 个组:
{97,95},{99,94},{97,88},{90,95}
下一步是计算每组的平均值:
(96, 96.5, 92.5, 92.5)
以及各组第二个值与平均值之差:
95-96 = -1、94-96.5 = -2.5、88-92.5 = -4.5 和 95-92.5 = 2.5
将它们放在一起:(-1,-2.5,-4.5,2.5)
将它们附加到我们得到的平均值列表中:
(96, 96.5, 92.5, 92.5, -1, -2.5, -4.5, 2.5)
现在我们重复这个过程,但只使用前 4 个值:
分组:{96, 96.5}, {92.5, 92.5}
平均值和差异:(96.25, 92.5, 0.25, 0)
最后一次相同的过程,但现在只使用前 2 个值:
分组:{96.25, 92.5}
平均和差异:(94.375,-1.875)
综上所述,我们获得了第一行的新值,我们可以看到,其中一个值已经被清零:
(94.375, -1.875, 0.25, 0, -1, -2.5, -4.5, 2.5)
接下来的步骤将只是将上述过程应用于其他 7 行,然后对生成的 8x8 矩阵的每一列执行相同的操作。然后对我们的 RGB 图像的 R 矩阵的每隔 8x8 部分做同样的事情,然后对 G 矩阵和 B 矩阵做同样的事情。由于所有的归零值,生成的 RGB 矩阵将非常稀疏。我们去掉了所有低熵像素,剩下的是图像中物体的核心特征。使用一些简单的相似性度量将产生一个高精度的分类器。
使用简单的递归函数或使用线性代数和矩阵乘法可以很容易地实现整个过程。这是一种无损压缩,这意味着生成的矩阵仍然具有解码和获取原始图像所需的所有信息。然而,可以应用一些去噪例程来获得更多的零,但是这样做会丢失信息。