ImageMagick の例 --
色の変更
- インデックス
-
ImageMagick の例 前書きとインデックス
-
色をグレースケールに変換
-
画像レベルの調整
- 画像のネガ化 (白と黒の反転)
- レベル調整演算子 (コントラストと黒/白の調整)
- 反転レベル調整 (コントラストの低下)
- ガンマレベル調整 (中間色の調整)
- ガンマ演算子調整 (レベル調整なしのガンマ)
- 色によるレベル調整 (色を使って画像レベルを調整)
- シグモイド非線形コントラスト (非線形コントラスト調整)
- その他のコントラスト調整
-
ヒストグラムの修正を使った調整
(画像のヒストグラムを変更する)
- 線形ヒストグラムのストレッチ
- 正規化 (オートレベルのストレッチ)
- コントラストのストレッチ (制御されたストレッチ)
- 線形ストレッチ (代替ストレッチ)
- ヒストグラムの再分布
- 均等化 (均一なヒストグラム再分布)
- ガウス再分布
- ヒストグラムの再分布方法
-
DIY レベル調整
(一般的な色合い付け演算子)
-
画像の中間色を色付け
(一般的な色合い付け演算子)
-
グローバルカラーモディファイア
-
ルックアップテーブルによる画像の色変更
これらのテクニックを試すには、テスト画像が必要です... 私が実際にこの画像をどのように生成したのかは心配しないでください。この演習には重要ではありません。IM を使用する際に優れたワークアウトになるように、さまざまな色、透明度、その他の機能が含まれるように設計しました。 |
![]() |
generate_test
」を参照してください。
![]() ![]() |
警告: 次に示すカラー処理は一般に、画像が線形カラースペースを使用していることを前提としています。ただし、ほとんどの画像は sRGB またはガンマ補正されたカラースペースを使用して保存されているため、正しく行うには、最初にカラースペース補正も適用する必要があります。 |
色をグレースケールに変換
グレースケール画像は、元の画像の処理を進めたり、背景構成で使用したりするなど、多くの用途に非常に役立ちます。画像をグレースケールに変換する最適な方法は、IM に画像をグレースケールカラースペース表現に変換するように依頼することです。青が赤よりもはるかに暗いのは、人間の目に映る強さに合わせて重み付けされているためです。つまり、「red
」は「blue
」に比べてかなり明るい色です。これは、専用の「-grayscale 」演算子 (IM v6.8.3-10 で追加) を使用した「rec709luma 」変換式を使用するのと同等です。
|
![]() |
rec709luma
」値は、「-intensity
」設定で使用するために定義されている多くのグレースケール化式の 1 つにすぎません (下記参照)。たとえば、これが別の一般的なグレースケール化式「rec601luma 」です。
|
![]() |
しかし、「グレースケール」には多くの異なる方法と意味があります...
たとえば、モジュレート演算子を使用して、すべての色の彩度レベルをゼロに設定することで、画像からすべての色を消すことができます。
|
![]() |
Lightness
」値が抽出されます。ただし、「-define modulate:colorspace
」を使用すると、使用する他のカラースペースモデルを指定できます。下記の他のカラースペースでのモジュレートを参照してください。テスト画像の中央の色の付いたディスクに使用した IM の「green
」色が、色のついた虹で使用されているような純粋な緑ではなく、新しいSVG -- Scalable Vector Graphics規格で定義された半分の明るさの緑であることに注意してください。純粋な RGB の緑が必要な場合は、代わりに「lime
」色を使用できます。詳細については、色の名前の競合を参照してください。別の方法は、FX DIY 演算子を使用して 3 つのチャネルを平均化し、グレースケールの純粋な数学的意味を得ることです。
|
![]() |
![]() ![]() |
sRGB チャネル値の平均は、'OHTA ' カラースペース (赤チャネル) の強度チャネル、または HSI カラースペースの 'I' チャネルとも同等です。 |
同じチャネル追加手法を使用して、個々のカラーチャネルの重み付けを制御できます。たとえば、これは使用できる DIY 式の 1 つです...
|
![]() |
「-fx 」演算子内で同じ意味が必要な場合は、「強度」を使用することもできます。
|
![]() |
ただし、FX DIY 演算子は解釈されるため、非常に遅くなる可能性があります。より複雑な操作の場合は、より単純な評価演算子「-evaluate 」を使用できます。たとえば、これは 2/5/3 比のグレースケール画像ですが、ここでも元の画像の透明度チャネルを保持しようとはしていません。
-recolor 」カラーマトリックス演算子を使用することです。これにより、3 つのカラーチャネルの重み付けを指定できます。
はるかに興味深いテクニックは、画像のさまざまなカラースペース表現から適切なカラーチャネルを抽出することによって、さまざまな明るさの意味を抽出することです。例については、カラースペース表現からのグレースケールチャネルを参照してください。 画像レベルの調整画像に対して行うことができる最も基本的な調整は、「レベル」調整として知られています。これは基本的に、個々の RGB カラー値 (またはアルファチャネル値でさえ) を取得し、それらの値を伸長または圧縮するように調整することを意味します。チャネル値のみが調整されるため、カラー画像ではなく、グレースケール画像で最もよく実証されます。ただし、画像のすべてのカラーチャネルを同じ量だけ調整する場合は、画像の強調や調整を目的として、カラー画像で使用できます。これは、次に説明する例の主要なセクション正規化調整で見る、より自動的な形式のレベル調整と混同しないでください。この関数は、画像の実際の内容に関係なく、まったく同じ操作を実行します。画像が明るいか暗いか、または青色または黄色の色合いを持っているかどうかは関係ありません。操作は実際の画像の内容に対して盲目です。![]() im_graph 」を使用して生成する、修正された「gnuplot 」グラフを使用します。グラフには、指定された元の「x」値 (最上部のグラデーションのグレースケール値を表す) を表示される「y」値にマッピングする赤い線があります。結果のカラーグラデーションも、入力線形グラデーションの下に表示されます。右に示すグラフは、実際には画像に対して何も行わない IM 「-noop 」演算子のグラフです。したがって、画像の各カラー値は、変更なしにまったく同じ値にマッピングされます。したがって、下側のグラデーションは上側のグラデーションと同じです。画像のネガ化最も単純で基本的なグローバルレベル調整は、"-negate " 画像演算子を使用して画像を反転させることです。基本的には、白を黒に、黒を白にするように、すべての色を調整します。つまり、赤は補色のシアンに、青は黄色になるなどです。以下のマッピンググラフを見ると、'test' 画像と標準の IM 内蔵の 'rose' 画像の両方で "-negate " 演算子を使用したことがわかります。マッピンググラフ画像の低い方のグラデーションが反転し、黒と白が入れ替わっていること、および反転された 'test' 画像にも同じ反転が現れていることに注目してください。
内部的には、negate は実際には非常に単純です。3つのカラーチャネルを独立して処理し、デフォルトではアルファチャネルを無視します。そうでない場合、以下のような非常に奇妙な結果が得られます...半透明のカラーグラデーションからわかるように、画像は反転しています。しかし、透明度チャネルも反転しているため、画像のすべての不透明な色が失われます。これが、"-channel " のデフォルト設定が 'RGB ' である理由です。詳細については、カラーチャネルを参照してください。反転を1つのチャネル、たとえば緑色のチャネルだけに制限できます。これはあまり役に立たないように見えるかもしれませんが、時には非常に重要です。"-negate " 演算子は、実際にはそれ自身の逆演算です。同じ "-channel " 設定で2回反転すると、互いに打ち消し合います。反転は、画像処理、特にグレースケール画像を他の処理オプションの前または後に扱う場合に非常に一般的です。そのため、試してみて、何かを行うときはいつでも心に留めておくことをお勧めします。反転した画像で作業することで、他の方法では難しい問題を解決できる場合があります。ダイレクトレベル調整"-level " 演算子は、より一般的なレベル調整演算子です。基本的に、'black_point' と 'white_point' の2つの値と、オプションの3番目の値(ガンマ調整)を指定します。これについては後で説明します。この演算は、画像のカラー値が 'black_point' 以下の場合、それらを黒(または0の値)にします。同様に、カラー値が 'white_point' 以上の場合、それらを白(または最大値)にします。これらの2つのポイントの間にある色は、値の完全な範囲を埋めるように線形に「引き伸ばされ」ます。この効果は、コントラストを改善し、画像内の色を強調することです。たとえば、グラフで示されているのと同じ値を使用して、テスト画像のコントラストを25%強調してみましょう。通常は、黒点と白点を `0%` と `100%` から同じ量だけ調整するため、'black_point' のみを指定できます。白点は同じ量だけ内側に調整されます。
25% はあらゆる画像にとって非常に大きなコントラスト強調ですが、何をするかが明確にわかります。'black' と 'white' の両方のポイントを変更する必要はありません。代わりに、カラーレンジの一端だけを調整することも十分に可能です。たとえば、非常に明るい、または非常に暗いバラの画像を作成できます。
ただし、与えられた範囲外の色は「クリップ」または「焼き付け」され、後で画像処理に使用できなくなることに再度警告します。これは、"-level " 演算子を使用する際の最大の問題です。
![]()
ただし、この画像のコントラストを下げる方法は非常に不正確であり、新しい 反転レベル演算子にアクセスできないバージョン6.4.2よりも古いIMを使用している場合を除いて、推奨されません。 ![]() -level " 演算子を使用して、画像 (前述のように、"-level 100%,0 " を使用して、指定された '黒' と '白' のポイント値を交換するだけ) を反転させることができます。
![]() -level " を使用して画像のしきい値処理を行うことは、その値で しきい値演算子を使用したのと同じです。右に表示されているマッピンググラフは、"-level 50%,50% " 操作の結果と、グレースケールグラデーションへの影響を示しています。
" -threshold " とは異なり、デフォルトの "-channel " 設定で使用した場合、画像は自動的にグレースケール画像に変換されません。レベルを使用して画像を線形に修正するという一般的な性質により、"-level " 演算子は、一般的なグレースケール画像の変更やマスク調整に適しています。画像全体ではなく、個々のチャネル ( "-channel " 設定を使用) を変更できるという事実を追加すると、IMユーザーが利用できる最高のカラー変更演算子の1つになります。
反転レベル調整-- 画像のコントラストを低減するIMバージョン6.4.2以降、レベル演算子は、 '反転' 形式の "+level " (「プラス」に注意)を提供するように拡張されました。または、演算子の元の "-level " 形式を使用できますが、(古いAPIインターフェースの場合)与えられたレベル引数に '! ' を追加します。このバリアントの引数はまったく同じですが、'black_point' と 'white_point' を '黒' と '白' にマッピングするように値を引き伸ばすのではなく、'黒' と '白' を指定されたポイントにマッピングします。言い換えれば、"+level " は "-level " の正確な逆です。たとえば、ここで '黒' を 25% のグレーに、白を 75% のグレーにマッピングして、'反転' 形式を指定する2つの方法を使用して、画像を非常に正確な方法でコントラストを低減します。
上記の "+level 25% " 操作を、以前に示した負のコントラスト低減 "-level -25% " 演算子の使用と比較すると、同じではないことがわかります。'プラス' バージョンは、はるかにコントラストの低い画像(グレーが強い)を生成しますが、演算子に与える正確な値にマッピングすることでそうします。'マイナス' 形式で使用される「架空」の値ではありません。この正確な値の使用は重要であり、演算子の 'プラス' 形式が追加された理由の1つです。もちろん、'25% ' は再び非常に大きな値であり、典型的な画像作業での使用はお勧めしません。"-level " と "+level " は、実際には同じ引数が与えられた場合、互いに正確な逆演算です。つまり、一方は値を範囲の極値にマッピングし、他方は範囲の極値からマッピングします。たとえば、ここでは "+level " を使用してテスト画像のカラーを圧縮し、次に "-level " を使用して再度展開して、画像の外観を元の状態に近づけます。
2つの画像は非常に類似しているように見え、IMの高品質な Q16 バージョンを使用しているため、違いに気付くのは難しいでしょう。ただし、実際には画像のカラー値を整数のより小さな範囲に圧縮し、再び復元したため、値がまったく同じではない可能性があります。極端な場合、これにより量子丸め効果が発生する可能性があります。これらの2つの操作を逆の順序(カラー値を引き伸ばし、次に圧縮する)で実行すると、量子クリッピング効果が発生します。"+level " 演算子のもう1つの便利な点は、画像内のすべてのカラー値を同じグレースケールレベルに完全に圧縮できることです。
個々のチャネルの特定の色値に従ってレベルを指定することにより、グレースケールグラデーションを特定のカラーグラデーションに効果的に魔法をかけることができます。ただし、これは計算して実行するのがかなり困難です。そのため、'レベル' 値ではなく、特定の色で黒点と白点を指定できるようにする "-level-colors " 演算子も提供されています。以下の色によるレベルを参照してください。レベルガンマ調整上記の「-level 」のどちらのバリアントでも、3つ目の設定値である「ガンマ」調整値を使用できます。デフォルトでは、この値は1.0 に設定されており、結果の画像の中間トーンの調整は行わず、元の画像から新しい画像への値の純粋な線形マッピングを生成します。ただし、この値を大きくすると、結果の線が曲線を描き、画像が明るくなるように調整され、値を小さくすると画像が暗くなります。たとえば、ここでは「ガンマ」設定のみを使用して、画像の中間トーンのみを明るくしたり暗くしたりします。
![]() ![]() ![]() ![]() ![]() ![]() ![]() 1.0 の値では画像に「ガンマ」の変更は行われません。ただし、特別な値「2.0 」(上記参照)を使用すると、画像の正規化された色の平方根を取得できます。「-level 」のどちらのバージョンも、「ガンマ」を同じように処理します。つまり、「黒」と「白」の両端のレベル調整を、非線形の「ガンマ」調整と組み合わせることができます。また、画像の一つのチャンネルのみを調整することも可能です。たとえば、ここでは、青チャンネルの黒の端に微妙な色合いを与え、ガンマを使って画像の中間トーンの色レベルを維持します。
この特定の例は、海のみが純粋な黒で、陸地がより灰色である気象衛星写真に色合いを付けるために使用できます。この青チャンネルの調整の別の方法は、DIY数学的な非線形調整で後述します。ガンマ演算による調整「-gamma 」演算子も提供されており、「-level 」演算子の「ガンマ」設定とまったく同じ効果があります。ただし、各チャンネルの「ガンマ」調整レベルを個別に調整できます。その本当の使い方は、画像に対して線形演算を実行する前に、画像の「ガンマ」関数を調整することです。詳細については、人間の色の知覚とガンマ補正を参照してください。また、この関数を使用して、個々のRGBチャンネルごとに画像の明るさを異ならせることもできます。
-evaluate POW 2.2 」は実際には「-gamma 0.45455 」(0.45455は1/2.2に等しい)演算を行い、これは「-gamma 2.2 」の逆になります。「 -gamma 」のあまり明白でない使い方の1つは、特定の画像チャンネルをゼロにすることです(カラーチャンネルのゼロ化を参照)。または、画像を完全に「黒」、「白」、またはその他の原色で着色することです(原色のキャンバスを参照)。色によるレベル調整「-level-colors 」演算子は、IM v6.2.4-1で追加されました。基本的には、上記で説明したレベル演算子とまったく同じですが、各チャンネルの値が色値として指定されています。つまり、「-level-colors 」オプションは、指定された色を「黒」と「白」にマッピングし、他のすべての色をそれらの間で線形に引き伸ばします。これにより、画像から指定された色の範囲が効果的に削除されます。そして、これは機能しますが、いくつかのチャンネルで共通の値を持つ色では失敗しやすいため、特に便利ではありません。たとえば、「DodgerBlue 」と「White 」の色は、青チャンネルで同じ色値を持っています。そのため、「-level-colors DodgerBlue,White 」は、それらの色を常に黒と白に変換できるとは限りません。その場合のより良い手法は、最も違いが大きいチャンネル(赤など)のグレースケール画像を抽出し、そのチャンネルをレベル調整または正規化することです。警告:透明な色に注意してください。一方、演算子のプラス形式「 +level-colors 」は、非常に便利です。「黒」と「白」の色を、指定された値にマッピングし、他のすべての色を線形に圧縮して、指定した2つの色に合わせます。たとえば、「black 」と「white 」を「green 」と「gold 」にマッピングしてみましょう。ご覧のとおり、グレースケールグラデーションは、指定された色で囲まれたグラデーションに再マッピングされ、グレースケール範囲外の色も変更されますが、指定された色の範囲の基本スタイルにも従います。これにより、「+level-colors 」演算子は、特にグレースケール画像をマッピングするときに非常に便利になります。色の名前を1つだけ指定し、カンマを含めると、欠落している色は必要に応じて「black 」または「white 」のいずれかにデフォルト設定されます。
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() カンマ「,」区切り文字なしで単一の色を指定した場合、その色が黒点と白点の両方に使用されます。つまり、画像内のすべての色がその1つの色にリセットされます(現在の「 -channel 」設定の制限に従います)。
-fill DodgerBlue -colorize 100% 」を使用して画像をカラー化する(下記参照)のと同じ結果です。画像の透明度設定も設定する場合は、「-channel 」を透明度チャンネルを含めるように設定するか、「-alpha opaque 」または「-alpha off 」を使用してアルファチャンネルを完全に不透明に設定する必要があります。
![]() ![]() ![]() ![]() ![]() +level-colors 」は、グラデーション色の置換、線形の色付け演算子であり、色を完全にリセットすることもできます。 シグモイド非線形コントラスト「画像処理の基礎」に関するPDF論文(44ページ)から、彼らは、線形コントラスト制御(レベル)を使用する代わりに、ガンマ補正を使用するものを「シグモイド非線形コントラスト制御」として紹介しています。その結果、写真の色調整にはるかに適した、非線形、滑らかなコントラスト変化(数学用語で「シグモイド関数」)が、色範囲全体にわたって発生し、白と黒の色が保持されます。論文の正確な公式は非常に複雑で、間違いさえありますが、基本的には2つの調整値が必要です。コントラスト関数が中心となるしきい値レベル(通常は「50% 」を中心)、およびコントラスト係数(「10 」は非常に高く、「0.5 」は非常に低い)です。
-fx 」の実装で、非常に高いコントラスト値「10 」としきい値「50% 」を結果として示しています。これらの値は、関数を高速化するために浮動小数点定数に組み込まれています。
10 」は非常に重いコントラスト係数であると言いました。実際、この値よりも大きい値は、コントラスト強調ではなく、ファジーなしきい値操作のようなものと見なすことができます。この演算子の実用的な使用例については、シェイプされた領域の色に追加されている明るい領域をシャープにするために使用される、高度な「ジェル」効果の例を参照してください。その他のコントラスト演算子![]() ![]() -contrast and +contrast Rather useless minor contrast adjustment operator -threshold Threshold the image, any value less than or equal to the given value is set to 0 and anything greater is set to the maximum value. Note that like level, this is a channel operator, but if the default 'channel setting' is used only the gray-scale intensity of the image is thresholded producing a black and white image. magick rose: -threshold 45% x: You can force normal channel behaviour, where each channel is thresholded individually buy using "-channel All" magick rose: -channel All -threshold 45% x: -black-threshold -white-threshold This is like -threshold except that only one side of the threshold value is actually modified. For example, here anything that is darker than 30% is set to black. magick rose: -black-threshold 30% x: magick rose: -white-threshold 50% x: These operators however do not seem to be channel effected, so may only be suitable for gray-scale images! ヒストグラム修正を使用した調整このセクションは、Fred WeinhausとAnthony Thyssenの共同作業によるものです。ヒストグラムとは何ですか?ヒストグラムは特殊なタイプのグラフです。画像内のピクセルの色レベルを、それぞれが値の小さな範囲にまたがる固定数の「ビン」にソートするだけです。そのため、各ビンには、その範囲に該当する画像内の色レベル(ピクセル値)の数が含まれます。その結果、画像を作成する色の値が、左の黒から右の白まで、どのように分布しているかが表現されます。
![]() ![]() ![]() ![]() ![]() ![]() -contrast "は、画像に少しコントラストを加える簡単なレベルタイプの演算子です。この結果、ヒストグラム自体がより広がり、可能な色の範囲全体をより良くカバーするようになります。ヒストグラムの前後の比較から、色のストレッチの実行方法により、「ビン」の間にギャップと穴が生じることもわかります。具体的には、すべての色が「ビン」に配置された「ヒストグラム」が作成されます。これらの「ビン化された」色は、全体として変更されるため、画像の色がグループ化されます。これは、画像の色を処理する特に良い方法ではありません。ただし、この演算子は画像の内容や色の分布に関する知識がなく、盲目的に動作します。したがって、この演算子が適用された画像をより良くするのではなく、悪化させる可能性が非常に高いため、ユーザーが制御しないで行うことはできません。このセクションでは、画像処理の決定プロセスの一部として画像のヒストグラムを調べる画像処理演算子について見ていきます。次に、この調査の結果を使用して画像を修正し、画像の色分布の品質を向上させます。これらの演算子は、処理される画像からの実際の情報を使用するため、ユーザーによる多くのチェックを行わなくても、多くの画像に対してよりグローバルに使用できることがよくあります。このタイプの演算子には、"-normalize "、"-contrast-stretch "、"-linear-stretch "などの自動線形「レベル」タイプ演算子だけでなく、"-equalize "などの非線形演算子や、最終的にImageMagickに含まれる可能性のある、Fred Weinhaus氏のスクリプト、"redist"などがあります。ヒストグラムストレッチング前の例のような最も単純な手法では、色範囲を改善するために、画像のヒストグラムを単純に外側にストレッチします。ただし、レベル操作で黒点と白点を盲目的に選択する代わりに、画像のヒストグラムに基づいて点を選択します。基本的に、各ヒストグラムビンの色の値を、両端から内側に、あるしきい値に達するまでカウントします。これらの点は、ヒストグラム(レベル)ストレッチの黒点と白点として使用されます。図が必要 基本的に、ヒストグラムのカウントは、ストレッチによって黒と白に強制されるグレーレベルの値を提供します。つまり、純粋な黒から選択された黒点ビンの対応するグレーレベルまでのビン範囲内にある画像内のすべてのピクセルは、最終的に純粋な黒になります。同様に、純粋な白から白点ビンの対応するグレーレベルまでのビン範囲内にある画像内のピクセルは、最終的に純粋な白になります。ただし、これらの点の外側にあるピクセルは、可能な色の値の範囲外にストレッチされており、その結果、範囲の限界に設定されます。つまり、これらのピクセルは、純粋な黒または純粋な白の極端な色値に変換されるため、「クリッピング」され、「焼き付け」られます。その結果、黒点と白点を選択するための「しきい値」の制限が高すぎると、画像に黒と白の領域が多くなり、結果として得られるヒストグラムの極端な端のビンに大きなカウント(高いバー)が表示されます。ひどい焼き付きの例 -- 中国のチェス画像?「ストレッチ」演算子のまとめ... -contrast-stretchと-linear-stretchは両方とも、(1024ビンを使用して)色をストレッチする位置を決定するためのヒストグラムを生成します。そのため、「正確」ではありません。もう1つの違いは、「ゼロ」の処理方法であり、-linear-stretchは実際にストレッチを実行するために-level操作を実行しますが、-contrast-stretchは色の置換ストレッチにヒストグラムビン値を使用します(1024の量子化丸め効果が発生します)。 -normalizeは内部的に-contrast-stretchを使用します。数学的に完璧な正規化ストレッチ演算子は-auto-levelです。完璧な「白点のみ」または「黒点のみ」バージョンも可能ですが、現時点では実装されていません。自動レベル - 完璧な数学的正規化"-auto-level "は、画像をフル量子範囲にストレッチするために使用する画像内の最大値と最小値を検索します。ヒストグラムが値の範囲を超えてストレッチされた結果、値が「クリッピング」されたり、「焼き付け」られたりすることはありません。"-channel "設定は、すべてのチャンネルが「同期して」均等にストレッチされるか(すべてのチャンネルの最大値と最小値を使用)、個別にストレッチされるか(各チャンネルを別個のエンティティとして)を決定します。現時点では、完全に透明なピクセルの隠された色もレベルの決定に使用されますが、透明度が関係する場合、これはいくつかの問題を引き起こす可能性があります。これはバグと見なされています。FUTURE: We actually need three modes of operation... synced color channels with 'alpha' (and 'read') masking. synced channels (as defined by channel) (current default) individual separate channels (currently if -channel is set by user)これは、手動のレベル演算子と同様の、純粋な数学的なヒストグラムストレッチです。つまり、最小値はゼロに調整され、最大値は量子範囲に調整され、線形方程式を使用して画像内の他のすべての値を調整します。レベルを決定するために使用される可能性のある「ヒストグラムビン」やその他の「値のグループ化」は使用しません。 正規化"-normalize "演算子は、これらの3つの演算子の中で最も単純なものです。これは、グレースケールヒストグラムを、グレー値の完全なダイナミックレンジを占有するように拡張するだけで、ヒストグラムの低い(黒)端で2%、高い(白)端で1%クリッピングまたは焼き付けを行います。つまり、画像内の最も暗いグレーの2%が黒になり、最も明るいグレーの1%が白になります。これはほとんどの画像では大きな損失ではなく、全体的な結果として、画像のコントラスト(強度範囲)が自動的に最大化されます。理想的な図が必要です!中国のチェスを使用した例?ここで、グレースケールグラデーションを作成し、それを完全に黒と白の範囲に拡張します。
![]() ![]() ![]()
-normalize "は純粋にグレースケール演算子として機能していました。つまり、赤、緑、青、およびアルファチャンネルのそれぞれは、"-channel "設定に従って、互いに独立して拡張されました。IMバージョン6.2.5-5以降、デフォルトの"+channel "設定のみが指定されている場合、"-normalize "はすべてのカラーチャンネルを結合し、すべて同じ量で正規化します。これにより、画像内のピクセル色がシフトしないことが保証されます。ただし、純粋な白または黒の色のピクセルが得られない可能性もあります。たとえば、ここでは、正規化テスト画像にいくつかの追加の色(青から紺へのグラデーション)を追加しました。
![]() ![]() ![]() -normalize "はすべてのチャンネルをまとめて最大化しているため、1つのチャンネルはゼロ値を持ち、別のチャンネルは最大値を持ちます。つまり、すべての追加された青色には「赤」および「緑」チャンネルに「ゼロ」値がすでに含まれているため、黒のピクセルは生成されませんでした。そのため、画像の低い方の境界は拡張されませんでした。
red 'と'green 'チャンネルが明るくなり、'blue 'チャンネルがわずかに暗くなったためです。このことから、重要な点が浮かび上がってきます。
ノーマライズやその他のヒストグラム演算子は、実際にはグレースケール演算子であり、 実際、「カラー画像で使用する場合は注意が必要です。 -normalize 」は、より一般的な「-contrast-stretch 」のサブセットに過ぎず、黒点=2%、白点=1%のデフォルト値が設定されています。では、「-contrast-stretch 」とは何でしょうか? コントラストストレッチ「-contrast-stretch 」演算子(IM v6.2.6で追加)は、「-normalize 」に似ていますが、クリップまたは焼き付けられるピクセル数をユーザーが指定できる点が異なります。つまり、ヒストグラムのストレッチに使用する「黒点」と「白点」の選択をある程度制御できます。したがって、ユーザーは、画像内で最も暗いグレースケールの数を黒に、最も明るいグレースケールの数を白にするように指定します(数またはパーセント数)。たとえば、これにより、上位と下位の15%の色が極値(白と黒)に置き換えられ、残りの70%の色が適切にストレッチされます。最終的な結果は、画像の全体的なコントラストを改善することです。上記グラデーションの上部と下部で「焼き付け」と「クリップ」の効果を簡単に確認できます。これらのグレーの色は、色の範囲の限界をはるかに超えてストレッチされるからです。
-threshold-black 」を使用することです。)「-contrast-stretch 」の重要な側面は、黒点と白点のしきい値カウントにゼロを使用することです。この場合、「-contast-stretch 0 」は、画像のヒストグラム内の最小と最大のビンを見つけます。カウントは実際にこれらのビンから始まるため、結果は単純に最小と最大のビンを完全な黒と完全な白にストレッチすることになります。これにより、クリッピングが最小限またはおそらくゼロのコントラストストレッチが行われ、これらの「ビン」内のすべての値が0および最大値になります。
ヒストグラムの再分布ヒストグラムの再配分は、特定の形状を実現するためにヒストグラム内のビンを再配分する非線形手法です。最も一般的な2つの形状は均一(フラット)とガウス(ベル型)ですが、双曲線やレイリーなど、他のタイプの分布も使用されています。イコライズ - 均一なヒストグラム再配分均一な分布の場合、ヒストグラムビンは、平均してヒストグラムが全範囲にわたってフラットまたは一定の高さになるようにシフト、間隔、および結合されます。これはヒストグラムの均等化と呼ばれます。IM関数「-equalize 」はこれを行います。残念ながら、これはすべてのチャンネルに同じ操作を適用するのではなく、各チャンネルを個別に操作します。そのため、RGB色空間に適用すると、色のずれが発生する可能性があります。次に、IM関数-equalizeを使用したヒストグラムの均等化の例を示します。各チャンネルで個別に均等化を行うと、カラーバランスがシフトすることに注意してください。
![]() ![]() ![]() ![]() ![]() ![]()
![]() ![]() ![]()
![]() ![]() ![]() ![]() ![]() ![]() -equalize 」演算子とは結果が異なることに注目してください。具体的には、以前見たような色のずれがなく、すべての色が保持されます。スクリプトが行うことは、グレースケールヒストグラムを処理し、それをすべてのカラーチャネルに適用して、すべての色が一緒に保たれるようにすることです。IM「-equalize 」のヒストグラムとの比較のために、ここでもグレースケールヒストグラムの結果を示しましょう。再分配されたヒストグラムは、IMイコライズよりもわずかに平準化(平坦または均一)されているように見えることに注意してください。
![]() ![]() ![]() ガウス再分布ヒストグラムを均等化することが、画像のヒストグラム分布を変更する唯一の方法ではありません。実際、コンピュータビジョンのアプリケーションを除いて、通常はあまり役に立ちません。これが同じ画像ですが、ヒストグラムがガウス(ベル型)分布になるように変換されています。ここで使用される値は、60%のグレー平均で、その平均の両側に60シグマロールオフがあります。
![]() ![]() ![]() ![]() ![]() ![]() ヒストグラムの再分布方法では、この種の直接的なヒストグラム調整はどのように機能するのでしょうか?基本的に、現在の画像のヒストグラムと目的の分布のヒストグラムを計算します。次に、ビン内のカウントが目的の分布に最適に従うように、各「ビン」のグレースケール値をどのように変更する必要があるかを計算します。一部のビンはより暗くシフトされる可能性があり、他のビンはより明るくシフトされる可能性があります。これは実際にはかなり複雑なプロセスであるため、ステップごとに説明しましょう。まず、ヒストグラムのグラフィック画像ではなく、ImageMagickから実際のヒストグラムデータを取得する必要があります。データは、すべてのカラー値が組み合わされてグレースケールになっていることに注意してください。これは、すべてのチャネルをまとめて配布し、画像全体の明るさを目的の曲線に追従するように調整するために行われました。
![]() ![]() ![]() tr 」と呼ばれるプログラムを使用して)クリーンアップされて、生の数値のみが残ります。この生データは、「awk 」と呼ばれる別のユーティリティプログラムに渡されます。これは、各ビンの実際のヒストグラムカウントを収集するために使用されます。結果を確認できるように、ヒストグラムカウントを(NetPBM、PGMテキストグレースケール画像ファイル形式を介して)勾配画像に処理し、「im_profile 」スクリプトを使用して線グラフとして表示します。基本的に、これは数値データファイルから直接、ヒストグラム画像を生成する別の方法にすぎません。ヒストグラムデータがテキストファイルになったので、再分配されたデータが一致する関数のヒストグラムも必要です。この場合、平均値が153(60%グレー)、シグマ幅が60のガウス分布です。両方の値は、ヒストグラムの「ビン」の256範囲で表されます。
![]()
![]()
![]() ![]() ![]() ![]() ![]() ![]()
![]() ![]() ![]()
DIYレベル調整数学的な線形ヒストグラム調整上記のレベル調整のさまざまな基本形式は、画像の色を線形に調整します。これらの変更は、数学的にも適用できます。たとえば、画像を特定の色で乗算することにより、すべての純粋な白色領域をその色に設定します。それでは、画像を読み込み、目的の色を含む画像を作成し、IMフリーフォーム「-fx 」またはDIY演算子を使用して元の画像にこの色を乗算してみましょう。「-fx 」に2番目の「v 」画像から色を読み取らせることで、数学で使用するために色をRGB値にマジックする必要なく、色を簡単に変更できます。「Gimp 」や「Photoshop 」のような高度なグラフィカル画像処理パッケージを使用している場合、上記の操作は画像のカラーヒストグラムグラフの「曲線」を調整することにより、画像に適用されるでしょう。
![]() gnuplot 」で生成されたグラフ(「im_histogram 」スクリプトを参照)があります。このグラフは、3つのRGBチャネルのうちの1つだけに何が起こるかを示す数式を表しています。元の色(緑の線)は、より暗い色(赤い線)に線形に再マッピングされます。黒色を線形に着色することも非常に簡単です。たとえば、「black 」をゴールドのような色「rgb(204,153,51) 」に(「white 」を「white 」のままにして)線形にマッピングするには、次のような数式が必要です...result = 1-(1-color)*(1-intensity)この式は、色を反転し、画像を必要な反転色で乗算し、画像を再度反転します。その結果、グレースケールの黒い側が着色され、白は変更されません。 再マッピング式の「gnuplot」ヒストグラムグラフも参考のために上記に表示されています。わずかに複雑な式を使用すると、グレースケールの「 black 」と「white 」の両端を特定の色で線形に置き換えることができます。
![]() ![]() ![]() ![]() ![]() -size 1x2 gradient:color1-color2 」は、「-fx 」式が参照する2色ピクセル画像を生成するためだけに使用されます。最初の色は白を置き換え、2番目の色は黒を置き換え、その他はすべて白と黒の間で補間されます。グレースケール演算子の典型的な例として、各RGBチャンネルは個別のグレースケールチャンネルとして扱われますが、線形補間は各チャンネルで異なります。これは、レベル調整(色別)演算子「+level-colors 」とまったく同じです。
数学的な非線形ヒストグラム調整線形色の調整は重要であり、より高速な方法も利用できますが、線形「レベル」調整が望ましくない状況も多く、「-fx 」DIY演算子がより役立ちます。線形調整の代替式は「-fx 'v.p{0,1}+(v.p{0,0}-v.p{0,1})*u' 」です。これは、「u 」を単一の乱数関数「f(u) 」で置き換えて、非線形の色変化を生成できるという利点があります。これにより、より面白いことができます。たとえば、最後の例で、すべての色を「black 」側にプッシュして、画像がより「firebrick 」色になるようにしたい場合はどうでしょうか?
![]() ![]() ![]() ![]() ![]() u^2 」のような二次式を使用して、ヒストグラムの黒端を「.25 」青色に着色できます。青色チャンネルのみを修正する必要があるため、値は式に直接挿入されました。
ただし、これにより妥当な結果が得られましたが、中間トーンのグレーがわずかに暗くなり、不健康な黄色の色になりました。これを回避するには、代わりに「指数」関数を使用して、着色プロセスをより適切に制御できます。
ここでも、グラフは、黒を特徴的な濃い青色に着色するために青色チャンネルがどのように変更されたかを示しています。2番目の値(「4.9 」)は、線形「+u 」グラフに戻る減衰です。この値が小さいほど減衰は遅くなり、調整はより線形になります。値が大きいほど、「減衰」はより劇的になります。この値は異なる色値に合わせて調整する必要がある場合があるため、これは一般的な黒色の着色には適した一般的な式ではありませんが、天気図の着色には最適です。一般的に、目的の色調整を数学的に表現できる場合は、「-fx 」演算子を使用して目的の結果を達成できます。「カーブ」調整![]() gnuplot 」、「fudgit 」、「mathematica 」、「matlab 」、およびその他多くの数学ソフトウェアパッケージが含まれます。以下は、「gnuplot 」を使用して4つのコントロールポイントから数式を生成するために使用できる1つの方法です。「gnuplot 」は、ほとんどのLinuxディストリビューション、およびWindowsにインストールできる標準の追加パッケージです。
|
![]() ![]() |
カーブフィッティングに必要なパラメーター(上記の「a 」から「d 」)の数は、指定するコントロールポイントの数と等しい必要があることに注意してください。したがって、5つのコントロールポイントが必要な場合は、関数に別の「e 」項を含める必要があります。ヒストグラムカーブが固定コントロールポイント 0,0 および1,1 を通過する場合、「d 」は「0 」に等しく、「c 」は「1-a-b 」に等しくなるため、実際に必要なパラメーターは2つだけです。 |
gnuplot
」生成画像からわかるように、生成された関数はコントロールポイントに完全に適合しています。また、「-fx」スタイルの式を生成したため、IM引数としてそのまま使用できます。例えば...
|
![]() |
gnuplot
」を呼び出し、指定されたコントロールポイントのより見栄えの良い多項式方程式を出力する「im_fx_curves
」という名前のシェルスクリプトを作成しました。Gabe Schafferは、同じことを行うために(ダウンロードされた「Math::Polynomial
」ライブラリモジュールを使用して)「im_fx_curves.pl
」という名前のPerlバージョンも提供しました。どちらのスクリプトも使用できます。たとえば、これは5つのコントロールポイントを持つ別のカーブです...ただし、FX関数は非常に遅いです。しかし、IM 6.4.8-9以降では、適合された多項式式の発見された係数を直接多項式関数メソッドに渡せるようになりました。「im_fx_curves
」を特別な「-c
」オプションで使用して、係数のコンマ区切りリストを生成できます...
たとえば、これらのカーブをテスト画像に適用してみましょう...
|
![]() |
画像の着色
画像の均一な色着色
通常、画像の着色は、画像に特定の量で色をブレンドすることによって実現されます。これは、評価演算子または画像のブレンドテクニックを使用して行うことができますが、これらは簡単ではありません。幸いなことに、「-colorize
」画像演算子を使用することにより、均一な色を画像にブレンドする簡単な方法が利用可能です。この演算子は、現在の「-fill
」色を、現在の画像シーケンスのすべての画像にブレンドします。元の画像のアルファチャンネルは保持され、色のチャンネルのみが変更されます。たとえば、画像(グレースケールまたはそれ以外)を明るくするには、「-colorize
」を使用して、ある程度の白を画像にブレンドし、画像を完全に飽和させることなく明るくします。同様に、「black
」塗りつぶし色を使用して画像を暗くすることができます。画像の両端を中間トーンに向かってグレーにするには、特定の中間のグレーの塗りつぶし色を使用します。色「gray50
」は、RGBカラースペクトルの正確な中間色です。これは、反転レベル調整演算子が提供するもののように、「コントラストの低下」の方法としてもよく使用されますが、制御性は劣ります。「-colorize
」演算子では、3つのカラーチャンネルごとに個別にディゾルブパーセントを指定することもできます。これは、特別な方法で画像を線形に暗くする(または明るくする)のに役立ちます。![]() ![]() |
IM v6.7.9より前では、「-colorize 」演算子はアルファチャンネルをまったく変更しませんでした。上記の例のように、このバージョン以降は、完全に透明なピクセルを含め、すべてのピクセルを均一に着色するようになりました。 |
「-colorize 」演算子の一般的な用途の1つは、既存の画像内のすべての色を単純に置き換える(「100% 」着色)ことですが、透明度(アルファ)画像の形状を保持し、色の付いたマスクを生成することです。ただし、IM v6.7.9以降では、アルファチャンネルを無効にしてから再度有効にすることで、この演算子からアルファチャンネルを保護する必要があります。(詳細については、アルファを有効にするを参照してください)。例えば...
|
![]() |
この保護がないと、colorizeはキャンバスを完全に指定された色に塗りつぶしてしまいます...
|
![]() |
-alpha opaque
」または「-alpha off
」操作を含めて、結果の画像が期待どおりの完全に空白の画像になるようにすることをお勧めします。単一の色ではなく色の範囲でレベル調整(色別)演算子を使用すると、キャンバスをより高速に空白にできることに注意してください。空白のキャンバスも参照してください。中間色のカラーティント
「Colorize演算子」は、画像のすべての色に対して「-fill
」の色を線形に適用して色合いを付けるのに対し、「-tint
」演算子は、「-fill
」の色を、画像の中間色の部分のみに色合いを付けるように適用します。この演算子はグレースケール演算子であり、色は指定されたパーセンテージ(0〜200)によって調整または強調されます。効果を制限するために、数学的な公式を使用して調整され、黒と白には影響を与えず、各カラーチャネルの中間色に最大の効果を与えるようにします。「-tint 100
」は、基本的に完全なグレーの色を、塗りつぶし色の半分の強度になるように色合いを付けます。値が低いほど暗い色に色合いが付き、値が高いほどその色に完全に一致する方向に色合いが付きます。テスト画像の緑色は、真のRGB緑ではなく、縮尺ベクターグラフィックスの「green
」であり、真の緑色の半分の明るさしかありません。そのため、中間色でもあり、「-tint
」演算子の影響を受けて暗くなります。テスト画像の赤と青の色のスポットとは異なります。また、コンマ区切りのパーセンテージリストを使用して、個々のカラーコンポーネントに色合いを付けることもできます。たとえば、「-tint 30,40,20,10
」です。ただし、これは使用が難しい場合があり、適切に設定するには実験が必要になる場合があります。完全な50%のグレーに使用したい色を指定する方が良いでしょう。![]() ![]() |
![]() -tint 」演算子は、与えられた色とパーセンテージを取得し、次の公式に従って画像の個々の色を「-fill 」色の強度に応じて調整します。(右のグラフを参照)f(x)=(1-(4.0*((x-0.5)*(x-0.5))))
または、このような処理をDIYで実行するために使用できる下位レベルの演算子については、「FX演算子」と「EvaluateおよびFunction演算子」を参照してください。 |
-shade
」の出力結果を調整するのに最適です(「陰影オーバーレイハイライト画像」を参照)。例については「3Dブレット画像」を参照してください。「-tint
」を使用して、画像の中間色を明るくしたり暗くしたりすることもできます。これは、画像の「ガンマ調整」のようなものですが、正確にはそうではありません。たとえば、「white
」色で100より大きい色合いの値を使用すると、中間色が明るくなります。100未満の値は色を暗くします。
![]() ![]() |
現時点では、純粋な中間トーンのグレーの色は「-fill 」の色にマッピングされません。パーセント引数は「ブレンドパーセント」ではなく、実際には「明るさパーセント」のようなものです。たとえば、「黒」の塗りつぶし色ではまったく機能しません。 なぜこのように設計されたのか、その背景についてはわかりません。ただし、グレースケール画像に色合いを付ける際に、最終的な色を正確に制御することは非常に厄介です。 以下の「オーバーレイ合成による色合い付け」を使用すると、中間グレーの色をより正確に(放物線状ではなく、非常に線形に)色合い付けできます。 |
セピア色
特別な写真の再着色テクニックである「-sepia-tone
」は、基本的には画像をグレースケールに変換し、すべての中間色を特別な茶色に着色することで構成されます。
|
![]() |
Goldenrod
」の色に似ています。この最も一般的な用途は、「デュオトーン効果」を生成し、「古く見える」写真を生成することです(「セピアトーン」に関するウィキペディアを参照)。たとえば、ここでは、コントラストが強調されたグレースケールのバラの画像を、さまざまな色を使用して色合いを付け、同様のセピアトーンのような効果を実現します。使用する色は、探している正確な効果によって異なります。
|
![[IM Output]](rose_grey.jpg)

