Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 图像比较器返回false_Android_Image Processing_Bitmap_Duplicates - Fatal编程技术网

Android 图像比较器返回false

Android 图像比较器返回false,android,image-processing,bitmap,duplicates,Android,Image Processing,Bitmap,Duplicates,所以,我在Android上使用一个文件共享应用程序。它会创建一个复制副本,并将其上载到服务器 问题 以下代码适用于我手动创建的副本。也就是说,我长按并使用文件管理器将文件复制到同一目录中。然后我的函数返回true。当它将应用程序产生的重复图像与原始图像进行比较时,我得到false MD5校验和是不同的,所以这是可选的 代码 以下是图片: 原始图像- 应用程序创建的重复图像- 我的代码当前在比较这两个图像时返回false。 如何使代码返回true?您的问题是由于JPEG压缩创建的伪影造成的,如果您

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

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

MD5校验和是不同的,所以这是可选的

代码

以下是图片:

原始图像-

应用程序创建的重复图像-

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

您的问题是由于JPEG压缩创建的伪影造成的,如果您始终可以将图像保留为PNG格式,则您的问题最有可能得到解决。如果你不能做到这一点,那么你需要一个更好的算法来比较图像。这正是在会议上讨论的同一个问题


例如,运行前面讨论中提到的算法,我们得到了99%以上的相似性。有了这个相似性值,你可以说图像是相同的。

你的问题是由于JPEG压缩产生的伪影,如果你能始终保持图像为PNG格式,那么你的问题很可能得到解决。如果你不能做到这一点,那么你需要一个更好的算法来比较图像。这正是在会议上讨论的同一个问题



例如,运行前面讨论中提到的算法,我们得到了99%以上的相似性。有了这个相似值,你可以说图像是一样的。

你的问题不是很清楚,请说得更清楚。@AliImran更好吗?当你的这行比较应用程序的重复图像和原始图像时,
,这是什么意思?@AliImran我使用的第三方应用程序文件共享创建图像的副本并将其上载。这是重复的图像,我指的是“由于应用程序”。问题是有关第三方应用程序。你试过调试你的代码吗?并检查
ByteBuffer
的大小,因为它必须与原始图像不同,这是因为第三方应用程序可能在原始图像中使用了一些压缩。您的问题不是很清楚,请澄清一点。@AliImran是否更好?在比较应用程序导致的重复图像时,您的这一行让人困惑
而原始图像
在这里,你所说的“由于应用程序
”是什么意思?@AliImran我用于文件共享的第三方应用程序创建了图像副本并将其上载。这是重复的图像,我指的是“由于应用程序”。问题是有关第三方应用程序。你试过调试你的代码吗?并检查
ByteBuffer
的大小,因为它必须与原始图像不同,这是因为第三方应用程序可能在原始图像中使用了一些压缩。例如,JPEG已被广泛使用。如果我将原始和副本转换为.png格式,然后比较它们的校验和,它们是否相同?或者如果我将它们与我展示的代码进行比较,它会返回true吗?不,校验和会不同。你必须从PNG开始和结束,如果你在中间混合JPEG,那么你就使用有损压缩。注意在链接讨论中称为NRMSE的度量很容易实现,你可以考虑使用它。链接讨论是比较图像,在这种情况下,图像是有损压缩的。所以,是的,有很多方法可以做到这一点,你已经被指出了其中的两种(一种是复杂的,另一种是简单的)。调整图像大小是什么意思?是否要比较已调整大小的图像和未调整大小的图像?链接的讨论包括一个与MSE()相关的非常好的链接,该链接非常接近讨论中命名为NRMSE的内容。如果图像具有相同的尺寸(宽度x高度),则可以直接使用前面提到的度量。这并不会使比较复杂化,比如说JPEG已经被广泛使用。如果我将原始和副本转换为.png格式,然后比较它们的校验和,它们是否相同?或者如果我将它们与我展示的代码进行比较,它会返回true吗?不,校验和会不同。你必须从PNG开始和结束,如果你在中间混合JPEG,那么你就使用有损压缩。注意在链接讨论中称为NRMSE的度量很容易实现,你可以考虑使用它。链接讨论是比较图像,在这种情况下,图像是有损压缩的。所以,是的,有很多方法可以做到这一点,你已经被指出了其中的两种(一种是复杂的,另一种是简单的)。调整图像大小是什么意思?是否要比较已调整大小的图像和未调整大小的图像?链接的讨论包括一个与MSE()相关的非常好的链接,该链接非常接近讨论中命名为NRMSE的内容。如果图像具有相同的尺寸(宽度x高度),则可以直接使用前面提到的度量。这丝毫不会使比较复杂化。
    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());
    }