Вопрос

Я обнаружил, что оцениваю обе эти библиотеки.Помимо того, что говорит сравнение GraphicsMagick, я вижу, что ImageMagick все еще получает обновления, и кажется, что они почти идентичны.

Я просто хочу выполнить базовые манипуляции с изображениями на C++ (т.е.загрузка изображений, фильтры, отображение);есть ли какие-либо различия, о которых мне следует знать при выборе между этими библиотеками?

Это было полезно?

Решение

Судя по тому, что я читал, GraphicsMagick более стабилен и работает быстрее.Я провел пару ненаучных тестов и обнаружил, что GM в два раза быстрее меня (при изменении размера).

Другие советы

Я обнаружил, что ImageMagick невероятно медленно обрабатывает изображения TIFF группы 4 (черно-белые изображения документов), главным образом из-за того, что он преобразует из 1 бита на пиксель в 8 и обратно для любых манипуляций с изображениями.Группа GraphicsMagick пересмотрела поддержку формата TIFF в своей версии 1.2, и теперь она обрабатывает эти типы изображений намного быстрее, чем исходный ImageMagick.Текущая стабильная версия GraphicsMagick — 1.3.5.

Я использую ImageMagick, когда скорость не имеет значения.Однако на стороне сервера, где ежедневно обрабатываются десятки тысяч изображений, GraphicsMagick работает заметно быстрее — в некоторых случаях до 50% быстрее в тестах!

Как и во многих других вещах в жизни, разные люди имеют разные представления о том, что лучше.Если вы спросите фотографа-пейзажиста, который бродит под дождем по горам Шотландии, какая камера лучшая в мире, он ответит вам, что это легкая, защищенная от атмосферных воздействий камера.Спросите студийного фотографа, и он скажет вам, что у него самое высокое разрешение и лучшая скорость синхронизации вспышки.И если вы спросите спортивного фотографа, он скажет вам, у кого самый быстрый автофокус и самая высокая частота кадров.То же самое и с ImageMagick и GraphicsMagick.

Ответив примерно на 2000 вопросов StackOverflow по ImageMagick за последние 5 с лишним лет, я делаю следующие наблюдения...