![[IM Output]](sepia_goldenrod.jpg)
![[IM Output]](sepia_gold.jpg)
![[IM Output]](sepia_khaki.jpg)
![[IM Output]](sepia_wheat.jpg)
|
![]() |
デュオトーン効果
「デュオトーン」は、限られた予算または印刷装置でより良い結果を出すために、画像(黒インク)のグレースケールを他の色と混ぜる印刷方法です。たとえば、今日見られる古い写真がすべてセピアトーンに見えるのは、セピアトーンインクが生き残り、劣化したり、時間とともに色あせたりしなかったためです。他の「白黒」画像形式は、役に立たなくなりました。「セピアトーン演算子」を参照してください。また、「シアンタイプ」(一般に「青写真」として知られています)として知られる別のデュオトーン技術は、元の白黒の建築図面の大型コピーを作成する方法として広く使用されるようになりました。この技術は、レーザーと写真コピー(およびゼロックス)の発明よりずっと前に使用されていたことを覚えておいてください。詳細については、ウィキペディアの「デュオトーン」のエントリと「偽のデュオトーン対実際のデュオトーン」を参照してください。上記の色合い演算子は、上記のようなセピアトーンのような効果と同様に、デュオトーン効果の妥当なファクシミリを生成します。
|
![[IM Output]](rose_grey.jpg)

