Color Modes

アルファ合成

このページでは、様々な画像操作において2つの画像をどのようにマージするかを定義するために使用される画像合成方法について説明します。コマンドラインAPIでは、通常は-compose設定オプションを使用して設定します。

合成の説明では、特定のビルド構成に固有の定数値を避けるため、抽象的な用語を使用し、より正確な説明を可能にしています。各画素は、赤、緑、青のレベルで表されます(グレースケール画素の場合はこれらが等しくなります)。ビルド依存値QuantumRangeは、画像の赤、緑、青の各チャンネルに画素ごとに格納できる最大整数値です。(画像のマットチャンネルが有効になっている場合)各画素には、オプションで不透明から透明までの範囲の不透明度レベルが関連付けられており、別の画像画素と合成する際の画素色の影響を決定するために使用できます。画像のマットチャンネルが無効になっている場合、画像内のすべての画素は不透明として扱われます。不透明な画素の色は完全に表示され、透明な画素の色は完全に存在しません(画素の色は無視されます)。

定義上、ラスター画像は長方形です。すべての画像行の長さは等しく、すべての画像列の長さも等しくなります。アルファチャンネルを視覚的な「マスク」として扱うことで、アルファチャンネルを画像の抜き型として扱うことで、長方形の画像に「形状」を与えることができます。これは、形状内の画素を不透明に設定し、形状外の画素を透明に設定することによって行われます。アンチエイリアシング(視覚的に滑らかなエッジ)を実現するために、形状の境界上の画素は不透明と透明の中間にある場合があります。合成演算子の説明では、演算子の説明を理解しやすくするために、この画像の「形状」の概念を使用しています。「形状」という用語で演算子を説明することは便利ですが、単純なブール演算ではなく連続した浮動小数点数学に基づいているため、マスクスタイルの操作に限定されるわけではありません。

以下のアルファブレンド(Duff-Porter)合成方法を使用できます。

方法 説明
clear デスティネーションの色とアルファの両方がクリアされます。ソースとデスティネーションのどちらも使用されません(デスティネーションのサイズや常に保持されるその他のメタデータを除く)。
src ソースがデスティネーションにコピーされます。デスティネーションは入力として使用されませんが、クリアされます。
dst デスティネーションは変更されません。ソース画像は完全に無視されます。
src-over ソースがデスティネーションの上に合成されます。これは、合成設定が設定されていない場合、または画像メタデータに設定されていない場合のデフォルトのアルファブレンド合成方法です。
dst-over デスティネーションがソースの上に合成され、その結果がデスティネーションを置き換えます。
src-in デスティネーションの内側に位置するソースの部分がデスティネーションを置き換えます。
dst-in ソースの内側に位置するデスティネーションの部分がデスティネーションを置き換えます。オーバーレイされていない領域はクリアされます。
src-out デスティネーションの外側に位置するソースの部分がデスティネーションを置き換えます。
dst-out ソースの外側に位置するデスティネーションの部分がデスティネーションを置き換えます。
src-atop デスティネーションの内側に位置するソースの部分がデスティネーションに合成されます。
dst-atop ソースの内側に位置するデスティネーションの部分がソースの上に合成され、デスティネーションを置き換えます。オーバーレイされていない領域はクリアされます。
xor デスティネーションの外側に位置するソースの部分と、ソースの外側に位置するデスティネーションの部分が結合されます。ソースまたはデスティネーションのどちらか一方です。

'Src-*'メソッドのいずれも、'Src-'部分を省略して指定できます。例えば、デフォルトの合成方法は'Over'とだけ指定できます。

これらの合成方法の多くは、ソース画像によってオーバーレイされなかったデスティネーション画像をクリアします。これは、その特定の合成方法の定義の一部として予想されることです。特別な-define 'compose:outside-overlay' を'false'に設定することで、この動作を無効にできます。

上記の12個のDuff-Porterアルファ合成方法に加えて、特別な関連方法'Copy'が提供されています。これは、'Src'を特別な-defineオプション'compose:outside-overlay'を'false'に設定して使用することと等しく、オーバーレイされた領域のみを変更し、オーバーレイされていない画像の残りの部分をクリアしません。

以下の数学的合成方法も使用できます。

