65

これらのライブラリの両方を評価していることに気づきました。GraphicsMagick の比較が示すこととは別に、ImageMagick はまだ更新されていることがわかり、2 つがほぼ同じであるように見えます。

C++ で基本的な画像操作 (つまり、画像の読み込み、フィルター、表示) を行いたいと思っています。これらのライブラリを選択する際に注意すべき違いはありますか?

4

7 に答える 7

83

人生の多くのことと同様に、何が最善かについては人によってさまざまな考えがあります。スコットランドの山を雨の中歩き回っている風景写真家に世界一のカメラは何かと尋ねると、彼は軽量で耐候性に優れたカメラを教えてくれるでしょう。スタジオの写真家に尋ねると、最高のフラッシュ同調速度で最高の解像度のものを教えてくれます。また、スポーツ写真家に尋ねると、最速のオートフォーカスと最高のフレーム レートを備えたカメラを教えてくれます。ImageMagick と GraphicsMagick も同様です。

過去 5 年以上にわたって ImageMagick に関する約 2,000 件の StackOverflow の質問に回答してきた私は、次のことを観察しています...

人気で言えば…

  • SO に関する ImageMagick の質問数は、GraphicsMagick の質問数の 12:1 を上回っています (2019 年 5 月時点で 7,375 の質問に対して 611 の質問)。
  • SO の ImageMagick フォロワーは、GraphicsMagick フォロワーの数を 15:1 上回っています ((2019 年 5 月時点で 387 フォロワー対 25 フォロワー)

性能的には…

すべての問題ではなく、一部の問題では GraphicsMagick の方が高速である可能性があることを認めて喜んでいます。ただし、速度が最も重要な考慮事項である場合は、libvips今日のマルチコア CPU または OpenCV のような大幅に SIMD 最適化 (または GPU 最適化) されたライブラリで、または並列コードを使用する必要があると思います。

機能と柔軟性の点で...

ここには、非常に明確な勝者が 1 つあります。ImageMagick です。私の経験では、ImageMagick には存在する GraphicsMagick には欠けている多くの機能があり、それらのいくつかを以下にリストします (順不同)。

ImageMagickほどGraphicsMagickに精通していないことを率直に認めますが、最新のGraphicsMagickソースコードで機能に関する言及を見つけるために最善を尽くしました. そこで、Canny Edge Detector の場合、GM ソース コードで次のコマンドを実行しました。

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

そして何も見つかりませんでした。


キャニーエッジ検出器

これはGMには完全に欠けているようです。-canny radiusxsigma{+lower-percent}{+upper-percent}IM で参照してください。

こちらの例と Lena 画像のエッジ検出のサンプルを参照してください。

ここに画像の説明を入力


括弧付き処理、洗練された再配列

これは ImageMagick のキラー機能であり、GM を使用しなければならないときに見逃すことがよくあります。IM は、一連の画像全体をロード、作成、または複製し、特定の画像に選択的に異なる処理を適用し、それらを非常に簡単かつ便利に並べ替え、複製、および並べ替えることができます。これがもたらす信じられないほどの柔軟性を短い答えで伝えるのは困難です。

画像 A を読み込んでぼかし、画像 B を読み込んでグレースケールにし、画像 B を左側に並べて配置するなど、かなり単純なことをしたいとします。ImageMagick を使用すると、次のようになります。

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

ここに画像の説明を入力

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

ここに画像の説明を入力

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

ここに画像の説明を入力

この機能を使用してグリーン スクリーン (クロマキー) 画像を処理する StackOverflow の回答はこちらです。


フーリエ (周波数ドメイン) 解析

GM でのフォワードまたはリバース フーリエ解析についての言及も、それをサポートするために通常必要とされるハイ ダイナミック レンジ サポート (後述) についても言及されていないようです。-fftIM で参照してください。


連結成分分析・ラベリング・ブロブ分析

GM には、「ラベリング」および「ブロブ分析」とも呼ばれる「連結成分分析」がないようです。4 および 8 連結ブロブ解析については、を参照してください。-connected-components connectivity

この機能だけで 60 以上の回答が得られました。こちらを参照してください。


ハフ線検出

GM にはハフ線検出がないようです。-hough-lines widthxheight{+threshold}IM で参照してください。

こちらの機能の説明と、次の検出された行の例を参照してください。

ここに画像の説明を入力


モーメントと知覚ハッシュ (pHash)

画像モーメントの計算 (重心および高次) や GM の知覚ハッシュはサポートされていないようです。-momentsIM で参照してください。


形態学

GM では形態学的処理がサポートされていないようです。IM には、次の高度なサポートがあります。

  • 膨張
  • 浸食
  • 形態学的オープニングとクロージング
  • スケルトン化
  • 距離形態
  • トップハットとボトムハットの形態
  • ヒット アンド ミスの形態 - 線の端、線の接合点、頂点、尾根、凸包など

この優れたチュートリアルで実行できるすべての高度な処理をご覧ください。


コントラスト制限適応ヒストグラム均等化 - CLAHE

GM では、Contrast Limited Adaptive Histogram Equalization がサポートされていないようです。-clahe widthxheight{%}{+}number-bins{+}clip-limit{!}IM で参照してください。


HDRI - ハイ ダイナミック レンジ イメージング

GM ではハイ ダイナミック レンジ イメージングは​​サポートされていないようです。8、16、および 32 ビットの整数型のみです。


畳み込み

ImageMagick は、多くの種類の畳み込みをサポートしています。

  • ガウス DoG の違い
  • ラプラシアン
  • ソーベル
  • 方位磁針
  • プレウィット
  • ロバーツ
  • フレイチェン

これらはいずれも GM ソース コードには記載されていません。


Magick 永続レジスタ (MPR)

これは ImageMagick に存在する非常に貴重な機能であり、ディスクへの書き込みのオーバーヘッドなしで、処理中に中間処理結果を名前付きのメモリ チャンクに書き込むことができます。たとえば、テクスチャまたはパターンを準備して画像の上に並べたり、マスクを準備して変更したり、後でディスクに移動せずに同じ処理で適用したりできます。

次に例を示します。

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

ここに画像の説明を入力


より広いカラースペースのサポート

IM は、GM にはない次の色空間をサポートしています。

  • CIELab
  • HCL
  • HSI
  • LMS
  • その他。

パンゴのサポート

IM は、HTML に似た Pango Text Markup Language をサポートしており、変化するテキストで画像に注釈を付けることができます。

  • フォント、色、サイズ、太さ、斜体
  • 下付き、上付き、取り消し線
  • 正当化

中間文とはるかに。ここに素晴らしい例があります。

ここに画像の説明を入力


JPEG を使用したロード時の縮小

この非常に貴重な機能により、ライブラリは JPEG 画像をディスクから読み取るときに縮小できるため、必要な係数のみが読み取られるため、I/O が軽減され、メモリ消費が最小限に抑えられます。画像を縮小するときのパフォーマンスを大幅に向上させることができます。

ここで例を参照してください。


書き込み時の最大 JPEG サイズを定義

-define jpeg:extent=400KBIM は、たとえばJPEG ファイルを書き込む際に最大ファイルサイズを指定するという要望の多かったオプションをサポートしています。


極座標変換

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オペレーターを参照してください。1 つの画像の周囲の中央値を意味するのではなく、各ピクセル位置ですべての画像の中央値を見つけることを意味します。


上記は決して完全なリストではありません。違いについて考えたときに頭に浮かんだ最初のいくつかのことです. HEIC (Apple の iPhone 画像用フォーマット) や、EXR などのますます一般的になっているハイ ダイナミック レンジ フォーマットやその他のフォーマットのサポートについては言及しませんでした。gm convert -list format実際、2 つの製品 (と)でサポートされているファイル形式を比較するとmagick identify -list format、IM は 261 形式、GM は 192 形式をサポートしていることがわかります。

何度も言いますが、人によって意見は異なります。お好きな方を選んで使って楽しんでください。

いつものように、 https: //www.imagemagick.org/Usage/ で ImageMagick に関する優れた洞察と談話を提供してくれた Anthony Thyssen に感謝します。

于 2019-05-20T12:01:47.180 に答える
33

私が読んだことから、GraphicsMagickはより安定しており、より高速です。いくつかの非科学的なテストを行ったところ、gm は im の 2 倍の速さであることがわかりました (サイズ変更を行っています)。

于 2009-05-25T21:58:39.067 に答える
14

ImageMagickは、TIFFグループ4画像(白黒ドキュメント画像)の処理が非常に遅いことがわかりました。これは主に、1ピクセルあたり1ビットから8に変換し、画像操作を行うために元に戻すためです。GraphicsMagickグループはバージョン1.2でTIFF形式のサポートを見直し、これらのタイプの画像の処理は元のImageMagickよりもはるかに高速です。現在のGraphicsMagickの安定版リリースは1.3.5です。

于 2009-06-26T19:20:26.193 に答える
13

速度が重要でない場合は、ImageMagick を使用します。ただし、毎日何万もの画像が処理されるサーバー側では、GraphicsMagick は非常に高速であり、場合によってはベンチマークで最大 50% も高速です!

于 2011-04-22T12:13:47.753 に答える
3

GraphicsMagick は API と ABI の安定性を提供しますが、これは ImageMagick の保証の一部ではないことに注意してください。これは、すべての依存関係をベンダー化していない限り、長期的には重要です。

于 2019-11-08T04:45:04.763 に答える