![[IM Output]](duotone_blue.jpg)
![[IM Output]](duotone_darkcyan.jpg)
![[IM Output]](duotone_goldenrod.jpg)
![[IM Output]](duotone_firebrick.jpg)
Black
」、「Chocolate
」、および「LemonChiffon
」を使用して、非常に珍しいデュオトーンを作成する簡単な例です。そして、黒点の色は通常黒のままです。これが、通常デュオトーンと呼ばれる理由です。
magick -size 1x1 xc:Black xc:Chocolate xc:LemonChiffon \ +append duotone_clut.gif magick -size 20x256 gradient: -rotate 90 duotone_clut.gif \ -interpolate Bicubic -clut duotone_gradient.gif magick rose_grey.jpg duotone_clut.gif \ -interpolate Bicubic -clut rose_duotone.jpg |
![[IM Output]](duotone_clut.gif)

![[IM Output]](duotone_gradient.gif)
![[IM Output]](rose_grey.jpg)

![[IM Output]](duotone_clut.gif)

![[IM Output]](rose_duotone.jpg)
カラーティント、DIY
「-tint
」の最大の問題の1つは、グレースケール(またはベクトル)演算子であることです。つまり、赤、緑、青の各チャネルを互いに完全に別々に処理します。つまり、すべてのグレースケールレベルに影響があるにもかかわらず、「-tint
」によって「blue
」や「yellow
」のような原色と二次色は影響を受けません。ただし、「FX演算子」や高速な「EvaluateおよびFunction演算子」などのさまざまなチャネル数学変換のおかげで、独自のカラーオーバーレイを生成して画像を修正できます。つまり、「Colorize演算子」が行うのと同様の方法で画像を色合いを付けることができます。たとえば、ここでは、画像グレースケールの明るさレベルを、特定の目的の色の半透明オーバーレイにマジックします。
|
![]() |
black
」を含む任意の色を使用できることに注意してください。色はベクトル加算としてではなく、アルファ合成として扱われるためです。結果は、通常の色合いで得られるものとまったく同じではありません。カラーティントオーバーレイ
特殊なアルファ合成メソッドである「オーバーレイ
」および「ハードライト
」は、実際には色(およびパターン)の色合い付けを念頭に置いて設計されました。これらの合成メソッドは、中間トーンのグレーを置き換え、画像内の黒と白のハイライトのみを残します。たとえば、ここでは、着色されたオーバーレイ画像をすばやく生成し、それを合成して元の画像に色合いを付けます。
|
![]() |
|
![]() |
オーバーレイ
」の使用は、上記で使用されている二次関数よりもはるかに線形な色合い付けの形式であり、「-tint
」と同様に、画像の各チャネルに個別に適用されるため、原色と二次色も変更されません。また、このアルファ合成メソッドでは調整制御が提供されないため、色合いのレベルを制御する場合は、色合いを適用する前にオーバーレイ画像の透明度を調整する必要があります。もちろん、これまで示してきた他の色合い付け方法とは異なり、単色に色合いを付けることに限定されず、画像やタイルのパターンを使用して色合いを適用できます。
|
![]() |
![]() ![]() |
アルファ合成メソッド「ハードライト 」は、「オーバーレイ 」と同じ結果を生成しますが、ソース画像とターゲット画像が入れ替わります。これは、最後のいくつかの例の「 +swap 」の代わりに使用できた可能性があります。 |
グローバルカラーモディファイア
輝度、彩度、色相の変更
「-modulate
」演算子は、特殊なHSL(色相-彩度-明度)色空間で画像を修正するという点で特別です。画像内の各色のピクセルをこの色空間に変換して修正し、元の色空間に戻します。3つの値(後続の値はオプション)をパーセンテージとして受け取り、100の場合は画像に変化を与えません。例:
|
![]() |
magick rose: -modulate 0 mod_bright_0.gif magick rose: -modulate 50 mod_bright_50.gif magick rose: -modulate 80 mod_bright_80.gif magick rose: -modulate 100 mod_bright_100.gif magick rose: -modulate 150 mod_bright_150.gif magick rose: -modulate 200 mod_bright_200.gif |
![[IM Output]](mod_bright_0.gif)
![[IM Output]](mod_bright_50.gif)
![[IM Output]](mod_bright_80.gif)
![[IM Output]](mod_bright_100.gif)
![[IM Output]](mod_bright_150.gif)
![[IM Output]](mod_bright_200.gif)
0
」の明るさ引数では純粋な黒い画像が生成されますが、この演算子だけでは純粋な白い画像を生成することはできないことに注意してください。2番目の値saturationは、画像に存在する色の全体的な量を調整する乗数でもあります。
magick rose: -modulate 100,0 mod_sat_0.gif magick rose: -modulate 100,20 mod_sat_20.gif magick rose: -modulate 100,70 mod_sat_70.gif magick rose: -modulate 100,100 mod_sat_100.gif magick rose: -modulate 100,150 mod_sat_150.gif magick rose: -modulate 100,200 mod_sat_200.gif |
![[IM Output]](mod_sat_0.gif)
![[IM Output]](mod_sat_20.gif)
![[IM Output]](mod_sat_70.gif)
![[IM Output]](mod_sat_100.gif)
![[IM Output]](mod_sat_150.gif)
![[IM Output]](mod_sat_200.gif)
0
' の彩度を指定すると、上記の「色をグレースケールに変換」で示したように、グレースケール画像が生成されます。ただし、グレーはHSLカラースペースで定義されているように、3つのカラーチャネルを均等に混合するため、真の「輝度」グレースケールを生成しません。基本的に、小さな値はより「パステル」な色を生成し、「100
」よりも大きい値は、より漫画のようなカラフルな画像を生成します。明るさと彩度はパーセント乗数であるため、ほぼすべての画像カラー値を最大値付近に変更するには、非常に大きな数を掛ける必要があることに注意してください。つまり、純粋な黒を除くすべての色を白にするには、100万に近い明るさ係数を使用する必要があります。色相モジュレーション
最後の値、色相は実際にははるかに便利です。これは、画像のカラーを循環的に回転させます。これを実現するために、指定された色相値は、乗算ではなく「モジュラス加算」を生成します。ただし、色相は角度ではなく、パーセントを使用して回転することに注意してください。これは奇妙に思えるかもしれませんが、「-modulate
」は常にそのように機能していました。角度とモジュレート引数の間の変換式は次のとおりです...色相角度 = ( モジュレート引数 - 100 ) * 180/100
モジュレート引数 = ( 色相角度 * 100/180 ) + 100
100
」(3つの引数すべてに対して)は変更を加えません。一方、「0
」または「200
」の値は、画像のカラーを(輝度ではなく)事実上反転させます。例えば...
magick rose: -modulate 100,100,0 mod_hue_0.gif magick rose: -modulate 100,100,33.3 mod_hue_33.gif magick rose: -modulate 100,100,66.6 mod_hue_66.gif magick rose: -modulate 100,100,100 mod_hue_100.gif magick rose: -modulate 100,100,133.3 mod_hue_133.gif magick rose: -modulate 100,100,166.6 mod_hue_166.gif magick rose: -modulate 100,100,200 mod_hue_200.gif |
![]() 0 (赤 <-> シアン) |
![]() 33.3 (赤 -> 青) |
![]() 66.6 |
![]() 100% 無操作 |
![]() 133.3 |
![]() 166.6 (赤 -> 緑) |
![]() 200 (0と同じ) |
33.3
」の値は、すべてのカラーを約60度、負または反時計回りに回転させ、赤を青に、青を緑に、緑を赤に効果的にマッピングします。「0
」または「200
」の値を使用すると、画像の輝度を否定することなく、カラーの完全な180度の反転が生成されます。色相は循環的であるため、「300
」の値を使用すると、360度のカラー回転が生成され、画像に変更は加えられないことに注意してください。「色相モジュレーション」を使用して画像のカラーを変更する例については、「クロマキーマスク」および「マップ内のピン」を参照してください。これらの種類の操作は、高度なカラースペース技術(リカラーマトリックス演算子(下記)での使用など)を使用して適用することもできますが、画像の基本的な「モジュレーション」には、この演算子が大幅に簡略化されます。原色のスワップには、リカラーマトリックス演算子、またはチャネルスワップ(「分離/結合演算子」を参照)のどちらかが、おそらくより正確な手法です。ただし、汎用性ははるかに低くなります。特に色相の変化について、後で再利用するためにカラー変更のバリエーションを保存する方法については、「ハルドカラー参照テーブル」も参照してください。
DIY による変更
本当に「自分でやる」こともできます。基本的には、画像を適切なカラースペースにマジック変換し、値を変更して、マジック変換を元に戻します。HSL カラースペースでは、緑のチャネルが彩度値を保持し、青のチャネルが輝度値を保持していることを覚えておいてください。たとえば、「-modulate 80,120
」(少し暗くし、彩度を上げる)に相当する、デフォルトのHSLカラースペースを使用した例を次に示します...
magick rose: -colorspace HSL \ -channel B -evaluate multiply 0.80 \ -channel G -evaluate multiply 1.20 \ +channel -colorspace sRGB modulate_channel.png |
![[IM Output]](../images/rose.png)