方法 説明
multiply ソースがデスティネーションと掛け合わされ、デスティネーションを置き換えます。結果の色は、常に2つの構成要素の色よりも少なくとも暗くなります。黒で色を掛け合わせると黒になります。白で色を掛け合わせると、元の色のままになります。
screen ソースとデスティネーションが補完され、次に掛け合わされ、デスティネーションを置き換えます。結果の色は、常に2つの構成要素の色よりも少なくとも明るくなります。白で色をスクリーンすると白になります。黒で色をスクリーンすると、元の色のままになります。
plus ソースがデスティネーションに追加され、デスティネーションを置き換えます。この演算子は、直接オーバーレイではなく、2つの画像の平均化または制御されたマージに役立ちます。
add 'plus'と同様ですが、透過データはマット値として扱われます。そのため、どちらかの画像の透明な領域は透明のままです。
minus ソース画像の色をデスティネーション画像から減算します。透過性が関与する場合、不透明な領域はデスティネーションの不透明な領域から減算されます。
subtract ソース画像の色をデスティネーション画像から減算します。透過性が関与する場合、透明な領域が減算されるため、ソースの不透明な領域のみがデスティネーション画像で不透明なままになります。
difference 2つの構成要素の色でより暗い方をより明るい方から減算します。白でペイントすると、デスティネーションの色が反転します。黒でペイントしても変化はありません。
exclusion 'difference'と同様の効果を生み出しますが、コントラストが低く見えます。白でペイントすると、デスティネーションの色が反転します。黒でペイントしても変化はありません。
darken デスティネーションとソースの色でより暗い方を選択します。ソースの方が暗い場合、デスティネーションはソースに置き換えられます。そうでない場合は変更されません。
lighten デスティネーションとソースの色でより明るい方を選択します。ソースの方が明るい場合、デスティネーションはソースに置き換えられます。そうでない場合は変更されません。
negate 差分モードの「反対」。黒と白は同じ結果を返しますが、その間の色は暗くなるのではなく明るくなるため、反転された差分モードではないことに注意してください。
reflect このモードは、画像に輝くオブジェクトや明るい領域を追加する際に役立ちます。式はカラードッジに似ていますが、ほとんどの場合、結果はそれほど明るくありません。結果はソフトライトのように見えます。
freeze リフレクトモードのバリエーション(ベースとブレンドの色が反転し、結果が再び反転)。
stamp このモードは、ある意味、平均モードに似ています。画像にレリーフやバンプテクスチャを適用する際に役立ちます。
interpolate このモードは、乗算モードとスクリーンモードをある意味で組み合わせたものです(非常に暗い色または明るい色では非常に似ています)。

通常、これらのモードでは、透過性が関与する場合、デフォルトの'Over'アルファブレンドが使用されます。ただし、'Plus'は'plus'アルファブレンドを使用します。これは、両方の画像のアルファチャネルは、オーバーレイされていない部分でも表示可能な入力が表示されるようにするためにのみ使用されることを意味します。また、任意の値は入力画像と出力画像のアルファチャネルによって重み付けされることを意味します。この'Over'アルファブレンドは、以下のライティング合成方法にも適用されます。

数学的合成は、-channelで定義されているように、個々のチャネル単位で適用されます。これにはアルファチャネルも含まれます。この特別な使用方法により、アルファ合成効果が関与することなく、画像チャネルの真の数学演算を実行できます。

-define compose:sync=falseを使用すると、上記の数学的合成はアルファチャネルとの動作を同期しなくなります。代わりに、数学的合成は、-channelで定義されているように、個々のチャネル単位で適用されます。これにはアルファチャネルも含まれます。この特別な使用方法により、アルファ合成効果が関与することなく、画像チャネルの真の数学演算を実行できます。

このdefineは、数学的合成方法と密接に関連しているにもかかわらず、ライティング合成方法(下記参照)には適用されません。

以下のライティング合成方法も使用できます。

