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

时间:2016-07-01 12:37:37

标签: python image numpy machine-learning

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

Intuition告诉我,列车和验证集中相同或相似的图像可能会影响我的ML算法的性能,所以我决定尝试清理我的数据集。

我可以通过组合两个集合来轻松清理数据集,并使用散列来杀死相同的图像,例如md5散列,逐步构建md5哈希字典,并复制到新的ndarray只有那些md5散列不存在于散列字典中的图像爱好。

但是!我不知道如果有另一个图像几乎与其他图像相同,如何杀死其中一个图像。例如,当超出28x28像素时,只有几个具有不同的值。任何想法如何提出有效的图像之间的距离度量?在有效的情况下我也意味着它最好应该相对快速地工作,因为我不确定像素方式的比较是否是一个好主意。如果有人通过删除类似的图像提供有关消毒数据集中是否有任何真正好处的信息,那么它将会很有用吗?

1 个答案:

答案 0 :(得分:1)

您可以通过执行类似

的操作找到两个图像之间RGB空间中的距离之和
(((a - b)**2).sum(axis=2)**0.5).sum()

然而,你必须非常小心,因为你会在两张实际非常相似的图像之间产生很大的差异(即

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

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