Magick.NET Как использовать .ColorFuzz в качестве допуска пикселей для сравнения изображений

Я новичок в области сравнения изображений.

Я использую C# и Magick.NET (версия Magick.NET-Q16-AnyCPU: 7.14.5) для сравнения снимков экрана.

Используя .ColorFuzz, я хочу реализовать некоторую толерантность к пикселям, чтобы игнорировать различия в скриншотах.

Вот мой код:

double fuzzLevel = 0;

MagickImage baseHeaderView = new MagickImage(@"C:\githubActual.png");
MagickImage actualHeaderView = new MagickImage(@"C:\githubBase.png");
MagickImage diffView = new MagickImage();

baseHeaderView.ColorFuzz = (Percentage)fuzzLevel;
baseHeaderView.Compare(actualHeaderView, ErrorMetric.Absolute, diffView);

baseHeaderView.Composite(diffView, CompositeOperator.Over);
Console.WriteLine(baseHeaderView.GetAttribute("distortion"));
baseHeaderView.Write(@"C:\diffView.png");

Вот моя база и актуальные скриншоты.

Это изображение сравнения, когда переменная fuzzLevel = 0. baseHeaderView.GetAttribute("distortion" ) в этом случае вернет 614 разных пикселей.

Когда я изменяю fuzzLevel на 75, baseHeaderView.GetAttribute("distortion") возвращает 0 разных пикселей, но изображение diff по-прежнему содержит выделенные различия

Итак, мой вопрос заключается в том, почему, когда искажение равно 0, в разностном изображении все еще выделяются различия. Я делаю что-то не так, или это ожидаемое поведение?

Можно изменить приведенный выше код, чтобы, когда искажение равно 0, изображение различий не содержало выделенных отличий?


person feared    schedule 06.12.2019    source источник
comment
Почему вы не используете возвращаемое значение метода Compare?   -  person dlemstra    schedule 07.12.2019
comment
Привет @dlemstra! Спасибо за ваш комментарий. В этом случае я использовал GetAttribute(искажение) только для примера. Не могли бы вы пояснить, почему даже когда искажение равно 0, я все еще получаю заметные различия на моем изображении diff? Возможно, я делаю что-то неправильно в приведенном выше примере?   -  person feared    schedule 07.12.2019


Ответы (1)


Похоже, вы нашли ошибку в библиотеке ImageMagick. Ваши проблемы будут решены в следующем выпуске Magick.NET. В следующий раз не стесняйтесь открывать вопрос здесь: https://github.com/dlemstra/Magick.NET/issues

person dlemstra    schedule 09.12.2019
comment
Вау, спасибо за обновления. Ждем следующего выпуска! - person feared; 10.12.2019