ImageMagick の例 --
その他
- 目次
-
ImageMagick の例の序文と目次
-
補間 (ピクセル間のカラー検索)
-
仮想ピクセル (画像外のカラー検索)
-
単色のランダムスポット
-
アノテート引数の使用方法
-
スプライス:新しい画像演算子の作成
-
境界線、フレーム、および境界線色の使用
-
リスト演算子のテスト
ピクセル補間またはピクセル間のカラー検索
"-interpolate
" 設定は、ソース画像の色を検索するときに使用されますが、その「ルックアップポイント」はソース画像のピクセルの間にあります。これは、"-fx
" (DIY 特殊効果演算子) や "-distort
" (汎用画像歪み演算子) などのさまざまな画像操作、および 円形歪み などの他の関連演算子で行われます。基本的に、「補間」は、ポイントが画像内の実際のピクセルと正確に一致せず、ピクセルの間のスペースにある場合に、画像からの 直接カラー検索 をどのように解釈するかを IM に指示します。たとえば、ピクセル位置 3,4
の色を検索すると、正確なピクセル色が取得されます。しかし、ポイント 3.23,4.75
で画像の色を検索した場合、IM は何を返す必要がありますか? 3,4
または 3,5
のピクセル色を取得する必要がありますか?あるいは、周囲のピクセルの色の混合を取得する必要がありますか?その場合、どのように色をマージする必要がありますか?ピクセル補間 は、浮動小数点の位置(ピクセル座標)で単一の色を検索するときに、ImageMagick が何をするかを定義します。補間は、リサンプリングフィルター によって提供されるようなピクセルリサンプリングと似ています。本質的な違いは、リサンプリングには「スケール」、「面積」、または可変「ウィンドウ」があり、その領域内のすべてのピクセルを表す色が返されることです。補間には「スケール」は関係なく、ルックアップの単一の「ポイント」と、そのポイントの周囲の固定サイズの「領域」のみがあり、そのポイントで使用する色を決定します。もちろん、ほとんどの領域リサンプリングアルゴリズムは、リサンプリングの領域が最小限の動作「ウィンドウ」に達すると補間方法に発展する傾向があり、これは画像が拡大またはアップサンプリングされるときに自然に発生します。これが、補間フィルター と ガウスぼかしフィルター が画像の拡大に適している傾向がある理由です。補間は基本的にサンプリングの下位形式であり、「何色」という質問に対するシンプルで迅速な回答が必要な場合に基本的に使用されます。 単純な補間方法
これらは、ポイント補間から使用する色を返すために可能な限り少ないことを行う、単純明快な方法です。最も単純なのは「Nearest
」と「Integer
」で、ミキシングやその他のブレンド効果なしで、ソース画像から単一のピクセル色を選択します。これにより、画像の元の色の値が保持されますが、エイリアシング効果のコストがかかり、通常は画像の滑らかさが低下します。![]() ![]() |
IM v6.7.6-2 以降、「Nearest-Neighbour 」補間設定の省略形として「Nearest 」を使用できます。 |
Integer
」はルックアップポイントを単純に切り捨ててピクセルを選択するため、一般的にピクセルが右下方向に 0.5 ピクセル移動します。これは通常、ソース画像の単純化された「スケーリング」のみに使用されます。一方、「Nearest
」は浮動小数点ルックアップ座標に最も近いピクセルを選択するため、より正確な結果が得られます。「Blend
」は、サンプリングポイントからの距離に応じて、最も近い 1、2、または 4 つのピクセルをブレンド(平均化)します。その結果、元のピクセル色は引き続き存在しますが、サイズは半分になり、ブレンドされた色のチェッカーボードがスペースを埋めます。(以下の例を参照)「Average
」は、実際には正確なカラーマッチを生成することはありませんが、常に周囲の 4 つのピクセルを混合して局所平均を生成します。これは、カラー検索の状況で役立ちます。「Average4
」はこの補間方法のエイリアスとしても使用できます。「Average9
」は似ていますが、サンプリングポイントの周囲の最も近い 9 つのピクセルの平均をとるため、ぼやけた結果になります。「Average16
」はサンプリングポイントの周囲の最も近い 16 ピクセルの平均をとるため、非常にぼやけた結果になります。小さな色のピクセルグループまたは単一の白いピクセルを拡大する場合の、さまざまな単純な補間方法の概要を以下に示します。元の画像は「Nearest」の結果と似ていますが、はるかに小さくなっています。
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
整数 | ニアレストネイバー | ブレンド | 平均 | 平均9 | 平均16 |
---|
![]() ![]() |
IM v6.7.7-6 より前、「Average 」は実際には「Average16 」に相当していました。他の 2 つの平均化補間子と「Blend 」、および「Background 」はこの時点で追加されました。 |
Background
」が提供されています。これは、ソース画像の「サンプリング」に対して現在の背景色を返すだけです。多くの場合、これはかなり役に立ちません。通常、空白の単色の画像になってしまうからです。一般歪み演算子)から使用される EWA リサンプリングフィルターが、リサンプリングが「サポート」またはリサンプリング領域でピクセルを見つけられない場合に、補間ルックアップにフォールバックする リサンプリングの失敗 のチェックとして主に使用されます。補間を「Background
」に設定し、背景色を目立つもの(「red
」など)に設定することにより、結果の画像のピクセルを探して、リサンプリングが何らかの理由で「失敗」した場所、または「すべてのソース画像ピクセルを見逃した」場所を確認できます。通常、サポート設定が小さすぎるか、エキスパートフィルターオプションを使用していることが原因です。将来:補間領域全体で「ランダム」に選択する将来の補間オプションの可能性。派手な補間効果に役立つ可能性があります! バイリニア
「Bilinear
」(または線形補間)は、デフォルトの補間方法であり、ルックアップまたはサンプリングポイントの周囲のピクセルの色を組み合わせて、実際の補間結果を得る最も簡単な方法の 1 つです。バイリニア補間の仕組みを説明する図を以下に示します。![[diagram]](../img_diagrams/bilinear_interpolation.jpg)
|
![]() |
|
![]() |
|
![]() |
メッシュ
"-interpolate
" 設定の「Mesh
」は、「Bilinear
」補間のバリエーションです。「Bilinear
」は 3 次元の曲面を生成しますが、「Mesh
」はピクセル間領域を 2 つの平らな三角形に分割するように設計されています。領域を 2 つの三角形に分割することは、2 つの「最も近い」コーナーカラーを持つ対角線に基づいています。![]() ![]() |
「Mesh 」アルゴリズムの詳細については、論文 ピクセルレベルのデータ依存三角測量による画像補間 を参照してください。 |
|
![]() |
Mesh
」アルゴリズムは、「Bilinear
」とほぼ同じカラー補間セットを生成しました。ただし、黄色とシアンの色を反転すると..
|
![]() |
Mesh
」アルゴリズムは「blue
」と「cyan
」の色が 2 つの最も近いコーナーであると判断し、これらの 2 つのコーナーの間に斜めに線形グラデーションを作成しました。残りの色は、この線から他の 2 つのコーナーへの単純な平らな三角形のグラデーションを形成します。これは珍しい補間のように見えるかもしれませんが、この方法により、カラー画像のサイズ変更、回転、またはせん断がわずかに変更された場合でも、シャープな境界線がかなりシャープなままになります。実際、適応サイズ変更 操作("-adaptive-resize
")は、小さな画像のサイズ変更にこの事実を使用して、結果の過度のぼかしを軽減します。たとえば、単一の「白」のコーナーがある場合、「mesh
」はエッジが見つかったと想定し、補間された色を調整してこのエッジを強調表示します。
|
![]() |
|
![]() |
Catrom (Catmull-Rom)
「-interpolate
」設定の「Catrom
」(一般的には不正確に「BiCubic
」補間として知られています)は、ポイントルックアップの色の決定において、より複雑です。基本的に、ピクセル間領域の角の色を見るだけでなく、それらの最近傍ピクセルを超えた色も参照します。サンプリングポイントを中心とした4x4領域の合計16ピクセルです。基本的に、関係する領域全体に曲線を当てはめ、使用するのに最適な全体的な色を決定します。このプロセスをよりよく説明する図を以下に示します...![[diagram]](../img_diagrams/bicubic_interpolation.jpg)
|
![]() |
Bilinear
」補間と非常によく似ているように見えるかもしれませんが、結果は補間された色を生成するために直線ではなく、より滑らかなブレンド曲線を持っています。ただし、この画像では、4つの近傍ピクセルを取り囲む他のピクセルの影響は示されていません。そのためには、もう少し広い領域を見る必要があります。この具体的な(非常に小さい)例では、周囲のピクセルは仮想ピクセル設定によって制御されます。
magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel edge \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_edge.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel White \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_white.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Catrom -virtual-pixel Black \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_catrom_black.jpg |
![[IM Output]](interpolate_catrom_edge.jpg)
![[IM Output]](interpolate_catrom_white.jpg)
![[IM Output]](interpolate_catrom_black.jpg)
![]() ![]() |
実際の画像では、仮想ピクセルの影響は、通常、画像の端付近のみに影響します。この画像は幅が2ピクセルしかないため、上記の例は強く影響を受けます。これは、より大きく典型的な画像では当てはまりません。 |
![]() ![]() |
非常に強い色のエッジに対するこのリンギング効果はクリップされる可能性があり、ひどいピクセルのラインが生じます。「RGB 」ではなく、「Lab 」や「Luv 」などの異なる色空間でサイズ変更と補間を行うことで、この問題を防ぐことができます。この問題の詳細と例については、LAB色空間でのサイズ変更を参照してください。 |
![]() ![]() |
「BiCubic 」(補間された三次フィルター)は、非常に大きなフィルターファミリーを指し、そのため、その意味は非常に不正確です。ただし、引き続き使用できますが、より正確な名前が優先されるため、その使用は推奨されていません。IM v6.7.7-7以降、「 BiCubic 」は単に「Catrom 」のエイリアスであり、通常は優れた「三次補間器」(b = 0、c = 1/2)と見なされます。補間に何を使用しているかを明確にするために、「BiCubic 」ではなく「Catrom 」という名前を使用する必要があります。IM v6.7.7-7より前、「 BiCubic 」は実際には、過度に強い負のリンギング効果を持つ極端な「Cardinal Cubic」フィルター(b = 0、c = 1)を使用していました。これは「Catrom 」に完全に置き換えられ、補間関数としては使用できなくなりました。IM v6.3.5-3より前、「 BiCubic 」は非常にぼやけた「Spline 」三次補間器として実装されていました。そのフィルターは、このバージョンのImageMagickで名前が変更されました。(次を参照) |
スプライン
「Spline
」補間法は、上記の「Catrom
」と同様に、最も近い16ピクセルも使用します。ただし、これは非常にぼやけた、ガウスのような補間です。
|
![]() |
Spline
」補間のまさに角にある色はミュートされています。これは、補間されたサーフェスが実際にはそれらのピクセルの元の色の位置を通過しないためです。本質的に、それは過度に「ぼやけて」おり、より正確には「Bスプライン」サーフェスとして知られています。サーフェスはまだ一種の三次フィルター(b = 1、c = 0)ですが、区分的立方曲線の技術を使用して生成されます。ただし、この曲線は元のピクセルの色、特に色の変化が強い領域にのみ近づきます。つまり、正確な整数ピクセル位置の補間されたルックアップでは、その実際のピクセルの色が返されるのではなく、周囲のピクセルとの色のぼかしが返されます。これはしばしば悪いと考えられますが、一般的なスムージング関数として使用できます。「Catrom
」と同様に、周囲のピクセルの影響も受けます。
magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel edge \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_edge.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel White \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_white.jpg magick \( xc:red xc:blue +append \) \ \( xc:yellow xc:cyan +append \) -append \ -size 100x100 xc: +swap -interpolate Spline -virtual-pixel Black \ -fx 'v.p{3*i/(w-1)-1, 3*j/(h-1)-1}' interpolate_spline_black.jpg |
![[IM Output]](interpolate_spline_edge.jpg)
![[IM Output]](interpolate_spline_white.jpg)
![[IM Output]](interpolate_spline_black.jpg)
![]() ![]() |
実際の画像では、仮想ピクセルの影響は画像の端のみです。ルックアップが行われているピクセル間領域を取り囲む実際のピクセルがあります。 |
Catrom
」補間で発生する可能性のある負の「リンギング」効果を示すことはありません。 補間の背景
補間の影響は、多くの場合、より広い領域に及ぶため、ここでは、白または黒の周囲のピクセルを持つ4つの主要な補間方法の拡大図を示します。
|
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
バイリニア | メッシュ | Catrom | スプライン |
---|
双線形
」補間色には実際には影響しません。存在する背景色に重ね合わせられているように見えます。ただし、「メッシュ
」がより強いシャープなエッジを生成する方法を確認できますが、画像のエッジに関係する場合、周囲の色に応じて対角線を反転することを決定できます。この「反転」を確認するには、白と黒の背景の間の赤と青の結合を見てください。「catrom
」と「spline
」の補間曲線は、周囲のピクセルの影響を受けます。特に、絶対色を含むテストケースでは。そして最後に、「spline
」補間は、実際には画像のガウスのようなぼかしです(シグマ0.65を使用)。「リンギング」やエイリアシング効果を排除するのに十分なぼかしですが、通常、ほとんどの使用にはぼかしすぎます。ガウスフィルターを参照してください。 回転線の補間
ここでは、垂直線の画像を作成し、アフィン歪みを使用して線を17度回転させ、生成されたアンチエイリアスピクセルが見えるようにビューを拡大することにより、さまざまな補間方法を示します。
|
![]() 回転なし |
![]() |
![]() 整数 |
![]() ニアレストネイバー |
![]() バイリニア |
![]() メッシュ |
![]() Catrom |
![]() スプライン |
---|
Interger
」と「NearestNeighbor
」は、高度にエイリアスされた結果を生成しますが、画像にある元のカラーのみを使用します。2つの主な違いは、「Interger
」は結果の画像を半ピクセル下に押し下げる傾向があることです。「Bilinear
」、「Mesh
」、および「Catrom
」は、一般的に非常に良好で類似した結果を生成します(詳細は後述)。後者は非常に鋭い回転線を生成します。これらのいずれも、一般的に優れたソリューションと見なされます。「Spline
」補間法は、エイリアシング効果を除去するために、細い線を明確にぼかします。ただし、「Spline
」は結果をぼかしすぎる傾向があり、回転線ではなく、グラデーションをスムージングするのに適しています。![]() ![]() |
上記の例では、特別な設定「-filter point 」を使用して、歪み演算子が最終的なピクセル色の決定に単一の「ポイント」補間のみを使用するようにします。それがなければ、補間ルックアップの代わりに領域リサンプリングが使用されますが、これも非常に良好な結果を生成します。 |
![]() ![]() |
これらの例では、「-rotate 」演算子を使用しなかったことに注意してください。この演算子は、画像を回転させるためにピクセルせん断法を使用するためです。その結果、ピクセル補間は使用されません。この方法で -rotate 」演算子を使用した場合の例と、結果として得られるピクセルレベルの効果については、細い線を回転させるを参照してください。更新:IMv7.7.3-4以降、回転演算子は内部で歪み演算子を使用しているため、上記の内容は当てはまらない場合があります。 |
回転エッジの補間
領域のエッジが歪んでいる場合、1本のピクセルラインと比較して、結果にわずかな違いがあります。
|
![]() 回転なし |
![]() |
![]() 整数 |
![]() ニアレストネイバー |
![]() バイリニア |
![]() メッシュ |
![]() Catrom |
![]() スプライン |
---|
Bilinear
」と「Mesh
」は、一般的な回転で適度にシャープなエッジを生成しますが、「Catrom
」は歪んだ画像でよりシャープなエッジを生成します。ただし、「Spline
」はぼやけたエッジを生成します。上記のケースでは、「Bilinear
」と「Mesh
」の違いは非常にわずかです。2つの方法は、歪み操作中に極端な拡大が行われた場合にのみ、目に見える違いを生成します。それ以外の場合、ピクセル強度のわずかな、ほとんど目立たない変化しか見られません。仮想ピクセル画像カラー検索ミス
多くの演算子は、画像自体の境界外のカラーを検索する必要があることがよくあります。これには、画像のぼかし、一般的な画像の歪み、モルフォロジー演算子と畳み込み演算子、一般的な歪み演算子、さらには非常に古い内破演算子の演算子が含まれます。では、-22、-3
のピクセルを要求した場合、どのような色が返されるべきでしょうか?このようなピクセルは実際には存在しませんが、返されるカラー値は、画像処理全体、特に画像の実際のエッジに近いピクセルの結果のカラーに大きな影響を与える可能性があります。「-virtual-pixel
」設定は、画像の通常の境界外にあるピクセルにアクセスするときにIMが何を返すかを定義します。![[IM Output]](../images/tree.gif)
-fx
」を使用して、小さな画像とその周囲のすべてのピクセルを「検索」して表示し、デフォルトの「-virtual-pixel
」設定で何が返されるかを確認します。
|
![]() |
Edge
」「-virtual-pixel
」設定は、要求された「仮想」位置に最も近い実際のピクセルの色を返します。つまり、最も近い「エッジ」カラーです。今回は、はるかに遅いFX演算子の代わりに、より高速なビューポートを使用した画像の歪みを使用して、周囲の仮想ピクセルを表示します。歪みメソッド「SRT 0」は、実際には画像の結果を歪ませることはなく、画像演算子が実際に見ているピクセル、特にソース画像を取り囲む「仮想」ピクセルを確認するだけです。
|
![]() |
Edge
' 仮想ピクセル設定はデフォルト設定であるため、上記は前の例と同じになります。この設定は、画像処理を行う際に、一般的にエッジ効果の影響が最も少なくなります。そのため、デフォルト設定として選択されました。ぼかし、または処理にピクセルの「近傍」を使用するその他のモルフォロジー演算子および畳み込み演算子を使用する場合に特に重要です。コーナーピクセルの色が、実際の画像を囲む斜めに隣接する領域を完全に塗りつぶしてしまうことに注意することが重要です。これにより、単一のコーナーピクセルがさまざまな画像変換に大きな影響を与える可能性があります。この「コーナー」効果は、画像をぼかすときに特に顕著になります。 'Tile
' VP設定は、画像処理のエッジ効果を画像の境界に沿ってラップさせるために非常に役立ちます。
|
![]() |
Mirror
' は 'tile
' と非常によく似ており、デフォルトの 'edge
' よりも効果的な場合があります。
|
![]() |
![]() ![]() |
IM v6.5.0-1 までは、元の画像に直接添付された画像のみがミラーリングされていました。元の画像からさらに離れた他の仮想コピーはミラーリングされませんでした(通常のタイルパターン)。これは修正され、隣接する仮想コピーだけでなく、仮想キャンバス空間全体が正しくミラータイルされるようになりました。 一般歪み演算子でミラータイルを使用して非常に広い領域をミラータイルする場合、たとえば遠方の地平線を表示する場合にのみ重要になります。 |
Transparent
' は、実際の画像境界外のピクセルに対して透明色を返します。
|
![]() |
none
」または「完全に透明な黒」がデフォルトの透明色であるためです。たとえば、ここで誤って透明度をオフにしています...
|
![]() |
Transparent
' 設定は、歪んだ画像を後で「レイヤー化」してより大きな画像を構築する画像の歪みに特に役立ちます。たとえば、3Dアフィンキューブ、および3Dパースペクティブボックスです。 'white
'、'gray
'、および 'black
' 設定は、上記の前の 'Transparent
' 設定に似ています。境界外のピクセルに対して、その特定の色を返します。
|
![]() |
|
![]() |
|
![]() |
-background
" 設定でその色を定義し、'Background
' "-virtual-pixel
" 設定を使用する必要があります。
|
![]() |
'
HorizontalTile
' VP設定は、IM v6.4.2-6 に、360度の完全な "円弧
" および "極座標
" 歪みに役立つ特別な形式のタイリングとして追加されました。画像は水平方向にのみタイル化され、タイルの上下にある仮想ピクセルは現在の "-background
" 色から設定されます。
|
![]() |
HorizontalTileEdge
' (IM v6.5.0-1 で追加)も仮想空間全体に画像を水平方向にタイル化しますが、仮想キャンバス空間の他の部分にサイドエッジピクセルを複製します。
|
![]() |
円弧
' および '極座標
' 歪みをより適切に処理するために追加されました。同様に、'
VerticalTile
' VP設定(完全性のためにIM v6.4.2-6 にも追加)は、画像を垂直方向にのみタイル化し、現在の "-background
" 色を使用して画像の側面を塗りつぶします。
|
![]() |
VerticalTileEdge
' は IM v6.5.0-1 で追加され、仮想キャンバス空間の残りの部分にサイドエッジピクセルを複製します。
|
![]() |
CheckerTile
' が追加されました。他の正方形は単に背景色(透明にすることもできます)で塗りつぶされます。
|
![]() |
他にもいくつか珍しい "
-virtual-pixel
" 設定があります。 'random
' は、画像からランダムなピクセルを選択して使用します。
|
![]() |
-blur
" と共に使用され、結果として生じるエッジ効果に粗くまだらな平均画像色を生成します。ピクセル値は一貫しておらず、乱数ジェネレーターに初期 "-seed
" が指定されていない限り、ルックアップごとに、さらには操作の実行ごとに異なる効果が生成されることに注意してください。これは、畳み込みまたはモルフォロジー画像処理で使用すると特に問題になります。画像のエッジに沿った各ルックアップは、同じピクセルルックアップが使用された場合でも、異なる値を提供するためです。ただし、パースペクティブ地平線を生成する場合、ランダムパターンは非常に優れていることがわかりました。パターンは、地平線に近づくほどぼやけた結果を示すためです。ぼかしは、単純な単色を使用した場合には見えないであろう深さを、結果のランダムテクスチャに与えます。しかし、'
dither
' は、要求された位置の32x32ピクセル内のピクセルに基づいて、順序付けられたディザパターンを返します。
つまり、画像から32ピクセルを超えて進むと、結果は再び画像のコーナーピクセルカラーになります。'edge ' と 'random ' のマージのようなものです。
|
![]() |
random
' VP のより順序付けられた形式と考えることができますが、画像から32ピクセル以上処理すると、効果的には 'edge
' のようになります。仮想ピクセルと無限大
"-virtual-pixel
" の効果は、一般歪み演算子、特にパースペクティブ歪みの結果ではるかに明確に確認できます。無限遠方への歪んだビューを作成できます。たとえば、ここでは、ツリーのパースペクティブビューでの "-virtual-pixel dither
" 設定の結果を示します。これは、この設定が無限遠まで返されるピクセルにどのように影響するかを示しています。
magick tree.gif -mattecolor DodgerBlue -virtual-pixel dither \ -set option:distort:viewport 150x100-50-50 \ -distort perspective '0,0 9,0 31,0 38,0 0,31 0,18 31,31, 40,18' \ perspective_dither.gif |
![[IM Output]](perspective_dither.gif)
-virtual-pixel
" 設定で試して、それらがどのように機能するかをよりよく理解してください。他の例は、遠方の地平線を表示するにもあります。上記のビューの「空」は、実際には "-mattecolor
" 設定から生成されていることに注意してください。これは、歪みによって「無効」な領域、この場合はパースペクティブ歪みの「空」を表すために使用されます。"-virtual-pixel
" 設定からではありません。仮想ピクセルの色
"-virtual-pixel
" メソッドはいずれも、単色メソッドのいずれか('background
'、'transparent
'、'background
'、'black
'、'white
'、'gray
')を介して specifically 要求されない限り、画像内に既に存在する色とは異なる色または合成色を実際には返しません。つまり、特定の色が追加される場合を除き、新しい色は生成されません(一般歪み演算子の場合は2つ)。もちろん、要求されたピクセルがピクセル補間されているか、エリアリサンプリングされている場合(上記のパースペクティブ歪みビューなど)、これらのメソッドは、選択された "-virtual-pixel
" 設定に従って返された色をマージする場合があります。演算子に対する仮想ピクセルの効果
ここでは、さまざまな演算子を使用した "-virtual-pixel
" 設定の効果の影響について説明します。"-blur
"...
|
![]() |
|
![]() |
tile
' の "-virtual-pixel
" 設定で "-blur
" を使用して画像がどのように相互汚染されるかを確認してください。もちろん、画像が最初からタイル化できる場合は、これが望ましい場合があります。
|
![]() |
-virtual-pixel
" に特定の色を設定すると、非常に興味深い効果と可能性が生じます。
|
![]() |
|
![]() |
red
」の背景が、結果のぼやけた画像が画像の実際のピクセルを取り囲む仮想ピクセルを利用したエッジの周りでどのように表示されるかに注目してください。"-gaussian
" は "-blur
" と同じ基本的な結果になります。これは、数学的に同一であるため理解できます。
|
![]() |
-radial-blur
" (実際には回転ぼかし)は、より興味深い境界効果を生成します...
|
![]() |
-motion-blur
" は、エッジ効果の影響を非常に受けやすいことに注意してください。![]() ![]() |
さらに悪いことに、「-motion-blur 」は現在、「-channel 」を使用して特定のチャンネルへの効果を制限する方法を理解していません。 |
|
![]() |
|
![]() |
|
![]() |
仮想ピクセルのインプロージョン効果
ここでは、さまざまな「-virtual-pixel
」設定を使用して、さまざまな大きな値(>1.0)のインプロージョンの興味深い例をいくつか示します。
|
インプロージョン | エッジ | タイル | ミラー | ディザ | ランダム | グレー |
---|---|---|---|---|---|---|
2 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
5 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
10 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
50 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
500 |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
-implode
」演算子で使用される直接補間サンプリングの直接的な結果です。直接補間ルックアップを参照してください。これは、将来のバージョンのIMでは、エリアリサンプリングを使用して変更される可能性があります。今のところ、結果を改善するには、スーパーサンプリング技術を使用する必要があります。「edge
」設定は、奇妙な効果のほとんどを回避するために使用される、より一般的でデフォルトの設定です。その他(「background
」を除く)は、基本的に画像内の既存のピクセルから複製されたパターンを生成し、効果は非常に多様です。また、引数は、効果が同様に増加するために、サイズが指数関数的に増加する必要があることに注意してください。また、約200を超える引数の場合は、結果の画像の中央に黒い円が表示される場合があります。これは、コンピューターの数学的限界に達したことが原因です。このような大きな値を使用することはお勧めしません。単色のランダムスポット
「plasma:fractal
」キャンバスをぼかし、色を非常に低い値に減らすことで、異なる色のランダムな領域を含む単純な画像を作成できます。ただし、結果は、要求された最終的な色の数と仮想ピクセル設定(上記を参照)によって大きく異なります。この実験では、初期のランダム画像として2つの選択肢がありました。フラクタルプラズマ画像とランダムノイズ画像です。ランダム画像は、その性質上、(「タイル」-virtual-pixel
」設定で)より優れたタイル可能な画像を作成できる画像を生成します。一方、プラズマ画像は、色のスポットに長方形のようなエッジを作成する傾向があります。一方、プラズマ画像はかなり素敵なパステルカラーのスポット、またはブロブを生成します。一方、ランダム画像は、中間調の灰色のひどい色合いを生成する傾向があります。このため、これらの実験ではプラズマ画像を使用することにしました。
|
色の数 | エッジ | ミラー | タイル | 白 | 黒 |
---|---|---|---|---|---|
2 |
![]() |
![]() |
![]() |
![]() |
![]() |
3 |
![]() |
![]() |
![]() |
![]() |
![]() |
4 |
![]() |
![]() |
![]() |
![]() |
![]() |
5 |
![]() |
![]() |
![]() |
![]() |
![]() |
Edge
」と「Mirror
」は、色が90度の角度でエッジに結合する傾向があります。「Random
」または「Dither
」設定では、色のブロブが画像の端に強く付着しますが、どちらも画像の端の近くに鋭いエッジ効果をもたらします。スポットのエッジをクリーンアップして滑らかにするには、2回目のぼかし-量子化サイクルが必要になる場合があります。「Tile
」設定では、スポットが画像の周りをラップする傾向があります。ただし、ソースのプラズマ画像自体はタイル化できないため、長方形のエッジの近くで一般的な色の変化が発生します。タイル化可能なランダム画像をソースとして使用した場合、色のスポットは画像の境界線を完全に無視します。「White
」または「Black
」の背景仮想ピクセル設定を使用すると、色のスポットは画像の中央に配置される傾向があります。この「センタリング」がどの程度うまくいくかは、使用された「背景色」と比較して、元のランダム画像がどの程度異なっていたかによって異なります。「-blur
」のサイズは、基本的にブロブのサイズと滑らかさに影響します。小さなぼかしは小さなスポットをたくさん生成し、上記で使用したような大きなぼかしは、より円形の単一の色のスポットを生成します。
異なる色量子化色空間を使用することで、まったく異なる色のセットと相互作用を作成することもできます。たとえば、ここでは上記の最後の例(5色に減らす)を繰り返しますが、色の選択には、より珍しい「
-quantize
」色空間を使用します。(色量子化と色空間を参照)上記の画像はすべて、同じランダム化されたソース画像から生成されたことに注意してください。表示されるさまざまな効果は、画像内の色の数を減らすさまざまな方法の結果です。画像の境界を越えた領域でぼかしが認識するピクセル色を定義する「-virtual-pixel
」設定が、色の領域の形状にどのように大きな影響を与えるかを確認できます。アノテーション引数の使用方法
IMバージョン6では、テキスト描画用の新しいコマンドラインオプション「-annotate
」が提供されました。これは、古い「-draw
」メソッドをバイパスして、Annotate()
APIを直接使用します。これにより、コマンドラインユーザーにいくつかの新機能が提供されます。この例では、回転が非常に明確になるように、まっすぐな文字であるArial Blackフォントを選択しました。
|
![]() |
-annotate {SlewX}x{SlewY}+{X}+{Y} 'Text String'上記の_X_と_Y_のオフセットは、描画される注釈付きテキストの重力による影響を受けた位置です。ただし、_SlewX_と_SlewY_は回転の形式を表します。これらの値が両方とも同じである場合、通常の回転が実行されます。しかし、それらが異なると、非常に興味深い効果が生じる可能性があります。ご覧のとおり、一部の引数ではテキストが描画されませんでした。基本的に、テキストがすべて1行で描画される場合です。これは予想されることです。ただし、テキストを反転、回転、斜体など、あらゆる方法で描画できることがわかります。非常に便利な画像演算子です。
スプライス:新しい画像演算子の作成
ImageMagickバージョン6の最初のリリース直後、質問への回答として議論が行われました。質問には、画像の中央に余分なスペース(行と列)を追加することが含まれていました。以下の例は、この議論から生じた複雑なコマンドセットであり、IMバージョン6の強力な魔法を使用して、何を行うべきかを正確に詳述しています。この例から、「-splice
」演算子が作成されました(詳細については、画像に行と列をスプライシングおよびチョッピングするの例を参照)。そのため、このコマンドラインはこの新しいコマンドの定義操作であり、どちらもまったく同じように機能するはずです。
|
![]() |
境界線、フレーム、および境界線色の使用
「-bordercolor
」は、「-border
」または「-frame
」を使用して画像に境界線を追加するためだけに使用する必要があるという議論があります。つまり、多くのユーザーは、透明度のある画像の背後の背景を設定するために使用すべきで_ない_と考えています。たとえば、IMでは、これによりスター画像の透明な領域が「-bordercolor
」に設定され、「-background
」色の設定は完全に無視されます。
|
![]() |
透明な画像の背景を設定するために「-bordercolor 」が使用される主な理由は、これにより、ユーザーからの最小限の設定で、透明度を含む可能性のあるランダムな画像セットが指定された場合に、「magick montage 」がきれいに表示されるためです。
|
![]() |
magick montage
」の結果はそれほど良く見えません。これは、「-border 」または「-frame 」演算子を使用するときに、画像の透明度を維持できないという意味ではありません。IMに透明度を維持するように指示するために、追加の「-compose 」設定を提供する必要があるだけです。
|
![]() ![]() |
-border
」または「-frame
」演算子を追加しながら、画像の透明な背景を維持する方法の詳細については、境界線の追加を参照してください。また、「magick montage
」については、モンタージュの背景と透明度の処理例を参照してください。提案された代替案の1つは、これらの演算子で画像領域の背景を「-background
」色に設定することでしたが、これは「magick montage
」での使用を妨げます。もちろん、追加のフレームまたは境界線を追加する前に、画像の透明度を削除することもできます。その場合、「-compose Copy
」の使用は無関係になります。
|
![]() |
-compose
」設定を使用する方がはるかに簡単です。新しいユーザーには明らかではないかもしれませんが、これらの例ページはすべてそれについて説明しています。リスト演算子のテスト
以下のすべてのコマンドは、まったく同じ画像を生成するはずですが、すべての画像はわずかに異なる方法で生成され、IMバージョン6の新しい画像リスト演算子が示されています。
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |
|
|
![]() |