Есть ли ошибка в методе MagickUnsharpMaskImage для MagickWand C?

У меня есть интерфейс командной строки ниже, и я пытаюсь добиться того же результата, используя magickwand c. Вроде бы все идеально или не знаю может я что-то пропустил, но MagickUnsharpMaskImage у меня не работает. Проверьте мой исходный код. Я также прикрепил исходный код и два выходных изображения, сгенерированные с помощью CLI и C API.

CLI

convert testsharp.jpg -unsharp 0x1 unsharpC.jpg

C-код

int main(int argc, char const *argv[]) {
    MagickWand * wand;
    wand = NewMagickWand();
    MagickReadImage(wand, "testsharp.jpg");
    MagickUnsharpMaskImage(wand, 0.0, 1.0, 0.0, 0.0);
    MagickWriteImage(wand, "unsharpW.jpg");
    return 0;
}

исходное изображение

введите здесь описание изображения

вывод изображения с помощью CLI

введите здесь описание изображения

вывод изображения с помощью C

введите здесь описание изображения

Версия ImageMagick

Версия: ImageMagick 7.0.5-5 Q16 x86_64 2017-05-23 http://www.imagemagick.org


person Rahul    schedule 25.05.2017    source источник


Ответы (1)


От мужчины

MagickUnsharpMaskImage() повышает резкость изображения. Мы сворачиваем изображение с помощью оператора Гаусса заданного радиуса и стандартного отклонения (сигма). Для получения разумных результатов радиус должен быть больше сигмы. Используйте радиус 0, и UnsharpMaskImage() выберет для вас подходящий радиус.

Внимание мое

Вы называете это передачей radius=0 sigma=1.0

Более того, значение по умолчанию для этих параметров

  1. radius Радиус Гаусса в пикселях, не считая центрального пикселя (по умолчанию 0).
  2. sigma Стандартное отклонение Гаусса в пикселях (по умолчанию 1,0).
  3. gain Доля разницы между исходным и размытым изображением, добавляемая обратно в исходное (по умолчанию 1,0).
  4. threshold Порог в виде доли от QuantumRange, необходимый для применения суммы разницы (по умолчанию 0,05).

Исправьте код c на

MagickUnsharpMaskImage(wand, 0.0, 1.0, 1.0, 0.05);
person LPs    schedule 25.05.2017
comment
Ага. Разработчик библиотеки C должен будет соблюдать значения по умолчанию при попытке соответствовать поведению CLI. - person emcconville; 25.05.2017
comment
Ой, извините, я этого не заметил. Благодарю вас! - person Rahul; 25.05.2017