![[IM Output]](modulate_channel.png)
他のカラースペースでの変更
「-modulate
」の最大の問題は、多くの「ほぼ白」の色を含む画像を処理する場合です。これは、HSLカラースペースで機能するため、オフホワイトの色は、明るさが低下するにつれてより「飽和」になります。上記バラの画像の白い葉でこれを確認できます。50%暗くすると、多くのカラーアーティファクトが表示されます。これは、JPEG画像形式を扱う場合に特に問題になります。JPEG画像形式は、非可逆圧縮アルゴリズムが原因で、オフホワイトの色(実際にはすべての色がJPEGでわずかにオフになっています)を生成する傾向があるためです。例えば...ここでの問題は、HSLではすべてのオフホワイトの色が、使用されているカラースペースの小さな「ホワイトポイント」領域(二重円錐)にパックされていることです。明るさが低下すると、色の円錐が拡大するにつれて、オフホワイトの色が拡張され、オフホワイトの色がよりカラフルな(彩度の高い)オフホワイト色のセットを生成します。つまり、色の小さな変化が誇張されます。この解決策は、HSLカラースペースの代わりに、HSBカラースペースで「-modulate
」を使用することです。![]() ![]() |
HSBの「B」は輝度を意味しますが、「V」は値を意味するHSVとしても一般的に知られています。これらは同じカラースペースですが、値は通常「格納された数値」を意味するため、「V」は紛らわしい用語です。 HSIカラースペース(輝度の「I」を使用)もありますが、一般的ではなく、HCL(「L」は輝度を意味します)サイクリックカラースペース(下記参照)が追加されたため、必要ありません。 |
modulate:colorspace
」の操作制御を定義できます。これは、「色相」カラースペースの1つです。
|
![]() |
magick rose: -modulate 150 mod_bright_HSL.gif magick rose: -define modulate:colorspace=HSB \ -modulate 150 mod_bright_HSB.gif |
![]() HSL |
![]() HSB |
![]() ![]() |
IM v6.4.0-10より前の「-modulate 」演算子は、実際にはHSLカラースペースではなく、HSBカラースペースを使用していました。これは、上記のような状況に関するユーザーからのバグレポートのために変更されました。ポイントは、一部の画像ではHSLを使用すると困り、他の画像ではHSBカラースペースを使用すると困るということです。これは、何をしようとしているかによって異なります。 |
LCHabおよびその他のカラースペースでのモジュレート
色相モジュレーション(HSLまたはHSBカラースペース)は、実際にはかなり粗雑と見なされています。これらのカラースペースは、より現実的な色の強度を考慮に入れていません。したがって、「青」と「黄」の色相を回転させると、明るさも大きくシフトします。「Wikipedia:HSLカラースペースの欠点」を参照してください。1つの代替案は、「Grafica Obscura」の「マトリックス操作」論文で説明されているように、輝度を維持した回転を行うことです。これは、カラー変更が操作の一部として実行されており、必要な回転量に応じて異なる単一の計算されたマトリックス操作として実行されているため、複雑です。IM v6.8.4-7以降では、モジュレート演算子は、特別なカラースペース「LCHab
」および「LCHuv
」も処理できるようになりました。これらは、それぞれの「Luv
」および「Lab
」カラースペースの円筒形(色相-彩度)です。詳細については、「Wikipedia:円筒LUVまたはLCHuvカラースペース」および「HCLカラースペース」を参照してください。![]() ![]() |
「LCHab 」および「LCHuv 」カラースペースの同等のチャネルは、「HCL 」および「HCB 」カラースペースのチャネルとは逆です。つまり、「グレースケール」強度相当は、画像の最初の(「赤」)チャネルにあり、色相は3番目の(「青」)チャネルにあります。 |
LCHab
」カラースペースを使用して、赤いバラの色相を回転させてみます。上記の「HSL
」カラースペースの以前のセットと比較してください。
|
![]() 0% & 200% |
![]() 25% (赤->青) |
![]() 50% |
![]() 75% |
![]() 100% 無操作 |
![]() 125% |
![]() 150% |
![]() 175% |
LCHab
」と通常の「HSL
」カラースペース(適切な回転パーセントを使用)での赤から青への単純な色相回転の比較です。青はそれほど暗くなく、元の画像の陰影によく一致する陰影であることに注意してください。HCLカラースペースの色相の詳細については、「LCHカラーホイール」の例を参照してください。![]() ![]() |
IM v6.8.4-7より前は、カラースペース「HCL 」(IM v6.7.9-1で導入)を使用していたでしょう。このカラースペースは「LCHuv 」とまったく同じですが、チャネルの順序が逆になっています(画像で赤チャネルに保存されている色相は、そのカラースペースが定義された方法にすぎません)。つまり、モジュレート演算子が正しく機能するには、さまざまなチャネルを入れ替える必要がありました。「 LCHab 」および「LCHuv 」カラースペースは、「HSL 」と同じ方法でチャネルを順序付けて、モジュレートがチャネルの再配置を必要とせずに、カラースペースで正しく、直接機能できるようにします。 |
![]() ![]() |
非常に暗い色の場合、「LCHuv 」は不連続なカラー値を生成する可能性があることに注意してください。ただし、これは実際の画像ではなく、円筒形空間で直接生成された画像でのみ発生するはずです。 |
カラーマトリックス演算子
「-color-matrix
」演算子は、マトリックス手法を使用して画像をリカラーします。つまり、画像に新しいカラー値を生成するために、画像のさまざまなカラーチャネル値を線形に混合する方法を表す値のマトリックスを指定します。一般的な使用法は、3つの関数(行)または3つの乗数(列)を形成する9つの値を演算子に提供することです。したがって、最初の3つの数値は、赤チャネルのカラー式です。次は「緑」の式などです。例えば...
|
![]() |
赤' |
= 1 * 赤 + 0 * 緑 + 0 * 青 |
緑' |
= 0 * 赤 + 1 * 緑 + 0 * 青 |
青' |
= 0 * 赤 + 0 * 緑 + 1 * 青 |
|
![]() |
|
![]() |
|
![]() |
最大6行6列の行列を使用できます。これらは、チャネルの「
Red
」、「Green
」、「Blue
」、「Black
」(設定されている場合)、「Alpha
」(設定されている場合)、および定数に対応します。「Black
」と「Alpha
」のチャネルは、たとえ値自体が存在しないか使用されない場合でも、行列がその大きさである場合は、やはり提供する必要があります。最後の定数列は、式への単純な加算(負の場合は減算)です。6行目(指定されている場合)は単に無視され、使用されません。デフォルトでは、「matrix」定義はユーザー定義のモルフォロジー/畳み込みカーネルと同じ構造に従い、サイズジオメトリが指定されていない場合は「正方形」カーネルとして扱われます。カーネルのオフセットは現在使用されていません。与えられた「値の配列」は、画像に適用される前に、より大きな「6x6の単位行列」(1の対角線)に重ねられます。この内部処理により、実際には、すべての行ではなく、少数の行の数値だけでmatrix値を単純化できます。これは、カラー計算に「定数」を含める必要がある場合、または1つのチャネルのみを変更したい場合に特に役立ちます。たとえば、画像を反転(ネゲート)します。
|
![]() |
|
![]() |
![]() ![]() |
IM v6.6.1-0より前では、「-color-matrix 」は「-recolor 」という名前でした。 |
カラー行列の例
セピア色、または少なくともその操作の線形形式
|
![]() |
|
![]() |
|
![]() |
Grafica ObscuraのWebページで説明されているように。
カラー行列の使用に関する詳細については、以下を参照してください...
- カラーマトリックスフィルター Adobe Flashチュートリアル
- 色の変換とカラーマトリックス
- カラーマトリックス Unleashed
- Grafica Obscura - 画像処理のための行列演算
- SWFカラーマトリックスフィルター(輝度保持付きの色相回転用)
ソラライズカラー
画像を「-solarize
」するということは、基本的には最も明るい色を黒く「焼き付ける」ことです。色が明るいほど、ソーラー化した色は暗くなります。これは、化学フィルムが過度に露出した場合に写真で発生します。
|
![]() |
0%
」の引数を与えると、基本的には貧弱なネゲート演算子になります。たとえば、ここに「-solarize
」を、「-fx
」の数式を使用して偽造したものを以下に示します。
|
![]() |
magick -size 10x300 gradient: -rotate 90 \ -sigmoidal-contrast 50x70% fuzzy_thres.png magick fuzzy_thres.png -solarize 50% fuzzy_spike.png magick fuzzy_spike.png -level 0,50% filament.png |
![[IM Output]](fuzzy_thres_pf.gif)

