В чем разница между ImageMagick и GraphicsMagick? - PullRequest
36 голосов
/ 14 мая 2009

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

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

Ответы [ 6 ]

21 голосов
/ 26 мая 2009

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

13 голосов
/ 26 июня 2009

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

10 голосов
/ 22 апреля 2011

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

5 голосов
/ 20 мая 2019

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

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

По популярности ...

  • Вопросы ImageMagick по SO превосходят по количеству вопросы GraphicsMagick в 12: 1 (7 375 вопросов против 611 в мае 2019 года) и
  • Число подписчиков ImageMagick на SO превышает число подписчиков GraphicsMagick на 15: 1 ((387 подписчиков против 25 в мае 2019 года)

С точки зрения производительности ...

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

С точки зрения возможностей и гибкости ...

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

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

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

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


Детектор Edge Edge

Это, кажется, полностью отсутствует в GM. См. -canny radiusxsigma{+lower-percent}{+upper-percent} в IM.

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

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, он будет жаловаться на скобки. Если вы удалите их, он будет жаловаться на изменение порядка изображений. Если вы удалите его, он применит преобразование градаций серого к обоим изображениям, потому что он не понимает скобки и поместит imageA слева.

См. Следующие команды последовательности в 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 в IM.


Анализ подключенных компонентов / Маркировка / Анализ BLOB-объектов

Похоже, что в GM нет «Анализ связанных компонентов» - также известный как «маркировка» и «Анализ BLOB-объектов» . См. -connected-components connectivity для 4- и 8-связного анализа BLOB-объектов.

Эта функция предоставила более 60 ответов - см. здесь .


Обнаружение линии Hough

Похоже, что в GM не обнаружена линия Hough. См. -hough-lines widthxheight{+threshold} в IM.

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

enter image description here


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

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


Морфология

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

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

Посмотрите всю сложную обработку, которую вы можете сделать с помощью этого замечательного учебника .


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

По-видимому, не поддерживается выравнивание контрастной ограниченной адаптивной гистограммы в GM. См. -clahe widthxheight{%}{+}number-bins{+}clip-limit{!} в IM.


HDRI - Отображение в широком динамическом диапазоне

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


свертка

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

  • Разница Гаусса DoG
  • 1197 * лапласиане *
  • Собела
  • Компас
  • Превитт
  • Roberts
  • Фрей-Chen

Ничего из этого не упомянуто в исходном коде 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
  • HCL
  • HSI
  • LMS
  • др.

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

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 на https://www.imagemagick.org/Usage/ Спасибо также Фреду Вайнхаусу за его примеры.

0 голосов
/ 20 мая 2019

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

0 голосов
/ 28 апреля 2019

История

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

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

Цель

GraphicsMagick

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

ImageMagick

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

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

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

GraphicsMagick

gm <command> <options> <file>

ImageMagick

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

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

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

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

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

примечание: начиная с v7, как было отмечено Марком S, imagemagick теперь распространяется как один двоичный файл и также поддерживает более старые команды v6.

Performance

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

зависимости

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

...