Pregunta

Me he encontrado a mí mismo la evaluación de estas bibliotecas.Aparte de lo que los GraphicsMagick comparación dice, veo que ImageMagick todavía tengo las actualizaciones y parece que los dos son casi idénticos.

Sólo estoy tratando de realizar operaciones básicas de manipulación de imágenes en C++ (es decir,la carga de imágenes, filtros, pantalla);¿hay diferencias que debo tener en cuenta al elegir entre estas bibliotecas?

¿Fue útil?

Solución

A partir de lo que he leído GraphicsMagick es más estable y es más rápido. Hice un par de pruebas no científicas y encontré gm ser dos veces tan rápido como im (haciendo un cambio de tamaño).

Otros consejos

He encontrado ImageMagick para ser increíblemente lento para procesar TIFF grupo 4 imágenes (en blanco y negro imágenes de los documentos), debido principalmente al hecho de que se convierte a partir de 1 bit por píxel a 8 y de nuevo para hacer cualquier manipulación de imágenes. El grupo GraphicsMagick revisó el apoyo formato TIFF con su versión 1.2, y es mucho más rápido en el procesamiento de este tipo de imágenes que el original era ImageMagick. La liberación estable actual GraphicsMagick está en 1.3.5.

Puedo usar ImageMagick cuando la velocidad no es un factor.Sin embargo en el lado del servidor, donde decenas de miles de imágenes que se procesan diariamente, GraphicsMagick es bastante mucho más rápido - en algunos casos hasta un 50% más rápido en los puntos de referencia!

Como con muchas cosas en la vida, diferentes personas tienen diferentes ideas sobre lo que es mejor.Si le preguntas a un fotógrafo de paisajes que vaga alrededor de la lluvia en Escocia montañas, que es la mejor cámara del mundo, él va a decir que un poquito de peso, sellado de la cámara.Pida a un fotógrafo de estudio, y él te dirá la más alta resolución de uno con la mejor velocidad de sincronización del flash.Y si le preguntas a un fotógrafo de deportes le voy a contar el uno con el más rápido enfoque automático y la velocidad de fotogramas más alta.Así es con ImageMagick y GraphicsMagick.

El haber respondido a cerca de 2.000 StackOverflow preguntas sobre ImageMagick en los últimos 5 años, hago las siguientes observaciones...