Что касается популярности...

  • Количество вопросов ImageMagick по SO превышает количество вопросов GraphicsMagick в 12:1 (7375 вопросов против 611 в мае 2019 г.), и
  • Число подписчиков ImageMagick на SO превышает число подписчиков GraphicsMagick в соотношении 15:1 ((387 подписчиков против 25 в мае 2019 г.)

По производительности...

Я рад признать, что GraphicsMagick может быть быстрее для некоторых, но не для всех проблем.Однако, если скорость является для вас наиболее важным фактором, я думаю, вам, вероятно, следует использовать либо libvips, или параллельный код на современных многоядерных процессорах или библиотеках, сильно оптимизированных для SIMD (или оптимизированных для графического процессора), таких как OpenCV.

Что касается возможностей и гибкости...

Здесь есть один явный победитель — ImageMagick.Мой опыт показывает, что в GraphicsMagick отсутствуют многие функции, которые присутствуют в ImageMagick, и я перечисляю некоторые из них ниже в произвольном порядке.

Я открыто признаю, что не так хорошо знаком с GraphicsMagick, как с ImageMagick, но я приложил все усилия, чтобы найти какое-либо упоминание об этих функциях в самой последней исходной версии GraphicsMagick.Итак, для Canny Edge Detector я выполнил следующую команду в исходном коде GM:

find . -type f -exec grep -i Canny {} \;

и ничего не нашел.


Детектор Канни Эдж

Похоже, что в GM этого полностью нет.Видеть -canny radiusxsigma{+lower-percent}{+upper-percent} в ИМ.

См. пример здесь и образец обнаружения краев на изображении Лены:

enter image description here


Обработка в скобках, сложная повторная последовательность

Это потрясающая функция ImageMagick, которую мне часто очень не хватает при использовании GM.IM может загружать, создавать или клонировать целую серию изображений и выборочно применять различную обработку к конкретным изображениям, а также переупорядочивать, дублировать и переупорядочивать их очень просто и удобно.Трудно передать в коротком ответе невероятную гибкость, которую это дает.

Представьте, что вы хотите сделать что-то довольно простое, например загрузить изображение A и размыть его, загрузить изображение B и сделать его оттенками серого, а затем разместить изображения рядом с изображением B слева.С ImageMagick это выглядит так:

magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png

enter image description here

С GM даже начать нельзя, он будет жаловаться на скобки.Если вы удалите их, он будет жаловаться на изменение порядка изображений.Если вы удалите это, преобразование в оттенки серого будет применено к обоим изображениям, поскольку оно не понимает скобки, и поместит изображение A слева.

См. следующие команды последовательности в IM:

  • -swap
  • -clone
  • -duplicate
  • -delete
  • -insert
  • -reverse

fx DIY Оператор обработки изображений

У IM есть -fx оператор, который позволяет вам создавать и экспериментировать с невероятно сложной обработкой изображений.Вы можете оценить функцию для каждого пикселя изображения.Функция может быть настолько сложной, насколько вам нравится (сохраните ее в файле, если хотите) и использовать все математические операции в троичном стиле. if высказывания, ссылки на пиксели даже на других изображениях, их яркость или насыщенность и так далее.

Вот несколько примеров:

magick rose: -channel G -fx 'sin(pi*i/w)' -separate   fx_sine_gradient.gif

enter image description here

magick -size 80x80 xc: -channel G -fx  'sin((i-w/2)*(j-h/2)/w)/2+.5' -separate fx_2d_gradient.gif

enter image description here

Ответ StackOverflow, который использует эту функцию с большим эффектом при обработке изображений на зеленом экране (с цветной клавиатурой): здесь.


Анализ Фурье (частотная область)

Похоже, что в GM нет упоминания о прямом или обратном анализе Фурье, а также о поддержке расширенного динамического диапазона (см. ниже), которая обычно требуется для его поддержки.Видеть -fft в ИМ.


Анализ связанных компонентов/маркировка/анализ BLOB-объектов

Кажется, нет «Анализ связанных компонентов» в GM - также известный как "маркировка" и «Блоб-анализ».Видеть -connected-components connectivity для анализа 4- и 8-связных блоков.

Одна только эта функция дала более 60 ответов — см. здесь.


Обнаружение линии Хафа

Кажется, в GM нет обнаружения линии Хафа.Видеть -hough-lines widthxheight{+threshold} в ИМ.

Посмотреть описание функции здесь и следующий пример обнаруженных строк:

enter image description here


Моменты и перцептивный хеш (pHash)

Похоже, что в GM нет поддержки расчета моментов изображения (центроидов и более высоких порядков), а также перцептивного хеширования.Видеть -moments в ИМ.


Морфология

Похоже, что в GM нет поддержки морфологической обработки.В IM имеется развитая поддержка:

  • расширение
  • эрозия
  • морфологическое открытие и закрытие
  • скелетонизация
  • дистанционная морфология
  • Морфология цилиндра и нижней шляпы
  • Морфология попаданий и промахов — концы линий, соединения линий, пики, гребни, выпуклые оболочки и т. д.

Ознакомьтесь со всеми сложными процессами обработки, которые вы можете выполнить этот замечательный урок.


Адаптивное выравнивание гистограммы с ограниченным контрастом - CLAHE

Похоже, что в GM нет поддержки адаптивного выравнивания гистограммы с ограниченным контрастом.Видеть -clahe widthxheight{%}{+}number-bins{+}clip-limit{!} в ИМ.


HDRI — визуализация с расширенным динамическим диапазоном

Похоже, что в GM нет поддержки изображений с расширенным динамическим диапазоном - только 8, 16 и 32-битные целочисленные типы.


Свертка

ImageMagick поддерживает множество типов свертки:

  • Разница гауссиан DoG
  • лапласиан
  • Собель
  • Компас
  • Прюитт
  • Робертс
  • Фрей-Чен

Ничто из этого не упоминается в исходном коде GM.


Постоянный магический регистр (MPR)

Это бесценная функция, присутствующая в ImageMagick, которая позволяет вам записывать промежуточные результаты обработки в именованные фрагменты памяти во время обработки без затрат на запись на диск.Например, вы можете подготовить текстуру или узор, а затем наложить их на изображение, или подготовить маску, а затем изменить ее и применить позже в той же обработке, не обращаясь к диску.

Вот пример:

 magick tree.gif -flip -write mpr:tree +delete -size 64x64 tile:mpr:tree mpr_tile.gif

enter image description here


Расширенная поддержка цветового пространства

IM поддерживает следующие цветовые пространства, которых нет в GM:

  • CIELab
  • ХКЛ
  • HSI
  • система управления обучением
  • другие.

Поддержка Панго

IM поддерживает язык текстовой разметки Pango, который похож на HTML и позволяет комментировать изображения изменяющимся текстом:

  • шрифт, цвет, размер, насыщенность, курсив
  • нижний индекс, надстрочный индекс, зачеркивание
  • оправдание

в середине предложения и многое-многое другое.Есть отличный пример здесь.

enter image description here


Сжатие при загрузке с помощью JPEG

Эта бесценная функция позволяет библиотеке сжимать изображения JPEG при их чтении с диска, чтобы считывались только необходимые коэффициенты, что позволяет уменьшить количество операций ввода-вывода и минимизировать потребление памяти.Это может значительно улучшить производительность при уменьшении масштаба изображений.

См. пример здесь.


Определен максимальный размер JPEG при записи.

IM поддерживает столь востребованную опцию указания максимального размера файла при записи файлов JPEG. -define jpeg:extent=400KB например.


Преобразования полярных координат

IM поддерживает преобразование между декартовыми и полярными координатами, см. -distort polar и -distort depolar.


Статистика и операции в настраиваемых областях

С этими -statistic MxN Оператор ImageMagick может генерировать множество полезных видов статистики и эффектов.Например, вы можете установить для каждого пикселя изображения градиент (разницу между самым ярким и самым темным) его окрестности 5x3:

magick image.png -statistic gradient 5x3 result.png

Или вы можете установить для каждого пикселя медиану его окрестности 1x200:

magick image.png -statistic median 1x200 result.png

Посмотреть пример применения здесь.

enter image description here


Последовательности изображений

ImageMagick поддерживает последовательности изображений, поэтому, если у вас есть набор очень шумных изображений, снятых с высоким ISO, вы можете загрузить всю последовательность изображений и, например, взять медианное или среднее значение всех изображений, чтобы уменьшить шум.См. -evaluate-sequence оператор.Я не имею в виду медиану в окружающей окрестности одного изображения, я имею в виду нахождение медианы всех изображений в каждой позиции пикселя.


Вышеупомянутое ни в коем случае не является исчерпывающим списком, это лишь первые несколько вещей, которые пришли мне на ум, когда я подумал о различиях.Я даже не упомянул поддержку HEIC (формат Apple для изображений iPhone), все более распространенных форматов расширенного динамического диапазона, таких как EXR, или любых других.Фактически, если вы сравните форматы файлов, поддерживаемые двумя продуктами (gm convert -list format и magick identify -list format) вы обнаружите, что IM поддерживает 261 формат, а GM — 192.

Как я уже сказал, у разных людей разные мнения.Выберите тот, который вам нравится, и наслаждайтесь его использованием.

Как всегда, я в долгу перед Энтони Тиссеном за его превосходные идеи и рассуждения об ImageMagick на веб-сайте ImageMagick. https://www.imagemagick.org/Usage/ Спасибо также Фреду Вайнхаусу за его примеры.

История

Graphicsmagick был отделен от imagemagick еще в 2002 году из-за споров между разработчиками-основателями.таким образом, они используют одну и ту же кодовую базу.

Ссылка: https://en.wikipedia.org/wiki/GraphicsMagick

Цель

графикамагия

  • фокусируется на простой, стабильной и более понятной кодовой базе/архитектуре.

имиджмагия

  • фокусируется на внедрении новых функций, расширении более широкой базы инструментов

Помимо скорости, imagemagick добавляет в оболочку терминала ряд инструментов командной строки, тогда как Graphicsmagick — это единственный инструмент, который вы можете вызывать.

Дизайн интерфейса CLI

графикамагия

gm <command> <options> <file>

имиджмагия

convert <options> <file>
compare <options> <file>

имхо, я предпочитаю (по сути только использовать) Graphicsmagick(gm) вместо imagemagick, поскольку последний имеет более высокую вероятность конфликта имен инструментов, что вызывает множество проблем при выяснении, почему определенные инструменты не запускаются, особенно во время задач автоматизации на стороне сервера.Таким образом, у Graphicsmagick гораздо более понятный дизайн.

представьте себе двоичный файл с именем Convert в проекте, и будет ли он называться конвертером imagemagick или вашим собственным инструментом в проекте?

список инструментов imagemagick (включая преобразование, сравнение, отображение): https://imagemagick.org/script/command-line-tools.php

список команд графикиmagick:http://www.graphicsmagick.org/utilities.html

примечание :начиная с версии 7, как упоминал Марк С., imagemagick теперь распространяется как один двоичный файл, а также поддерживает более старые команды версии 6.

Производительность

простой тест потребления памяти можно найти здесь:https://coderwall.com/p/1l7h-a/imagemagick-bloat-graphicsmagick

Зависимости

GraphicsMagick зависит от 36 библиотек, тогда как ImageMagick требует 64.Ссылка: http://www.graphicsmagick.org/1.3/FAQ.html

GraphicsMagick был ранним ответвлением Imagemagick.Вы можете прочитать об истории Imagemagick и ответвлении GraphicsMagick на сайте https://imagemagick.org/script/history.php.Похоже, что Imagemagick продолжает развиваться довольно активно, в то время как GraphicsMagick остается более или менее застойным с момента его разветвления.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top