![[IM Output]](fuzzy_spike_pf.gif)

![[IM Output]](filament_pf.gif)
im_profile
」、Scriptsディレクトリを使用して生成されました。白のものが黒になり、中央のスパイク周辺の中間トーンのグレーがどのように保持されるかに注意してください。スパイクのファジーさと配置は、「-sigmoidal-contrast
」演算子によって決定されます。通常、結果は発光する電気フィラメントや落雷のように見えるため、私はそれを「フィラメント」と呼んでいます。この効果の別の例については、ランダムフラックスを参照してください。この中間トーンのグレーの抽出は、ビットマップ形状からのエッジアウトラインの生成や、2つのバイアスグラデーションの乗算の技術にも役立ちます。この操作のもう1つの新しい使い方は、画像が基本的にシェーディングされたグレースケールまたはカラー画像ではなく、純粋な白黒スケッチまたは描画(書籍など)であるかどうかを判断することです。 画像が純粋な白黒かグレースケールかを判断するを参照してください。ルックアップテーブルを使用した画像のリカラー
上記のようにさまざまなヒストグラムカラー調整を使用して画像をリカラーできますが、事前に準備されたカラーグラデーションまたは「カラールックアップテーブル」(Color LUTまたはCLUT)から変更された値を「ルックアップ」するだけで画像をリカラーする別の手法があります。カラーLUTには2つのタイプがあります。単純な1次元または「チャネルごとの」LUTと3DカラーLUTです。チャネルLUTには、R、G、Bチャネルごとに1つずつ、3つの独立したルックアップテーブルがあります。チャネルLUTの各エントリは、入力チャネル値を対応する出力チャネル値にマッピングします。出力画像の赤チャネルは、入力画像の元の赤の値によってのみ影響を受けます。ただし、3DカラーLUTを使用すると、入力カラー全体を関数として置き換えることができます。つまり、赤チャネルの出力値は、入力の赤、緑、および青の値のいずれかまたはすべてに依存する可能性があります。これは、チャネルクロストークと呼ばれることがあります。カラー(チャネル)ルックアップテーブル
画像処理ツールの一般的な要件は、事前に準備されたカラーテーブルから色の範囲全体を置き換える機能です。これにより、1セットの色(通常はグレースケール)の画像を、特別な画像から代替色をルックアップするだけで、まったく異なる色のセットに変換できます。もちろん、代替色を読み取るための「ルックアップテーブル」画像が必要です。これらの最初のいくつかの例では、IMの「gradient:
」ジェネレーターを使用して「カラールックアップテーブル」の生成を簡略化できるように、LUTに色の垂直グラデーションを使用することを選択しました。理論はこれくらいにしておきます。それでは、シンプルなグレースケールプラズマ画像をリカラーし、グレースケールを濃い青からオフホワイトのグラデーションのカラーに置き換えてみましょう。
|
![[IM Output]](gray_image.jpg)