En términos de popularidad...

  • ImageMagick preguntas sobre LO superan en número a GraphicsMagick preguntas por un factor de 12:1 (7,375 preguntas vs 611 en Mayo de 2019), y
  • ImageMagick seguidores en TAN superan en número a GraphicsMagick seguidores a las 15:1 ((387 seguidores, frente al 25 de Mayo de 2019)

En términos de rendimiento...

Me alegra reconocer que GraphicsMagick puede ser más rápido para algunos, pero no todos los problemas.Sin embargo, si la velocidad es su consideración más importante, creo que se debe probablemente a utilizar cualquiera libvips, o código paralelo en el día de hoy de la Cpu multi-core o muy SIMD-optimizado (o de la GPU optimizada) de las bibliotecas como OpenCV.

En términos de características y flexibilidad...

Hay uno muy claro ganador aquí - ImageMagick.Mi experiencia es que hay muchas características que faltan de GraphicsMagick que están presentes en ImageMagick y yo una lista de algunos de estos a continuación, sin ningún orden en particular.

Me libremente admitir que no estoy tan familiarizado con GraphicsMagick como estoy con ImageMagick, pero hice mi mejor esfuerzo para encontrar cualquier mención de las características de la más reciente GraphicsMagick código fuente.Así, para el Detector de bordes Canny, me encontré con el siguiente comando en la GM de código fuente:

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

y no encontró nada.


Detector de bordes Canny

Esto parece estar completamente ausente en GM.Ver -canny radiusxsigma{+lower-percent}{+upper-percent} en IM.

Ver ejemplo aquí y la muestra del borde-detección de Lena imagen:

enter image description here


Parenthesised procesamiento sofisticado de re-secuenciación

Este es un asesino en función de ImageMagick que frecuentemente me extraña profundamente al tener que hacer uso de GM.IM puede cargar o crear o clonar toda una serie de imágenes y aplicar diferentes de procesamiento de forma selectiva a determinadas imágenes y de la re-secuencia, duplicar y re-orden muy sencilla y cómoda.Es difícil expresar la increíble flexibilidad que ofrece en una respuesta corta.

Imagina que quieres hacer algo bastante simple como cargar Una imagen y el desenfoque, la carga de la imagen B y hacerlo en escala de grises y, a continuación, coloque las imágenes lado a lado con la Imagen de la B a la izquierda.Que se parece a esto con ImageMagick:

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

enter image description here

Ni siquiera se puede empezar con la GM, que se quejan de los paréntesis.Si usted los quita, se quejan de intercambio de la imagen de la orden.Si quita que aplicará la conversión de escala de grises a imágenes de ambos ya que no entiende paréntesis y lugar imageA a la izquierda.

Consulte la siguiente secuenciación de comandos en IM:

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

fx de BRICOLAJE de Procesamiento de Imagen Operador

IM tiene la -fx el operador que le permite crear y experimentar con la increíblemente sofisticado procesamiento de la imagen.Usted puede tener la función evaluada para cada uno de los pixeles de una imagen.La función puede ser tan complicado como te gusta (guardar en un archivo si se desea) y el uso de todas las operaciones matemáticas, ternario de estilo if las declaraciones, las referencias a los píxeles incluso en otras de las imágenes y su brillo o la saturación y así sucesivamente.

Aquí hay un par de ejemplos:

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

Una respuesta de StackOverflow que utiliza esta característica para un gran efecto en el procesamiento de la pantalla verde (chroma-llave) imágenes aquí.


De Fourier (dominio de la frecuencia), el Análisis

Parece ser que no hay mención de avance o de retroceso Análisis de Fourier en GM, ni el Alto Rango Dinámico de apoyo (ver más adelante) que normalmente se necesita para ello.Ver -fft en IM.


Componente Conectado Análisis / Etiquetado/ Análisis Blob

Parece ser que no hay "Conectado Análisis De Componentes" en GM - también conocido como "etiquetado" y "Análisis Blob".Ver -connected-components connectivity 4 - y 8-conectados análisis blob.

Esta característica por sí sola ha proporcionado más de 60 respuestas - ver aquí.


Hough Línea De Detección De

Parece ser que no hay Hough Línea de Detección de GM.Ver -hough-lines widthxheight{+threshold} en IM.

Vea la descripción de la característica aquí y siguiendo el ejemplo de detectado líneas:

enter image description here


Momentos y la Percepción de Hash (pHash)

Parece ser que no hay soporte para la imagen de los momentos de cálculo (centroides y órdenes superiores), ni la Percepción de Hash en GM.Ver -moments en IM.


La morfología de la

Parece ser que no hay soporte para el procesamiento Morfológico en GM.En IM no es sofisticado soporte para:

  • la dilatación
  • la erosión
  • morfológicas de apertura y cierre
  • skeletonisation
  • la distancia de la morfología
  • el sombrero y la parte inferior del sombrero de morfología
  • Golpeado y se Pierda en la morfología de fin de línea, línea de uniones, picos, crestas, Convexo, Cascos, etc

Ver todos los sofisticadas de procesamiento que se puede hacer con este gran tutorial.


Contraste Limitada de Adaptación del Histograma anterior - CLAHE

Parece ser que no hay apoyo para el Contraste Limitada de Adaptación del Histograma anterior en GM.Ver -clahe widthxheight{%}{+}number-bins{+}clip-limit{!} en IM.


HDRI - High Dynamic Range Imaging

Parece ser que no hay apoyo de Alto Rango Dinámico de la Imagen, en GM - a sólo 8, 16 y 32 bits, los tipos enteros.


De convolución

ImageMagick es compatible con muchos tipos de convolución:

  • Diferencia de Gaussianas Perro
  • El laplaciano
  • Sobel
  • Brújula
  • Prewitt
  • Roberts
  • Frei-Chen

Ninguno de estos son mencionados en el GM código fuente.


La magia Persistente Registro (MPR)

Esta es una valiosa característica que está presente en ImageMagick que permite escribir de procesamiento intermedio de resultados a nombre de trozos de memoria durante el procesamiento sin la sobrecarga de la escritura en el disco.Por ejemplo, se puede preparar una textura o patrón y, a continuación, en mosaico sobre una imagen, o preparar una máscara y, a continuación, modificar y aplicar más tarde en el mismo procesamiento sin ir a la disco.

He aquí un ejemplo:

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

enter image description here


Amplio Espacio De Colores Apoyo

IM es compatible con los siguientes colourspaces no se encuentra en GM:

  • CIELab
  • HCL
  • HSI
  • LMS
  • otros.

Soporte De Pango

IM apoya Pango Text Markup Language), que es similar a HTML y permite anotar las imágenes con el texto que cambia:

  • de la fuente, el color, el tamaño, el peso, la cursiva
  • subíndice, superíndice, la huelga-a través de
  • justificación

en mitad de la frase y mucho, mucho más.No es un gran ejemplo aquí.

enter image description here


Shrink-sobre-carga con JPEG

Esta valiosa característica le permite a la biblioteca para reducir las imágenes JPEG como se leen desde el disco, de modo que sólo el necesario coeficientes son leer, por lo que la e/S es menor, y el consumo de memoria es mínimo.Puede masivamente a mejorar el rendimiento cuando por la ampliación de imágenes.

