Подтвердить что ты не робот

В чем разница между ImageMagick и GraphicsMagick?

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

Ответ 3

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

Ответ 4

Как и во многих вещах в жизни, у разных людей разные представления о том, что лучше. Если вы спросите ландшафтного фотографа, который бродит под дождем в горах Шотландии, который является лучшей камерой в мире, он расскажет вам облегченную камеру с защитой от непогоды. Спросите студийного фотографа, и он скажет вам самое высокое разрешение с лучшей скоростью синхронизации вспышки. И если вы спросите спортивного фотографа, он скажет вам, у кого самый быстрый автофокус и самая высокая частота кадров. Так же и с 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 {} \;

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


Canny 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 -connected -connected-components connectivity для анализа 4- и анализа 8-связанных BLOB-объектов.

Только эта функция дала ответы 60+ - см. Здесь.


Hough Line Detection

Похоже, что нет обнаружения линии Хаф в GM. Смотрите -hough-lines widспасибоheight{+threshold} в IM.

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

enter image description here


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

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


Морфология

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

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

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


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

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


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

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


свертка

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

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

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


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

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

Вот пример:

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

enter image description here


Расширение поддержки Colourspace

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

  • CIELab
  • HCL
  • HSI
  • LMS
  • другие.

Поддержка Pango

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

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

середина предложения и многое, многое другое. Существует отличный пример здесь.

enter image description here


Сжатие при загрузке с JPEG

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

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


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

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


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

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


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

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

Ответ 5

история

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 convert или вашего собственного инструмента в проекте?

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

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

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

Спектакль

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

зависимостями

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

Ответ 6

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