![[IM Output]](gradient_ice-sea.png)

![[IM Output]](gray_recolored.jpg)
-clut
」演算子は2つの画像を取得します。1つ目は色値を置き換える画像で、2つ目は単一の行または単一の列のいずれかのグラデーション画像です。![]() ![]() |
「-clut 」演算子はIM v6.3.5-8で追加されました。 |
-clut
」演算子を理解できない場合、または2次元のカラールックアップテーブルのような通常とは異なることを実行したい場合は、一般的なDIY演算子、FXを使用して独自にロールできます。たとえば、上記と同等の遅いコマンドを次に示します。
|
![]() |
-fx
」演算子が非常に遅く、行LUTまたは列LUTのいずれかに対して特別に設計する必要があることです。しかし、それは機能します。LUTは非常に大きくする必要はありません。たとえば、ここでは、非常に限られた数の色を持つ非常に小さなLUTを使用します。
magick -size 1x6 gradient:navy-snow gradient_levels.png magick gray_image.jpg gradient_levels.png -clut gray_levels.jpg |
![[IM Output]](gray_image.jpg)

![[IM Output]](gradient_levels_mag.png)

![[IM Output]](gray_levels.jpg)
Bilinear
」設定を使用しました。非常に小さなカラーLUTを使用する場合、さまざまな「-interpolate
」設定により、LUTカラーのさまざまなレベルのスムージングが生成されます。たとえば、ここでは、LUTカラーのさまざまなタイプの補間スムージングを示します。
magick gray_image.jpg gradient_levels.png \ -interpolate Integer -clut gray_levels_integer.jpg magick gray_image.jpg gradient_levels.png \ -interpolate NearestNeighbor -clut gray_levels_nearest.jpg magick gray_image.jpg gradient_levels.png \ -interpolate Average -clut gray_levels_average.jpg magick gray_image.jpg gradient_levels.png \ -interpolate Blend -clut gray_levels_blend.jpg magick gray_image.jpg gradient_levels.png \ -interpolate BiLinear -clut gray_levels_bilinear.jpg magick gray_image.jpg gradient_levels.png \ -interpolate Catrom -clut gray_levels_catrom.jpg magick gray_image.jpg gradient_levels.png \ -interpolate Spline -clut gray_levels_spline.jpg |
![]() 整数 |
![]() 最近傍 |
![]() 平均 |
![]() ブレンド |
![]() バイリニア |
![]() キャットロム |
![]() スプライン |
Integer
」と「Nearest
」の設定は、色を全く滑らかにしないという点で特別です。つまり、新しい「混合色」は追加されず、存在する正確な色値のみがグレースケール画像の着色に使用されます。ただし、2つの間での色のルックアップ方法の違いに注目してください。これは微妙な違いですが、非常に重要になる可能性があります。「Average
」設定は、色の帯も生成しますが、色の混合のみを使用するため、カラー参照テーブル画像のサイズよりも色が1つ少なくなります。一方、「Blend
」は、「Average
」と「Nearest
」を混合して、より多くのピクセルを追加します。このタイプの色の「バンディング」(またはブロッキングアーティファクト)は、地理的な地図や温度グラフでは実際によく見られます。これは、地図の正確な形状をより適切に表現できるためです。シャープな境界線は等値線と呼ばれます。最終画像にわずか1ピクセルのぼかしを追加すると、色バンディングを損なうことなく、エッジの見栄えが少し滑らかになり、向上させることができます。「BiLinear
」設定もバンディングを生成しますが、色が急激に変化するとき(この例ではそうではありません)、急激なグラデーションの変化の形でしか生成しません。一方、「Catrom
」は色の変化を滑らかにします。最後に、「Spline
」は色をぼかし、指定されたCLUTの色をまったく生成しない可能性があります。補間問題を回避したり、色のグラデーションをより適切に定義したりするには、より長いLUTを使用するのが最善の方法です。理想的には、これは可能な強度の値の全範囲をカバーする必要があります。ImageMagick Q16(16ビット品質でコンパイル)の場合、LUTの高さは65536ピクセルである必要があります。ただし、ピクセル補間を使用すると、ほとんどの画像再着色タスクに適した、より妥当な500ピクセルのLUTグラデーション画像を使用できます。上記の例で使用されている垂直グラデーションLUTは、黒または「0
」インデックスが画像の上部にあるため、私たちの目には逆さまに見えることに注意してください。通常、私たち人間は(進化の歴史のおかげで)黒レベルが下部にあるグラデーションを見ることを好みます。グラデーション画像を「正しい向き」で保存する場合は、読み込むときに画像を「-flip
」することができます。たとえば、より複雑なLUTを試してみて、画像で使用する前に垂直グラデーションを反転してみましょう。
magick -size 1x33 gradient:wheat-brown gradient:Brown-LawnGreen \ gradient:DodgerBlue-Navy -append gradient_planet.png magick gray_image.jpg \ \( gradient_planet.png -flip \) -clut gray_planet.jpg |
![[IM Output]](gray_image.jpg)