Ver ejemplo aquí.


Máximo definido JPEG tamaño al escribir

IM apoya la tan solicitada opción para especificar un tamaño máximo de archivo cuando la escritura de los archivos JPEG, -define jpeg:extent=400KB por ejemplo.


De coordenadas polares se transforma

IM admite la conversión entre coordenadas cartesianas y coordenadas polares, ver -distort polar y -distort depolar.


Estadísticas y operaciones en áreas personalizables

Con su -statistic MxN operador, ImageMagick puede generar muchos tipos de estadísticas y efectos.Por ejemplo, usted puede definir cada píxel en una imagen con el gradiente (diferencia entre la más brillante y la más oscura) de su 5x3 barrio:

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

O usted puede definir cada píxel de la mediana de su 1x200 barrio:

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

Ver ejemplo de aplicación aquí.

enter image description here


Las secuencias de imágenes

ImageMagick admite secuencias de imágenes, así que si usted tiene un conjunto de muy ruidoso, las imágenes tomadas a ISO alto, usted puede cargar toda la secuencia de imágenes y, por ejemplo, la mediana o la media de todas las imágenes para reducir el ruido.Ver el -evaluate-sequence operador.No me refiero a la mediana en un barrio circundante en una sola imagen, me refiero a que por la búsqueda de la mediana de todas las imágenes en cada píxel de la posición.


La anterior no es una lista exhaustiva, por cualquier medio, son apenas las primeras cosas que me vino a la mente cuando pensaba en las diferencias.Yo ni siquiera mencionar el apoyo para la HEIC (Apple formato para iPhone imágenes), cada vez más común de Alto Rango Dinámico formatos tales como EXR, o cualquier otros.De hecho, si se comparan los formatos de archivo compatibles con los dos productos (gm convert -list format y magick identify -list format) usted encontrará que IM apoya 261 formatos y GM compatible con 192.

Como ya he dicho, diferentes personas tienen diferentes opiniones.Elige la que más te gusta y disfrutar de su uso.

Como siempre, estoy en deuda con Anthony Thyssen por su excelente visión y el discurso en ImageMagick en https://www.imagemagick.org/Usage/ Gracias también a Fred Weinhaus por sus ejemplos.

Historia

GraphicsMagick se bifurcó de ImageMagick en 2002 debido a los conflictos entre los desarrolladores fundadores. por lo tanto comparten la misma base de código.

Ref: https://en.wikipedia.org/wiki/GraphicsMagick

Goal

GraphicsMagick

  • centra en simple, estable, y más clara base de código / Arquitectura

ImageMagick

  • se centra en el despliegue de nuevas características, se extiende un amplio Toolbase

Además de la velocidad, ImageMagick añade una serie de herramientas de la CLI para la cáscara del terminal mientras que GraphicsMagick es una única herramienta que se puede llamar.

diseño de la interfaz CLI

GraphicsMagick

gm <command> <options> <file>

ImageMagick

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

mi humilde opinión, prefiero (de hecho, sólo use) GraphicsMagick (g) a través de ImageMagick ya que este último tiene mayor probabilidad de nombre de la herramienta choque, lo que provoca una gran cantidad de problemas en saber por qué ciertas herramientas son no se está ejecutando, especialmente durante las tareas de automatización en el servidor. En resumen GraphicsMagick tiene un diseño mucho más claro.

imaginar un binario llamado convertir en un proyecto y se lo Imagemagick de convertir o su propia herramienta de laminado en proyecto que se llama?

lista de las herramientas de ImageMagick (incluyendo convertir, comparar pantalla): https: // imagemagick.org/script/command-line-tools.php

lista de comandos GraphicsMagick: http://www.graphicsmagick.org/utilities.html

Nota:. A partir del v7 como se ha mencionado por Mark S, ImageMagick ahora se distribuye como una sola binario, así como el apoyo a los comandos v6 de edad avanzada

Rendimiento

un simple análisis de consumo de memoria se puede encontrar aquí: https://coderwall.com/p/1l7h-a/imagemagick-bloat- GraphicsMagick

Dependencias

GraphicsMagick depende de 36 bibliotecas mientras que ImageMagick requiere 64. Ref: http: //www.graphicsmagick .org / 1.3 / FAQ.html

GraphicsMagick era un tenedor temprano de Imagemagick. Usted puede leer sobre la historia de Imagemagick y el tenedor a GraphicsMagick en https://imagemagick.org/script/history. php . Parece que Imagemagick ha seguido desarrollándose en lugar ampliamente, mientras GraphicsMagick se ha mantenido más o menos estancado desde el tenedor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top