В чем разница между ImageMagick и GraphicsMagick?
-
21-08-2019 - |
Вопрос
Я обнаружил, что оцениваю обе эти библиотеки.Помимо того, что говорит сравнение 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}
в ИМ.
См. пример здесь и образец обнаружения краев на изображении Лены:
Обработка в скобках, сложная повторная последовательность
Это потрясающая функция ImageMagick, которую мне часто очень не хватает при использовании GM.IM может загружать, создавать или клонировать целую серию изображений и выборочно применять различную обработку к конкретным изображениям, а также переупорядочивать, дублировать и переупорядочивать их очень просто и удобно.Трудно передать в коротком ответе невероятную гибкость, которую это дает.
Представьте, что вы хотите сделать что-то довольно простое, например загрузить изображение A и размыть его, загрузить изображение B и сделать его оттенками серого, а затем разместить изображения рядом с изображением B слева.С ImageMagick это выглядит так:
magick imageA.png -blur x3 \( imageB.png -colorspace gray \) +swap +append result.png
С 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
magick -size 80x80 xc: -channel G -fx 'sin((i-w/2)*(j-h/2)/w)/2+.5' -separate fx_2d_gradient.gif
Ответ StackOverflow, который использует эту функцию с большим эффектом при обработке изображений на зеленом экране (с цветной клавиатурой): здесь.
Анализ Фурье (частотная область)
Похоже, что в GM нет упоминания о прямом или обратном анализе Фурье, а также о поддержке расширенного динамического диапазона (см. ниже), которая обычно требуется для его поддержки.Видеть -fft
в ИМ.
Анализ связанных компонентов/маркировка/анализ BLOB-объектов
Кажется, нет «Анализ связанных компонентов» в GM - также известный как "маркировка" и «Блоб-анализ».Видеть -connected-components connectivity
для анализа 4- и 8-связных блоков.
Одна только эта функция дала более 60 ответов — см. здесь.
Обнаружение линии Хафа
Кажется, в GM нет обнаружения линии Хафа.Видеть -hough-lines widthxheight{+threshold}
в ИМ.
Посмотреть описание функции здесь и следующий пример обнаруженных строк:
Моменты и перцептивный хеш (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
Расширенная поддержка цветового пространства
IM поддерживает следующие цветовые пространства, которых нет в GM:
- CIELab
- ХКЛ
- HSI
- система управления обучением
- другие.
Поддержка Панго
IM поддерживает язык текстовой разметки Pango, который похож на HTML и позволяет комментировать изображения изменяющимся текстом:
- шрифт, цвет, размер, насыщенность, курсив
- нижний индекс, надстрочный индекс, зачеркивание
- оправдание
в середине предложения и многое-многое другое.Есть отличный пример здесь.
Сжатие при загрузке с помощью 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
Посмотреть пример применения здесь.
Последовательности изображений
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 остается более или менее застойным с момента его разветвления.