方法 説明
linear-dodge これは'Plus'と等しく、カラーチャネルは単純に足し合わされますが、アルファチャネルを'Plus'することはありません。代わりに通常の'Over'アルファブレンドを使用し、透過性が関与します。ある種の加算乗算のような結果を生み出します。
linear-burn 'Linear-Dodge'と同様ですが、結果から1を引きます。ある種の画像の加算'Screen'です。
color-dodge ソースの色を反映するようにデスティネーションの色を明るくします。黒でペイントしても変化はありません。
color-burn ソースの色を反映するようにデスティネーションの色を暗くします。白でペイントしても変化はありません。
overlay デスティネーションの色に応じて、色を乗算またはスクリーンします。ソースの色がデスティネーションの上にオーバーレイされ、そのハイライトとシャドウが保持されます。デスティネーションの色は置き換えられませんが、デスティネーションの明るさまたは暗さを反映するようにソースの色と混合されます。
hard-light ソースの色の値に応じて、色を乗算またはスクリーンします。ソースの色が0.5より明るい場合、デスティネーションはスクリーンされたかのように明るくします。ソースの色が0.5より暗い場合、デスティネーションは乗算されたかのように暗くなります。明るさまたは暗さの程度は、ソースの色と0.5の差に比例します。0.5と等しい場合、デスティネーションは変更されません。純粋な黒または白でペイントすると、黒または白になります。
linear-light 'Hard-Light'と同様ですが、代わりにlinear-dodgeとlinear-burnを使用します。フォアグラウンドのトーン値に影響を与えながら、コントラストをわずかに上げます。
soft-burn カラバーンと逆カラードッジモードの組み合わせですが、その両方よりもはるかにスムーズです。ベース画像は少し明るくなりますが、非常に暗いブレンドカラーは「焼き付け」されます。
soft-dodge カラードッジと逆カラバーンモードの組み合わせですが、その両方よりもはるかにスムーズです。ベース画像は少し暗くなりますが、非常に明るいブレンドカラーは「ドッジ」されます。
soft-light ソースの色の値に応じて、色を暗くするか明るくします。ソースの色が0.5より明るい場合、デスティネーションは明るくなります。ソースの色が0.5より暗い場合、デスティネーションは焼き付けられたかのように暗くなります。暗さまたは明るさの程度は、ソースの色と0.5の差に比例します。0.5と等しい場合、デスティネーションは変更されません。純粋な黒または白でペイントすると、明らかに暗いか明るい領域が生成されますが、純粋な黒または白にはなりません。
pegtop-light 'Soft-Light'とほぼ同等ですが、2つの条件付きで選択された式ではなく、連続した数学的式を使用しています。
vivid-light 画像の非常に強い主要色と二次色を保持するように設計された修正された'Linear-Light'です。
pin-light 'Hard-Light'と似ていますが、強力な「ピンホール」光源の効果をシミュレートするために、シャープな線形シェーディングを使用しています。

これら特殊用途の合成メソッドも含まれています。

方法 説明
copy これはDuff-Porter合成メソッド'Src,'と同等ですが、オーバーレイされていない宛先画像の部分をクリアしません。
copy-* ソース画像の指定されたチャンネル(赤、緑、青、シアン、マゼンタ、黄、黒、または不透明度)を、宛先画像の同じチャンネルにコピーします。指定されたチャンネルがソース画像に存在しない場合('copy-opacity'または'copy-black'メソッドでのみ発生する可能性があります)、ソース画像はコピーされる値の特殊なグレースケールチャンネル画像であるとみなされます。
change-mask ソース画像のピクセルと類似した(現在の-fuzzファクターで定義される)宛先ピクセルを、透明に置き換えます。
stereo ステレオアナグリフを作成します。

これらの合成メソッドに加えて、マージまたはオーバーレイされる2つの画像だけでなく、いくつかの追加の数値引数も必要とする特殊なメソッドがいくつかあります。それらは以下の表に示されています。

"composite"コマンドでは、これらの合成メソッドは、必要な引数を持つ特別なオプションを使用して選択されます。通常は、使用する合成'メソッド'と同じ名前ですが、必ずしもそうではありません。そして"composite"コマンドでの-compose設定の通常の使用を置き換えます。例えば…

composite ... -blend 50x50 ...  

"magick"コマンドは、compose:argsの特別な-define属性を使用して、その-composite演算子にこれらの追加の引数を受け入れることができます。つまり、これらの特別な拡張された-composeメソッドを使用できるようになりましたが、引数とメソッドの両方を個別に設定する必要があります。例えば…

magick ... -compose blend  -define compose:args=50,50 -composite ...  

以下は、これらの特別な「引数付き」合成メソッドの表です。簡単な概要を示しています。詳細については、同等の"composite"コマンドオプション名を参照してください。

方法 説明
dissolve 引数: src_percent[xdst_percent]
"composite" -dissolveと同等です。'ソース'画像を指定された割合で溶解してから、'宛先'画像の上に'オーバーレイ'します。src_percentが100より大きい場合、メイン画像の溶解が始まり、200の値で透明になります。両方の割合が指定されている場合、各画像は指定された割合に溶解されます。
blend 引数: src_percent[xdst_percent]
"composite" -blendと同等です。指定された割合に従って、各ピクセルの透明度に応じて画像を平均化します('加算')。単一の割合値のみが指定されている場合、合成または'ソース'画像の重みが設定され、背景画像は完全に反対の量で重み付けされます。-blend 30は、'ソース'画像の30%と'宛先'画像の70%をマージすることと同等です。したがって、-blend 30x70と同等です。
mathematics 引数: A, B, C, D
現時点では"composite"では使用できません。以下の式に従ってソース画像と宛先画像をマージします。
    A*Sc*Dc + B*Sc + C*Dc + D
