ImageMagick Sharp比较过于敏感

时间:2018-12-04 06:53:43

标签: c# imagemagick

我正在尝试比较两个图像。我复制了我正在使用的原始jpeg,并在上面画了一条小线。

然后我使用原始和更改的jpeg运行以下代码,并以非常红色的颜色显示。

static void Main(string[] args)
    {
        Console.WriteLine("Hello World!");
        MagickNET.SetTempDirectory(@"C:\scratch");
        MagickImage oldImage = new MagickImage(@"C:\Users\Craig\Pictures\orig.jpg");
        MagickImage newImage = new MagickImage(@"C:\Users\Craig\Pictures\changed.jpg");

        newImage.Crop(oldImage.BaseWidth, oldImage.BaseHeight);

        using (MagickImage diffImage = new MagickImage())
        {
            double diff = oldImage.Compare(newImage, ErrorMetric.Absolute, diffImage);
            Console.WriteLine($"Diff is {diff}...");
            diffImage.Write(@"C:\Users\Craig\Pictures\diff.jpg");
            Console.ReadKey();
        }

    }

enter image description here

我认为问题是,它太准确了,并且jpeg进行了一些修改(有损?)。有没有办法让它平静下来并寻找更大的变化?因为如果您看图像的右下角,您可以看到我画的笑脸(仅嘴和眼睛)。底部可能在1.5厘米左右,而底部在1.5厘米左右。

我认为答案是“模糊”,但是我看不到如何将其应用于代码。

1 个答案:

答案 0 :(得分:1)

JPEG是有损压缩,因此仅保存它即可更改值。您应该使用PNG或TIFF而不是JPG进行此操作。不过,您应该能够在ImageMagick命令行比较中使用-fuzz。 compare -fuzz 20% -metric rmse image1 image2 diffimage

Input1:

enter image description here

Input2:

enter image description here

比较无毛绒:

compare -metric rmse lena.jpg lena2.jpg diffimage.png


enter image description here

与绒毛比较:

compare -fuzz 20% -metric rmse lena.jpg lena2.jpg diffimage2.png


enter image description here

对不起,我不知道其他API中的等效方法。