图像比较器返回false

时间:2013-01-05 13:41:36

标签: android image-processing bitmap duplicate-removal

所以,我在Android上使用文件共享应用程序。它会创建一个副本,并将其上传到服务器。

问题的 以下代码适用于我手动创建的副本。也就是说,我长按并使用文件管理器将文件复制到同一目录中。然后我的函数返回true。当它比较应用程序和原始图像的重复图像时,我得到false

MD5校验和不同,因此不在选项范围内。

CODE

    public boolean equals(Bitmap bitmap1, Bitmap bitmap2) {
        ByteBuffer buffer1 = ByteBuffer.allocate(bitmap1.getHeight()
                * bitmap1.getRowBytes());
        bitmap1.copyPixelsToBuffer(buffer1);

        ByteBuffer buffer2 = ByteBuffer.allocate(bitmap2.getHeight()
                * bitmap2.getRowBytes());
        bitmap2.copyPixelsToBuffer(buffer2);

        return Arrays.equals(buffer1.array(), buffer2.array());
    }

以下是图片:

原始图片 - original http://s7.postimage.org/e7ey11td7/IMG_20130103_WA0018.jpg

应用创建的重复图片 - duplicate http://s2.postimage.org/ta9b9bqbt/IMG_20130105_WA0002.jpg

我的代码在比较这两个图像时当前返回false。 如何让代码返回true?

1 个答案:

答案 0 :(得分:1)

你的问题是由JPEG压缩产生的人工制品引起的,如果你总是可以将图像保存在PNG中,那么你的问题很可能就解决了。如果你不能这样做,那么你需要一个更好的算法来比较图像。这与Comparing image in url to image in filesystem in python

中讨论的问题完全相同

例如,运行前面讨论中提到的算法,我们得到的相似度超过99%。使用该相似度值,您可以说图像是相同的。