遅い-fx DIY画像演算子を使用して実装する必要がある合成メソッドを作成するために使用できます。
modulate 引数: brightness[xsaturation]
"composite" -watermarkと同等です。グレースケール画像(アルファマスク付き)を取得し、ウォーターマーク画像のグレースケール値とbrightness割合に従って、宛先画像の明るさを変更します。宛先の色の彩度属性は、saturation割合によって直接変更されます。これはデフォルトで100%(色の変更なし)です。
displace 引数: X-scale[xY-scale][!][%]
"composite" -displaceと同等です。このオプションでは、'オーバーレイ'画像、およびオプションで'マスク'画像が、相対的な変位マップとして使用されます。これは、オーバーレイ領域の各点で宛先画像のどの部分が表示されるかを検索するために使用されます。変位マップは、その背後の元の'背景'画像を歪める'レンズ'のようなものです。

Xスケールはオーバーレイ画像の'赤'チャンネルによって変調され、Yスケールは緑のチャンネルによって変調されます(マスク画像が与えられた場合は、オーバーレイ画像の緑のチャンネルにロールインされます)。この分離により、XとYのルックアップ変位を個別に変調できるため、1次元ベクトル変位(グレースケール画像を使用)ではなく、2次元変位を実行できます。

オーバーレイ画像に透明度が含まれている場合、これは結果の画像のマスクとして使用され、'無効な'ピクセルが削除されます。

'%'フラグは、変位スケールをオーバーレイ画像のサイズに関連付けます(100%=画像の幅/高さの半分)。'!'を使用すると、パーセンテージの引数は、代わりに宛先画像サイズを参照するようになります。

distort 引数: X-scale[xY-scale[+X-center+Y-center]][!][%]
現時点では"composite"では使用できません。'Displace'(上記)とまったく同じですが、オーバーレイの中心(または指定された中心)を基準とした絶対座標を使用します。基本的に、'黒'が左/上端を検索し、'白'が指定されたスケールに従って宛先画像の右/下端を検索する絶対歪みマップを作成できます。

'!'フラグは、パーセンテージのスケーリングを宛先画像に変更するだけでなく、ルックアップの中心オフセットも変更します。これは、オーバーレイが宛先画像の完全に異なる領域を検索できることを意味します。

blur 引数: Width[xHeight[+Angle][+Angle2]]
"composite" -blurと同等です。各ピクセルがオーバーレイ(ソース画像)のグレースケールマッピングに従ってスケーリングされた、指定されたシグマサイズの楕円(通常は円)を持つ楕円重み付け平均(EWA)で置き換えられる、可変ブラーマッピング合成メソッドです。

'Displace'と'Distort'と同様に、赤チャンネルは楕円の幅を変調し、緑チャンネルは楕円の高さを変調します。引数に単一の角度値が指定されている場合、楕円は指定された角度で回転します。

通常、マッピングオーバーレイ画像の青チャンネルは無視されます。ただし、2番目の楕円角度が指定されている場合、青チャンネルは、指定された最初の角度から2番目の角度までの範囲の可変角度を定義していると見なされます。これにより、放射状ブラー、または回転ブラーの粗い近似を生成できます。またはその両方の混合。

seamless-blend 引数: max-iterationsxdistortion

オーバーレイ画像を背景画像にシームレスに挿入します。この演算子にはマスクが必要です。前景オブジェクトを背景画像にシームレスにブレンドする際の最大反復回数と歪みを設定します。歪みは各反復間のRMSEであり、良い開始点は300x0.0001です。シームレスなブレンドは、HDRI機能が有効になっている場合に最も効果的に機能します。

saliency-blend 引数: max-iterationsxdistortion

オーバーレイ画像と背景画像をマージして、特定のピクセルで最も顕著な(最も詳細な)画像が結果に表示されるようにします。この演算子にはマスクが必要です。前景オブジェクトを背景画像にシームレスにブレンドする際の最大反復回数と歪みを設定します。歪みは各反復間のRMSEであり、良い開始点は300x0.0001です。シームレスなブレンドは、HDRI機能が有効になっている場合に最も効果的に機能します。顕著性ブレンドは、シームレスブレンドよりも少し遅くなります。

使用可能なすべての合成演算子の完全なリストを表示するには、-list composeを使用します。