![[IM Output]](gradient_planet.png)

![[IM Output]](gray_planet.jpg)
カラーLUT変換への関数
これらの事前に準備された「ルックアップテーブル画像」(またはLUT)は、非常に複雑で時間がかかる「-fx
」操作の速度を大幅に向上させるためにも使用できます。これにより、IMがピクセルごとに3〜4回関数の文字列を解釈する代わりに、置換色のルックアップをはるかに高速に実行できます。この手順は非常に簡単です。関数を未修正の線形グラデーションに適用するか、関数内の「u
」を値「(i/w)
」または「(j/h)
」に置き換えて、位置に基づいて置換値を計算します。たとえば、高度な「アクア」エフェクトの例では、複雑な「-fx
」関数を使用して、シェード演算子のグレースケール出力を調整しました。また、このグレースケール調整は「ドジャーブルー」の形状にも重ねられているため、これらの両方の演算子の結果を単一のグラデーションルックアップテーブルに組み合わせることができない理由はありません。つまり、「-fx
」式とカラーオーバーレイからLUTを生成します。また、これらの例では、以前のように列ではなく、ピクセルの単一行を生成することにしました。
magick -size 1x512 gradient: -rotate 90 -alpha off \ -fx '3.5u^3 - 5.05u^2 + 2.05u + 0.3' \ -size 512x1 xc:DodgerBlue -compose Overlay -composite \ aqua_gradient.png |
![[IM Output]](aqua_gradient.png)
![]() ![]() |
上記の多項式「-fx 」は、多項式関数を使用して、より直接的かつ高速に生成できるようになりました。例えば
"-function Polynomial 3.5,-5.05,2.05,0.3" |
magick -font Candice -pointsize 72 -background None label:A \ -trim +repage aqua_mask.png magick aqua_mask.png -alpha Extract -blur 0x6 -shade 120x21 \ -alpha On -normalize aqua_shade.png magick aqua_shade.png aqua_gradient.png -clut aqua_font.png |
![[IM Output]](aqua_mask.png)

