python - 以有效的方式过滤2 numpy.ndarray中的相似图像

标签 python image numpy machine-learning

目前,我正在使用一些 ML 算法,并且我有 2 组图像(训练集和验证集),它们存储在 np.ndarray 中。图像为灰度图像,尺寸为 28x28。我有大约 200000 个训练图像和 20000 个验证图像。我知道我的数据集并不理想,并且: - 在每个数据集中我可以有相同或几乎相同的图像 - 验证和训练集之间可能存在重叠

直觉告诉我,训练集中和验证集中的相同或相似图像可能会损害我的机器学习算法的性能,因此我决定尝试清理我的数据集。

我可以通过组合这两个集合轻松地清理数据集,并使用散列删除相同的图像,例如 md5 散列,通过增量构建 md5 散列字典并仅将那些 md5 散列不存在于散列字典中的图像复制到新的 ndarray还没有。

但是!我不知道如何删除其中一个图像,以防万一有另一个图像与其他图像几乎相同。例如,当 28x28 像素中只有几个具有不同的值时。有什么想法如何提出图像之间距离的有效度量吗?在有效下,我还意味着它最好应该相对较快地工作,因为我不确定逐像素比较是否是一个好主意。此外,如果有人提供任何关于通过删除相似图像来清理数据集是否有任何真正好处的见解,这也会很有用?

最佳答案

您可以通过执行以下操作找到两个图像之间的 RGB 空间距离之和

(((a - b)**2).sum(axis=2)**0.5).sum()

但是,您必须非常小心,因为实际上非常相似的两个图像之间会有很大差异(即,其中

b = numpy.roll(a, 1, axis=0)

神经网络可能是确定图像之间相似性的有效方法!但是您是否使用原始图像来训练您的系统?通常最好按照@sascha的建议进行一些感知风格的预处理(当我最近看到这个时,我最终做了亮度->边缘->H.O.G.,发现使用纯numpy比 scikit-image https://github.com/paddywwoof/Machine-Learning/blob/master/image_processor.py 更快)显然,您应该测试预处理后结果之间的距离。

关于python - 以有效的方式过滤2 numpy.ndarray中的相似图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38145643/

相关文章:

python - 有什么方法可以使用 Django 模型作为接口(interface)吗?

jquery - 如果按下按钮,有什么方法可以使图像大小为 %300?/已修复

python - 将大型稀疏矩阵转换为 COO 时出错

python - 如何随机生成非常小的数字?

python - 使用 setuptools 构建 Python 源代码分发包时忽略 git 存储库

python - 垃圾/ python : Replace empty string

python - 通过连接另一个列表的元素创建一个字符串列表

python - 谷歌应用引擎图像 GIF execute_transforms LargeImageError

c# - 如何将 Image 类型转换为 BitmapImage 类型?

python - 对 numpy 数组之和的不理解