![[IM Output]](aqua_shade.png)

![[IM Output]](aqua_font.png)
警告:上記は不完全です(エッジが暗くなっていない)。
CLUT および透明度の処理
「-clut
」演算子は、「-channel
」設定によって制御されますが、実際には、画像内の個々のチャンネル値のみを置き換えます。つまり、通常、ソース画像の個々のチャンネルは、カラー参照テーブルからそのチャンネルの置換値を「ルックアップ」するために使用されます。これには通常非常に不便で、適用が難しいアルファチャンネルが含まれます。通常、「-clut
」演算子は、グレースケールのソース画像を着色する(前の例を参照)か、グレースケールのCLUT(カラー参照テーブル)を使用してカラー画像のヒストグラム調整を行うために使用されます。言い換えれば、通常、画像の1つは通常グレースケールになります。IM v6.4.9-8以降、「-channel
」設定で、画像のアルファチャンネルを置換/調整する場合(「A
」が存在する場合)、および「ソース」画像または「CLUT」画像にアルファチャンネルが定義されていない場合、IMはその画像をグレースケールであるとみなし、それに応じて動作します。たとえば、ここでは、単純なぼかし三角形をグレースケール画像として生成します。次に、透明度を含むカラー参照テーブルを使用して色付けすることができます。今回はCLUT画像を反転しなかったので、黒の置換は上部に、白の置換は下部になります。
magick -size 100x100 xc: -draw 'polygon 50,10 10,80 90,80' \ -blur 0x10 blurred_shape.jpg magick -size 1x5 xc:none \ -draw 'fill red point 0,2' \ -draw 'fill yellow rectangle 0,0 0,1' gradient_border.png magick blurred_shape.jpg -alpha off gradient_border.png \ -channel RGBA -interpolate integer -clut clut_shape.png |
![[IM Output]](blurred_shape.jpg)

![[IM Output]](gradient_border.png)

![[IM Output]](clut_shape.png)
-alpha off
」または「-alpha off
」を使用してオフにする)と、アルファチャンネル値もルックアップする必要があることを指定した場合(「-channel RGBA
」を使用)、期待どおりに機能することに注意してください。そして、ここに、透明度(およびアルファチャンネル)を持つ画像を、アルファチャンネルが有効になっていないグレースケールヒストグラム調整グラデーションを使用して調整する必要があるという、もう1つの特別なケースを示します。
magick -size 100x100 xc:none -draw 'polygon 50,10 10,80 90,80' \ tile_disks.jpg -compose In -composite shape_triangle.gif magick shape_triangle.gif -channel A -blur 0x10 +channel shape_blurred.png magick -size 1x50 gradient: xc:black -append -flip \ -sigmoidal-contrast 6x0% feather_histogram.jpg magick shape_blurred.png \( feather_histogram.jpg -alpha off \) \ -channel A -clut shape_feathered.png |
![[IM Output]](shape_triangle.gif)

![[IM Output]](shape_blurred.png)

![[IM Output]](feather_histogram.jpg)

![[IM Output]](shape_feathered.png)
-blur
」操作により、三角形を囲む完全に透明な領域が表示されるために発生します。完全に透明な場合は色が定義されていないため、IMはデフォルトで黒になります。CLUT画像自体は、50%未満の透明度のピクセルが完全に透明になるように設計されており、画像の以前の完全に透明な部分を実質的に再び透明にしています。この例では、最初の「ぼかし」を過度に行い、次にアルファチャンネルの調整を過度に修正します。その結果、三角形の点がひどく丸められます。通常の画像フェザリングでは、通常、「-blur
」と「-sigmoidal-contrast
」アルファ調整の両方に、はるかに小さい値を使用します。フレッド・ワインハウスは、使いやすくするために、彼の「feather」スクリプトにぼかしフェザリング技術を実装しました。Hald 3D カラー ルックアップ テーブル
IM v6.5.3-4以降、複数の画像のすべての色を直接置き換えるために使用できるフル3Dカラー参照テーブルを使用することもできます。つまり、各カラーチャンネルの値を別個のエンティティとしてルックアップするのではなく(上記のCLUTのように)、色全体を使用して新しい色をルックアップします。ただし、3Dカラーテーブルは通常、色の値の3D配列を正しく格納するために特別なファイル形式が必要です。ただし、色の値の特別な配置を使用することで、3DテーブルをHALDカラーLUTとして知られる2D画像に保存できます。これは単なる通常の画像であり、そのため、優れた画像ファイル形式を使用してHALD 3DカラーLUTを保存できます。HALD画像の詳細と例については、公式ウェブサイトHald Images, Clut Technologyを参照してください。HALD 3Dカラーテーブルを生成するには、「HALD:{レベル}
」画像ジェネレーターを使用します。たとえば、これは私が拡大した小さなもので、個々のピクセルを確認できます。この表は、一辺が '{level}2
' 色、または9色のカラーキューブを保持します。フルカラーキューブには '9 × 9 × 9
' 色、合計729色が含まれており、その数の平方根、つまり27x27ピクセルの画像に格納されています。色は、最初の9色(左上隅)が「純粋な黒」から「純粋な赤」へのグラデーションを形成するように格納されています。その後、9番目の色ごとに「緑」のグラデーションを形成し、81番目の色ごとに「青」のグラデーションを形成します。右下隅の最後の色は「純粋な白」です。画像を、3Dカラーキューブとして参照される、より単純な1Dピクセル配列として考えると、イメージしやすくなるでしょう。これは小さなHALD CLUT画像にすぎません。通常は、少なくともレベル8のHald(デフォルト)を使用します。これは、一辺あたり64色、または64^3 = 262144色のカラーキューブを保持し、512x512ピクセルのサイズの画像を生成し、約10KbyteのPNG画像に保存します。これはすべて8ビットの色ではありませんが、非常に優れています。すべての8ビットカラーを持つHALD画像の場合、4096x4096の画像を生成するレベル16バージョンが必要になります。これは、通常のデジタルカメラの画像でさえ、すべての可能な8ビットカラーを保持できないことを証明するだけです。ただし、IMはHALDから近隣の8色を補間して、ルックアップ置換の最終的な色を計算するため、より小さなHALD画像を使用できます。それは、より大きなバージョンほど優れた表現にはなりません。8よりも大きいHALD画像は推奨されず、それを保持するには少なくとも16ビット値深度の非常に大きな画像が必要になります。これらの生成されたHALD画像は「恒等」または「no-op」CLUT画像です。つまり、それらは3Dカラーキューブを形成する通常のカラー値であり、そのため画像を変更しません。たとえば、「-hald-clut
」演算子を使用して、「no-op」HALD画像を適用してみましょう。この画像は元の画像とまったく同じで、HALD画像には変更は含まれていません。ただし、手動で、または色の変更を使用してHALD画像を修正することにより、元の色を修正された色に置き換えることができます。たとえば、ここで、ブレンドされたセピアトーンのカラースキームを作成します...
magick hald_3.png \( +clone -sepia-tone 60% \) -evaluate-sequence mean hald_sepia.png magick rose.png hald_sepia.png -hald-clut rose_hald_sepia.png |
![[IM Output]](../images/rose.png)

![[IM Output]](hald_sepia.png)

![[IM Output]](rose_hald_sepia.png)
Gimp
」や「Photoshop
」のような画像エディターを使用して、または列挙ピクセルテキスト画像に保存されている場合は、プレーンテキストエディターを使用して、HALDの色を直接編集することさえできます!これは、特に非常に複雑な色の変更の場合に当てはまります。興味深いまたは役立つHALD CLUT画像をお持ちの場合は、メールでお送りください。ここで例を挙げます。あなたもクレジットされます! Hald CLUT の制限
CLUT演算子を使用した、より単純な1次元グラデーションルックアップとは異なり、HALD CLUTを使用して色を回転できます。たとえば、赤と青の色を入れ替えます。これは、はるかに用途の広いCLUTメソッドです。ただし、グレースケール画像に色を付けたり、色値のヒストグラム調整を行ったりするなどの単純な操作にはあまり適していません。また、HALD CLUT画像にそのような置き換え色を保存することにより、色を透明または半透明の値に置き換えることもできます。ただし、この置き換えルックアップは色のみに基づいています。特定の方法で透明な色を置き換えるために使用することはできません。結局のところ、4Dカラールックアップハイパーキューブではありません!Hald CLUT を使った色の置換
色値全体が色の置き換えを検索するために使用されるため、これを、画像内のすべての色を他の色で直接置き換える方法として使用することもできます。ただし、IMは現在HALDの線形補間ルックアップを実行しているため、3Dカラーキューブの近隣の8つのカラーセルすべてに置き換え色を設定する必要があります。

フルカラーマップの置換
将来:1つのカラーマップのすべての色を別のカラーマップの色で置き換えます。これを最適に実行する方法に関する提案、または一部の画像カラーマップ関数を実装するプログラマーを歓迎します。1つの方法は、シンボルによるディザリングで提示されたアイデアを使用することです。最もよく知られている解決策(ただし理想的とは言えません)は、現在、Fred Weinhausが「mapcolors
」スクリプトで提供しています。このスクリプトは、基本的に各色を一度に1つずつマッピングし、一方の画像から関与するピクセルを新しい初期ブランク画像にマスクします。もう1つのアイデアは、3次元色の置換をHALDカラーテーブルに何らかの方法でマッピングすることです。これにより、指定された色がマッピングされるだけでなく、指定された色間の色も論理的な方法で再マッピングされます。HALDジェネレーター募集中。

More color options yet to be looked at in detail... -contrast -brightness-contrast Color Cycling? -cycle shift colormap (for animations of fractals???) Chromaticity Color Points??? –white-point x,y –red-primary x,y –green-primary x,y –blue-primary x,y Thresholds (after negation) Specifically -white-threshold and -black-threshold