ImageMagick の例 --
キャンバスの作成
目次
キャンバスは、ImageMagick によって、描画を開始するための画像、透明な領域を持つ画像を重ねるための背景、または一般的な画像処理の一部として使用されます。単色でも、さまざまな色でも、または小さい画像のタイルでもかまいません。ここでは、さまざまなキャンバス画像を生成するために使用できるいくつかの方法について見ていきます。
既存の画像から単一のピクセルを取得し、目的のキャンバスサイズに拡大することもできます。 単一ピクセルのシンプルで高速なサイズ変更には "
"
これは ImageMagick バージョン 5 で推奨されていた方法です。
上記のすべての「単純な」方法に関する主な不満は、どれも画像を現在の "
上記では、'
この最後の方法は、元の画像のサイズと比較して、画像キャンバスをわずかに拡大できるという追加の利点があります。
上記のすべての方法は、完全に不透明な色を使用して塗りつぶすだけでなく、半透明の色も使用できます。 ただし、事前に透明度チャンネルを持つ画像があることを確認することをお勧めします。
また、透明度を使用して "
次の例では、画像を白紙化するときに、組み込みのバラの画像 (左に表示) からさまざまなピクセルから色を選択します。 最も明白な (ただし遅い) 方法は、"
ただし、これはピクセルを一度だけ選択することで高速化できます。 これは、fx 式を スパースカラー の引数として使用することで実行できます。 シンプルに見えないかもしれませんが、はるかに高速です。
もう1つのより複雑な方法は、その1つのピクセルを切り抜き、既にメモリ内にある画像を使用したタイリングで後で詳細に説明するように、画像全体にタイル化することです。
-level"演算子に、'黒'と'白'の両方の点に対して同じ引数を指定すると、同じ効果が得られます。
-fx"演算子を使用すると、すべてのピクセルをゼロにクリアすることで、より明確に黒いキャンバスを作成できます。ただし、完全に不透明にするためにアルファチャンネルをリセットする必要もあります。
-evaluate"のこのバージョンは、特に大きな画像で高速になるはずです。
-gamma"演算子を誤用して、画像をすべて黒にすることもできます。
アルファ演算子
-level"演算子に、'黒'と'白'の両方の点に対して同じ引数を指定すると、同じ効果が得られます。
-fx"演算子を使用して、直接ピクセル値を設定できます。
-evaluate"のこのバージョンは、特に大きな画像で高速になるはずです。
アルファ演算子
ただし、これはごく最近の追加機能であるため、まだ広く利用可能ではない可能性があります。
'Clear'アルファ合成演算子と、オーバーレイ画像(この場合は単一ピクセルの"
-fill"カラー設定を使用します。この場合、完全に透明にします。
-fx"演算子を使用して、より直接的に行うこともできます。
-evaluate"のこのバージョンは、特に大きな画像で高速になるはずです。
-threshold"を使用しますが、その効果を透明度チャンネルのみに制限します。
実際には、この場合、数学的に「マット」チャンネルを扱っており、"-fx"演算子で行ったように、ゼロではなく最大値に設定するためにしきい値を使用しています。これが、上記の例で
前述したように、繰り返す価値がありますが、上記の多くの方法は、画像にすでにアルファチャンネルがあることを前提としています。そうでない場合は、"
ご覧のとおり、デフォルトでは「
単一の色が指定された場合、2番目の色は「
グラデーションは生成された画像の中央に配置され、画像のXサイズまたはYサイズの大きい方に合わせて直径が設定されていることに注意してください。したがって、画像のサイズが正方形でない場合は、「クリップされた」放射状グラデーションになります。
グラデーション自体の色は、はるかに古い線形「
このタイプのグラデーションは、特に写真を重ねるのに適しており、重なり合う領域の開始時の急激なグラデーションの変化を解消します。
さらに、線形グラデーションの中央に滑らかな放物線状のピークを作成することもできます。
または、帯状または波紋パターン...
これらの密接に関連する両方の演算子を使用すると、サインカーブ、多項式、対数、およびべき乗の数学関数に基づいて、画像とグラデーションを変更できます。詳細については、数学関数の評価および関数、複数引数の評価を参照してください。
IM v6.3.5以降、SRT歪みを使用することで、回転したグラデーションをより高速かつ簡単に生成する方法ができました。たとえば、100x100ピクセルの画像で、60度回転した100ピクセルのグラデーションを次に示します。
これは、リクエストされたグラデーションで画像全体が確実にカバーされるように、デフォルトの仮想ピクセル、エッジ設定を使用します。また、エキスパートの歪みビューポート設定を使用して、写真を重ねるなどの用途で、より大きな画像にグラデーションをマッピングすることもできます。
または、汎用歪み演算子を使用して、グラデーションを弧と円にラップします...
ただし、新しい「
上記の「
最後の2つの画像は、サイズを除いて非常によく似ているように見えるかもしれませんが、中央のピクセルの処理がわずかに異なります。よく見ると、最後の例には完璧なグレーの中央ピクセルがありますが、前の例には単一の中央ピクセルではなく、4つの中央ピクセルがあることがわかります。画像の最終的なサイズは、目的の「
デフォルトでは歪みによって結果の画像の周りに1ピクセルのアンチエイリアシングバッファが追加されるため、値「
円形の形状とグラデーションをワーピングして、興味深い非線形グラデーションを作成できます。たとえば、波形歪みを使用して円弧状にすると、ほぼ三角形のグラデーションを作成できます。
あるいは、円形の上端に沿って極座標歪みを適用することで生成される、非常に奇妙な鳥のような形も可能です。
斜め方向にすることも可能です。
または、チャンネルコピーや数学的ブレンド合成方法を使用して、2つの単色グラデーションをブレンドすることにより、カラフルな2次元カラーマップグラデーションを生成できます。
最初に、彩度の高い色('
結果は実際には前の方法とまったく同じですが、目的の色空間に適した値を生成し、それらの値が属する色空間を設定するという点で、少しだけ直接的です。ここでは、マスクされた角度グラデーション(上記を参照)を取得し、HSB色空間に再マッピングして、円形の色相を生成します。赤(色相=0)は、伝統的に配置される右方向(極座標角度0)に回転します。
上記の例と同様の例として、カラーホイールがあり、これは色相と明度の両方のグラデーションを持つチャンネル画像を結合することで生成されます。
生成されるグラデーションは線形ではなく、指定された色のスムーズな開始と終了があり、通常のグラデーションを使用するよりもそれらの色がはるかに際立ちます。グラデーションが従う実際の関数は、リサイズで使用された正確なリサンプリングフィルターに依存し、(ほぼ)それに近いものです。
ご覧のとおり、この斜めグラデーションは、上記の回転グラデーションと比較すると、あまり線形ではありません。
以下は、「リサイズ」手法を使用して作成された大まかな「レインボーグラデーション」です。
この方法では、グラデーション生成に任意の色と順序の組み合わせを使用できます。これにより、カラー参照テーブルを生成するのに非常に適しています。
ここでは、ルックアップのX位置'
この方法を使用すると、多色グラデーションを生成することもできます。
ただし、制限は、色の間隔を均等に定義することしかできないことです。中央の色をシフトするには、中央をシフトするために、入力グラデーションを非線形形式に大まかに変更する場合を除き、簡単にはできません。3色以上の場合、状況はさらに悪化します。上記は、デュオトーンを使用してグレースケール画像を色付けし、中間色を正確に定義することを保証する(Tint演算子を使用する場合とは異なり)優れた手法でもあります。
補間ルックアップグラデーションは、2次元に拡張することもでき、純粋に1次元のグラデーションと同じくらい簡単に、正方形の線形グラデーション(双線形補間)を生成できます。
これは同じ例ですが、Catrom補間を使用し、非常に遅いFX演算子の代わりにDistort演算子を使用して生成しています。
上記を理解するための重要な点は、ピクセルの中心に基づいて小さな画像を拡大しているということです。詳細については、画像座標とピクセル座標を参照してください。ほとんどの補間方法は、同等の補間リサイズフィルターを備えていることに注意してください。ただし、ビューポートとピクセル座標を使用することで、非常に小さな画像を極端に拡大縮小することで発生する、以前のリサイズグラデーションで示されたエッジ効果がなくなります。
ただし、メッシュ補間設定は、リサイズフィルターとしては使用できません。これは、ピクセル内領域を2つのフラットな線形三角形に分割する特別な2次元補間であり、最小の色差を持つ角を接続する対角線に沿ってヒンジで留められています。したがって、2つの色を同じ色にして、"
対角線上の2つの黄色い角が同じであるため、それらを結合するために黄色の対角線が使用されました。他の色は、それらの三角形に線形にマッピングされます。2つの対角線の色が同じでない場合、異なる対角線分割になる可能性があります。
いくつかのきれいな非線形グラデーションを生成することもできます。
上記の'
画像中心からの距離の計算を簡略化するために、代入式をいくつか使用している点に注目してください。その後、それをグラデーションに変換します。この機能は IM v6.3.0 で追加されました。
'
2 点から 3 点に増えると、各「コントロールポイント」が提供する色の量の比率は少し複雑になり、逆距離加重 (IDW) 補間と呼ばれる手法が使用されます。これに関する詳細な数学については、Wikipedia、IDW を参照してください。これは、3 点の逆距離の例です。
そして、ここでは逆距離の 2 乗を使用しています。これは、IDW 補間に使用されるより一般的な方法です。これは、シェパードの補間法としても知られています。
上記の '
'逆距離' または 'シェパード法' (逆距離の 2 乗) を使用する際の問題は、すべての「コントロールポイント」が画像全体にグローバルな影響を与えることです。結果として、ポイント間、特にすべてのコントロールポイントから遠い場所では、ある種の根本的な「平均色」が得られます。これにより、滑らかな色のグラデーションではなく、色の「スポット」が生成されます。DIY グラデーションと色相
余談: これは、興味深い虹効果を生成しようとした一種の失敗の試みでした。失敗しましたが、その失敗から多くのことを学びました。 上記はうまく機能しますが、もっとうまくやりたいと思いました。平均色にマージするスポットを生成するのではなく、ポイント間で明るい虹色のグラデーションを生成できるのではないかと考えました。そこで、色相グラデーションを生成するために、HSB 色空間で 逆距離加重補間を試みましたが、色相の周りに色がより均等に配置されるように、また、カラーホイールを生成する別の方法を提供することを期待して、黄色を青に切り替えました (上記の他の色空間のグラデーションを参照)。
ご覧のとおり、色相グラデーションのみを生成しているため、すべての色が明るく鮮やかです。ただし、非常に奇妙にも見えますが、これは '色相' カラーチャネルの「周期的」な性質によって引き起こされています。その結果、青と赤の間の領域は、紫色の色相を介した短い「モジュラス」パスではなく、緑色の色相を通って長い道を進みます。多くの調査の後、距離の加重平均に対して、円形平均を使用することで、上記を正しく行うために必要なモジュラスの数学を最終的に発見しました。これには、色相を極角度として、X および Y の直交座標に変換することが含まれます。これにより、線形数学を実行できるようになり、値の線形加重を適切に実行できます。その結果は、角度色相に変換されます。
注: 上記では、色相チャネルのみで操作を実行しました。実際には、彩度および輝度チャネルで (通常どおり) 操作を実行する必要があります。ご覧のとおり、赤と青の間に正しいグラデーションが得られましたが、角度分離が大きい原色に適用すると、中央で非常に急激なグラデーションの変化を生成する傾向があります。つまり、結果は正しいのですが、角度色相の変化は、色相の効果が非常に大きく変化する場合、線形ではありません。多数の近接した色相の平均化にはうまく機能しますが、これらの広間隔の原色には機能しません。より一般的な「逆距離の 2 乗」または「シェパード」法 (上記参照) よりも強力な「逆加重」の使用に切り替えてさえ、改善はしましたが、非線形効果のために色相の変化はまだ中央に圧縮されていました。入力色は一定であるため、色相-x および色相-y 座標に事前に変換し、それらのチャネルでシェパードの加重を実行してから、再び変換すると、実際にはプロセスがさらに高速化されます。つまり、HSB 色空間から Hx,Hy,S,B 色空間に色を変換して、この手法を適用します。これを行うと、中心点とポイント間の均一なグラデーションでさえ、白 (HSB 色空間の中心点) にシェードされます。これを HSL 色空間で実行した場合、その領域は中間トーンの灰色にシェードされます。
この極座標色相から X-Y 座標への変換は、非極座標 RGB 空間で計算を実行するのとある意味で似ており、同じ灰色へのシェード効果を示しています (前の例を参照)。したがって、円形平均を使用することで、実際には HSB 色空間を高歪みの RGB バリアントに変換しているだけであれば、線形 RGB 色空間でタスクを実行し、色を彩度を上げて色相を生成すればどうでしょうか!
ご覧のとおり、以前とほぼまったく同じ結果が得られますが、複雑な「モジュラスの数学」はすべて削除されています。ただし、色の開始点の間に、より線形の色の広がりを得るにはまだ至っていません。このすべての教訓は、色相を扱うのは「赤の不連続性」だけでなく、色が非常に広い間隔で配置されている場合に発生する非線形効果も原因で難しいということです。そして結局のところ、線形 RGB 空間で直接タスクを実行して色を彩度を上げた場合と同じ結果になりました。本質的に、HSB および HSL 色空間は楽しいですが、線形、現実的、または実用的な色空間ではありません。これも、実際に色相を直接扱う操作が非常に少ない理由でしょう。
この画像は、一番上の行に沿って正確な「白」色から、一番下の行に沿って正確な「黒」色になるグラデーションを作成します。これは「理想化」されたグラデーションであり、通常はユーザーが指定した実際の色が含まれているため、ユーザーがまさに望んでいるものです。ただし、これはユーザーが期待するものですが、数学的に正しいグラデーションではありません。画像座標とピクセル座標で説明したように、ピクセルには実際には領域があり、そのため、画像の一番上の白いピクセルはそのピクセルの中心を表し、黒いピクセルは一番下のピクセルの中心を表します。つまり、画像のエッジではなく、エッジから 1/2 ピクセル離れた場所にあります。数学的には、画像はエッジから開始します。そのため、完全な数学的グラデーションを生成するには、ピクセル座標で画像のエッジにある色の位置を指定する必要があります。したがって、画像座標では、位置は 1/2 ピクセル分ずれており、画像サイズは、画像のサイズより 1 ピクセル小さい場所ではなく、画像内のピクセル数 (距離) と正確に一致します。数学的に完全なグラデーションを生成する方法の 1 つは、重心疎な色 (次のセクションで詳しく説明) を使用して、完全なエッジからエッジへのグラデーションを生成することです...
使用される座標が
生成されたグラデーション画像は、必要に応じて回転させ、その後の画像処理に必要な画像を生成できます。ただし、このグラデーションは正しく「循環」しますが、色の実際の位置は正確ではありません。しかし、多くの場合、これで十分です。「完璧なグラデーション」が必要な場合は、疎なカラーグラデーションを使用することをお勧めします。要約すると... グラデーションに何を求めるかを正確に考えることで、最終結果の精度に大きな違いが生じる可能性があります。しかし、それが重要でない場合は、気にせずに、手元のタスクに最も簡単なものを使用してください。
残りのピクセル("
4 つ以上のポイントが与えられた場合、与えられたすべてのポイントに対して「最適適合」が実行され、その結果、実際のポイントはそれらのポイントに指定された色と正確には一致しない可能性があります。ただし、グラデーションは単に「停止」するのではなく、それらのポイントを超えて変化し続けることに注意してください。伝統的に、重心グラデーションは、それを生成するために使用されたポイントの包絡三角形内に制限されます。例えば...
これは Fred Weinhaus による高速バージョンで、アルファチャネルに三角形マスクを作成します。デフォルトでは、疎なカラーオペレーターは更新しません(デフォルトのチャネル設定のため)。ただし、完全に透明なピクセルを含むすべての色は、アルファマスクで色塗りされます。
'
同じ例を次に示しますが、角度制御ポイントの 1 つを移動して、グラデーション角度を設定する方法を示します。
そして、他の 2 つの隅に合わせるには...
これらの「斜めグラデーション」は、上記のような長い画像でも自然な外観のグラデーションを生成します。3 つのカラーポイントの位置、特に 2 つの隅の間のグラデーションの角度を定義する同じ色の 2 つのポイントの位置を調べてください。どちらの場合も、それらのポイントの1つが画像自体の中にさえ配置されていないことに注意してください!また、グラデーションが描画される画像のサイズに合わせて位置を自動的に調整するためにパーセントエスケープを使用していることにも注意してください。
ただし、2 点グラデーションは、非常に「幅広」または「高さ」の画像(アスペクト比が高い)の隅に適用すると、あまりうまく機能しません。基本的に、グラデーションは、上記の 3 ポイントグラデーションとは異なり、斜めに揃えられていません。傾斜していますが、「面白い」ほど傾斜していません。
上記画像を取得し、個々のカラーチャネルグラデーションを分離することで、この「4 ポイントフィット」を確認できます。方程式がどのように曲線(実際には二次曲線)を生成しているかに注意してください。ただし、4 つのポイントが平行線を作成する場合、生成されるグラデーションは線形になります。このメソッドは、4 つのポイントが直交(長方形)グリッドに揃えられている場合、実際には双一次補間メソッド(以下の補間ルックアップグラデーションを参照)と同等です。4 つ未満のポイントが与えられた場合、上記の関数は 3 ポイントの '
ご覧のとおり、各ポイントの周りの色付きの「セル」のアンチエイリアシングを試みることはありません。各セルのエッジは、実際には各ポイントの最も近い隣接点のちょうど中間になります。これは、例えば、画像をさまざまな方法で切り刻むマスクを生成するために使用できます。1 つのポイントを白として、残りをすべて黒として割り当てて、画像から1つの「セル」を抽出します。結果を滑らかにする(アンチエイリアス処理)場合は、スーパーサンプリングを使用して画像を滑らかにするか、4倍大きく生成し、"
簡単な方法(あまり良くはありませんが)は、画像をわずかにぼかすだけです...
生成された画像を大幅にぼかすことで、生成されたさまざまな「セル」の間に非線形グラデーションを設定できます。
"
ぼかされていない出力は、さまざまなエッジ検出手法に渡して、さまざまな境界付きエッジを生成することもできます。ラスタからベクターへのコンバーターを使用して、画像を再マッピングし、ベクター線を生成できます。ただし、コーナーをより適切に検出できるように、デフォルトの '
特定の領域を同様の色で囲むことで、その特定の色のある高原を生成できますが、エッジングポイント間の境界が「漏れ」、他のカラーポイントまでの距離によっては、「高原」の中心がくぼんで浅いボウルを形成する可能性があります。このメソッドは、シェパード画像歪曲で使用されているような変位フィールドを生成するためにも使用されます。この場合、カラーR、G、B値ではなく、XおよびY変位ベクターがマッピングされています。
ご覧のとおり、色がシャープな点として生成され、すぐに背景の「平均色」に溶け込みます。色の点の周囲に「平坦な」色を持つ丸みを帯びたスポットを生成するシェパード法と比較して、これはすべての制御点が線を形成する線形グラデーションを生成する場合にうまく機能します。つまり、画像内の特定の線に沿って1次元のグラデーションを生成する場合です。ただし、もう1つ指摘しておくべき点があります。これらの色の点が「平均」レベルに近い値にどれだけ早く低下するかは、それらがどれだけ近いかによって制御されます。2つの点光源を互いに近づけて配置すると、それらは急速に低下し、離れているほど個々の色が結果に影響を与えます。
また、特定の点(正確に同じ位置、または互いにすぐ近く)に同じ色または類似した色を「重ねる」と、その色の点が2倍の強さになります。
これらの効果は、「
ご覧のとおり、「色のスポット」は非常にシャープな点から丸みを帯びたスポットに、そして広い色の領域へと拡大していきます。非常に高いパワーレベルでは、最終的にボロノイ疎な色メソッドと同じパターンを再現します。この-defineはシェパード疎な色に影響を与えるだけでなく、疎な色メソッドによって生成された計算された変位マップに基づいているシェパード歪曲メソッドにも同様の効果をもたらします。ただし、常にパワーレベル1.0を使用する逆距離疎な色メソッドには影響しません。
そして、さまざまな3点法の概要を以下に示します。
現時点では、「
IM v6.6.8-5以降、変更されていないチャンネルは保持されるため、「
疎な色は、色名ではなく、正規化された浮動小数点値も受け入れます。色名の代わりに提供する必要がある値の数は、現在の「
これは、プログラムされたスクリプトや、'colorname'トランスレータにアクセスできないAPIで処理する方が簡単な場合があります。
次に、この画像に存在する少数の非透明ピクセルを抽出し、マルチポイント疎な色メソッド「
上記の「
結果の画像は入力とまったく同じですが、透明な背景は距離でぼかされた「エッジの色」で置き換えられていることに注意してください。これが、画像のエッジが不鮮明になっている理由です。この画像は、より優れた「エッジフェザリング」手法を生成するために特別に開発されました。他のフェザリング手法については、ぼかしフェザリングと距離フェザリングを参照してください。
より良い方法は、徐々に小さな「sigma」値を持つ複数のレイヤーのぼかし画像を生成し、一番上に元のぼかしのない画像を配置することです。
このレイヤー化されたぼかし手法は、同じ画像に対する「
これは、各ぼかしステップで大きな「sigma」値(したがって非常に遅い)を必要とせずに、非常に大きな画像でも非常に高速に機能します。基本的に、前の例のぼかしレイヤーを生成するために、より高速な画像サイズ変更手法を使用しています。それほど正確ではありませんが、正しい結果の良い近似値を生成します。ただし、これは正方形でサイズが2のべき乗である画像に最適です。そうでない場合、精度は低下します。上記の特別な演算子「
この色の漏れは、特に複数の穴がある場合に、シェパード法を「穴埋め」に使用する際の主な問題点です。ある穴の色が、まったく異なる穴の色に漏れ込み、影響を与える可能性があります。また、その逆も然りです。シェパード法と「カラー拡散」と呼ばれる別の形式のカラー「穴埋め」との違いは、境界の理解によって形成されます。基本的に「カラー拡散」では、色が他の定義された色の線を通過することはできません。これは、「見通し線」内の色、またはエッジの外側を漏れ出る色のみに効果を限定することで実現されます。これにより、ピクセルに影響を与える色を制限するために、最も近い色までの距離を使用する必要があります。「カラー拡散」の主な用途の1つは、Diffusion CurvesのWebサイトで紹介されています。ここでは、カラー拡散を多用しているだけでなく、非常に高速に拡散を生成するためのテクニックに関する情報も含まれています。私はこれを将来的にImageMagickに実装したいと考えています。
プラズマ画像もまた、ランダム化された色のグラデーションの一種であり、"
また、'
繰り返しになりますが、ご覧のとおり、中間色の方が、黒、白、黄色のような極端な色よりも、結果の画像でより多くの色のバリエーションを生成します。上記の「
この画像を、以下の「フラクタルプラズマ」画像と比較してください。
実際、これはすでに見た定色プラズマ画像と非常によく似ており、実際には同じ方法で生成されますが、色の変化がより顕著です。
プラズマ画像は少し「ノイズが多い」と感じることがよくあります。そのため、通常は "
おそらく光と影の効果がたくさん得られると思うでしょうが、生のプラズマは非常にランダムなので、"
これが十分に大胆でない場合は、プラズマ画像をグレースケールにするチャネルコピー法を使用してください。
これらのグレースケールプラズマ画像は、さらなる処理に非常に役立ち、他の画像効果を生成できます。たとえば、プラズマフラクタルを使用して多くの興味深い効果を生み出した例については、背景画像のページをご覧ください。
上記の画像は決して変化しないため、"
ご覧のとおり、上記のすべての画像に同じ色のパターンが存在しますが、基になる色のベースによって、共有パターンの部分が強調されたり、隠されたりする可能性があります。最後に1つ注意点があります。他のIM演算子も、"
結果は非常にランダムに見えるかもしれませんが、より制御された色の範囲(または単なる色の値)が生成されます。
各色は線形にランダムな値であるため、上記で使用される閾値のパーセンテージは、選択されたピクセルの密度を直接定義します。さらに進んで、1 つのカラーチャネル(「
これらのタイプの画像は、グリッターアニメーションを生成するために直接使用できます。ただし、特に黒の背景バージョンに対してさらに処理を行うことで、グレースケール強度に基づいてドットを拡大したり、それらのドットから筋や星のフレアを生成したりできます。例については、星生成器を参照してください。シードされたプラズマ画像と同様に、「
ただし、仮想ピクセル設定がないと、「
上記の問題は、ぼかしによって、赤-黄色(低い値)と赤-マゼンタ(高い値)のスポットが作成される傾向があり、その間に緑、シアン、青の帯があることです。これは、色相値がぼかされ、平準化された方法の結果にすぎません。これに対する理想的な解決策は、色相値の周期的な性質を考慮に入れた、一種のモジュラスぼかしです。ただし、そのような演算子は現在利用できず、おそらく今後も利用できないでしょう。
ランダムな画像を処理するその他の方法については、上記のプラズマ画像、および背景の生成を参照してください。ぼやけたランダムグレー上記からわかるように、さまざまな原色のブロブを持つ画像が得られます。これは、各チャネルがグレースケール画像として互いに完全に独立して処理されているためです。上記の各画像のチャネルの1つを抽出して、ぼやけた画像の構造を確認してみましょう...
最初に注意すべき点は、画像には一般的に(常にではありませんが)、ほぼ同量の黒と白の領域が含まれていることです。ランダムな画像を50%で閾値処理すると、これがわかります。
ご覧のとおり、約50%の白と50%の黒の領域が、曲線で区切られています。また、この線の曲線は、純粋にランダムな画像のぼかしに使用される「シグマ」値に応じて変化します。個々のピクセルから黒と白の「雪」が生成され、画像の2つの黒と白の領域に非常に均一(ただしランダム)な分離が得られるまでです。ランダムな画像の使用例については、背景画像を参照するか、ランダム化されたキャンバスの生成については、単色のランダムスポットを参照してください。
画像内の「緑」チャネルへの操作を制限するための「
まず、画像内でほぼ同じ量の明るい領域と暗い領域を取得していること、およびそれらの領域が、明るい領域と暗い領域の間に形成されるグラデーションの中間のグレーの色で相互接続されていることを指摘したいと思います。個々のブロブまたは「顆粒」は、画像全体で領域ごとに異なりますが、初期ランダム画像のぼかしに使用された値の約3〜4倍の直径で平均化されます。このぼかし値は、画像の「粒度」と呼ばれ、非常に重要な値です。これは基本的に、ランダム画像が生成する円形構造の平均サイズを表しているからです。画像では「曲率」と呼ばれることもあります。値が大きいほど、画像内のこれらの曲線は大きくなり、遅くなります。これが、ぼやけたランダム画像を説明する上で最も重要な要素であるため、明確にしましょう...
余談:実際には、「顆粒」自体のサイズは、それらを生成するために使用される閾値係数によって異なります。係数が実際に記述しているのは、白と黒の領域の中心間の平均距離です。値が大きいほど距離が大きくなり、スポットは、その増加した距離に対応するために大きく、より分散している必要があります。これは、以下に示すランダムリップルを見始めると、より明らかになります。
また、50%のソラライズ操作をいくつかの追加のレベル調整と組み合わせて使用して、画像から十分に分離された黒と白の顆粒を抽出することもできます。
値が大きくなるにつれて、ぼやけたランダム画像の生成時間も非常に長くなることに注意してください。また、値が最小の画像寸法の約半分に達すると、ランダムな画像が1つの白と黒のスポットに落ち着くため、効果の増加は停止します。大きな値は推奨されません。
最後に、左側には、単一のランダム画像の「粒度」(ランダムなぼかし)を変化させることによって得られるパトロールサイクルアニメーションが示されています。アニメーションは、ダウンロード、学習、および再生できるシェルスクリプト「
ここで、「
そして、1つのランダム画像が、サイクルを形成する画像のシーケンス全体を生成できるようになりました。「時間」の抽出は、ブラーなどの他の処理の前に実行する必要があります。これは、おそらく生成プロセス全体で最も遅い部分です。もう1つ注意すべき点は、位相「
右側は、上記のフレームのアニメーションです...変動するパターンは完全にランダムですが、フレームからフレームへとスムーズに変化し、アニメーションがループすると変化します。結果に始まりも終わりもないことがわかります。渦を巻くような動きになったり、すべての「ガス」のような塊が暗いゾーンに吸い込まれているように見えたり、単に出現したり再び消えたりすることもあります。また、非常に速い動きの時期もあれば、非常に遅い動きの時期もあります。それは完全にランダムです。要約:ぼかしランダム画像に存在するのと同じプロパティが、このアニメーションにも存在します。画像は、白と黒のセグメント間でほぼ均等に分割されたままであり、画像のぼかしまたは粒度の3倍程度のサイズの塊を形成します。しかし、これに加えて、画像のすべての部分が、明るい色と暗い色の両方の間のサイクルを形成することが保証されています。サイクルの半分はもう半分のネガであるためです。気づいていないかもしれませんが、ランダムな線形値を正弦波に変換したため、色の白と黒の分離(コントラスト)がより鮮明になります。そのため、シグモイドコントラスト演算子のコントラストを低減する側面を使用して、結果の画像を「塊」のように見えないようにし、粒子自体ではなく、粒子間のグラデーションを強調することができます。これは、サイクリックランダムアニメーションでできることの出発点にすぎません。ランダム画像でできるすべてのこと(背景の生成で説明したように)は、「ランダムフラックスアニメーション」にも適用できます
または、画像上をゆっくりと流れる変化する電気フィラメントを生成します。
サイクルの半分が前半の否定であり、ソラライズを使用して白と黒の色を半分に折りたたむという事実のため、サイクルは実際には1つのアニメーションサイクルで2回繰り返されることに注意してください。非常に速い変化の一部を取り除くには、実際にはより多くのフレームが必要です。
より長いサイクリックシーケンスの動きを予測不能にするには、複数のランダム画像からの複数の正弦波サイクルを組み合わせるために、いくつかのグラデーション数学を使用することもできます。または、同じランダム画像の他のカラーチャネルを使用することもできます。
ご覧のとおり、正弦波関数の「周波数」が大きいほど、「粒子」の間のグラデーションに追加されるリップルが多くなります。「周波数」が「
どちらの方法にも長所と短所がありますが、本質的には、白と黒の粒子間の距離ではないものの、粒子を拡大します。この副作用は、もちろん、2つの粒子セットの間のリップルの圧縮です。
上記の例で使用されている2番目の値「
「白」の粒子の色は、「位相」と使用した「周波数」の分数によって決まります。整数の「周波数」値の場合、白と黒の両方の粒子が(「位相」に従って)一緒に色が変化します。そのため、位相が「
「グレー」の「位相角」の場合、一方の粒子は白いリングで囲まれ、もう一方の粒子は黒いリングで囲まれていることに注意してください。 「
前のランダムフラックスと同様に、「位相」を時間とともに変更して、ある粒子セットから別の粒子セットに移動するリップルのアニメーションを生成できます。これは、コントラスト強調なしで特にうまく機能します。
余談:上記で使用されている手法は「パイプラインMIFF:」として知られており、MIFF:」ファイル形式が画像を「連結」して複数の画像ファイルを生成できるため可能です。1つ指摘しておきたいのは、アニメーションが上で作成したフラックスアニメーションよりもはるかにゆっくりと変化するように見えるということです。つまり、1つのアニメーションサイクルでリップルが短距離しか移動しないのに対し、「フラックス」アニメーションでは、変化が大規模な白から黒の粒子にサイクルの半分で移動し、再び戻ります。ここで、上記のリップルアニメーションを、同じランダム画像ソースからの基になる「フラックス」アニメーションと組み合わせると、はるかにダイナミックで流れるようなフォームを生成できますが、アニメーション速度の違いに注意してください。
アニメーション内でリップルをアニメーション化することもできます。ただし、リップル自体には、はるかに大きな「位相サイクルレート」(「j = 5 * i」式)を使用する必要がある場合があります。また、サイクル内のサイクルを生成しているため、この場合は60フレームの、はるかに長いアニメーションを生成する必要があります。ただし、これには、より大きな「フラックス」の動きも遅くなるという利点があります。
2番目の画像では、リップルが最初に1点から出てくるように見え、次に同じ点に戻り始めますが、方向が単純に逆になることはありません。より優れたマルチサイクルフラックスサイクルジェネレーターは、基になるフラックスアニメーションの「ネガティブ」効果を削除することで、このわずかな奇妙さを取り除く必要があります。
今後: 分散マッピング歪みへのリップルランダム画像の利用.
現在、広い領域に画像をタイル状に配置する方法は多数あります。任意の画像を「
これを使用して、必要なサイズよりもはるかに大きなタイル画像を生成し、「
「
これは、「
これは、単色キャンバスメソッドの一部で使用されるメソッドとまったく同じで、特定の色を使用します。ここでのみ、「
より高度な方法は、元の画像のサイズに設定された特別な歪みビューポート設定とともに、歪み演算子を使用することです(定義済みのグローバルアーティファクトとパーセントエスケープを使用)。これは基本的に、小さなタイル画像を囲む小さなタイルの仮想ピクセルをマッピングして、より大きなタイル状のキャンバスを生成します。
メモリに既にロードされている画像をタイル状に配置するために、この同じ手法を見ていく歪みによるタイリング(下記)を参照してください。
他の画像を読み込んだ後、「
いずれにせよ、タイルオフセットとタイル画像を最初に使用する直前に定義するのがおそらく最善です。これは、上記と同じ結果になります。
このタイリング方法には、画像を反転タイル(ミラータイル)にできるという利点があります。
一般に、この方法は、タイル状に配置される画像のサイズがわかっている場合にのみ実用的です。また、複製は実際には非常に高速かつ効率的であるため、特に結果を使用してより大きな画像をさらにタイル状に配置する場合は、非常に単純で高速なタイリング方法です。
「
この方法で一般歪み演算子を使用することで、タイル状の画像を非常に複雑な方法で歪ませるという追加の利点も得られます。この例については、アフィンタイリングの歪みを参照してください。より複雑な例として、ここでは円弧歪みを使用して、ビューポートの中心にある原点の周りにツリーをタイル状に配置します。「
パターン画像は通常、「
これらの色に満足できない場合は、「
「
「
上記では、色付きパターンの作成と実際の使用を分離するために、2つのコマンドのパイプラインを使用しました。単一のコマンドでこれを行いたい場合は、上記のメモリ内の画像のタイリングを参照してください。
最初のコマンドは「タイル画像」を生成し、2番目のコマンドは実際に画像をタイル状に並べることで、それらがどのように組み合わさるかを確認できます。ご覧のとおり、結果として生成されたタイル画像は適切にタイル化されておらず、タイル化された画像には明らかに人工的なエッジの歪みが見られます。基本的に、元のタイルの均一性を画像のエッジに沿って失ってしまいました。1つの解決策は、特別な仮想ピクセル設定を使用することです。これは、演算子が画像が実際の画像の境界を超えて色を検索する際に、画像がエッジを包み込んでいると考えるようにするために使用されます。
別の例として、ここでは2つの関連するタイルパターンを結合し、さまざまな効果を使用して、珍しいレンガの壁タイルを作成しています。
抽出されたタイルの正確な位置は重要ではないことに注意してください。タイル可能な画像は、歪んだエッジから離れていて、元のタイルと同じサイズを使用する限り、タイル化された画像のどこからでも切り取ることができます。ここでは、画像をより広い領域にタイル状に並べる代わりに、「ダブルクローン」手法を使用して、タイルがカバーする領域を2倍にしています。終了したら、画像の50%を中央から切り抜いて、修正されたタイルを回復します。これは、処理しているタイルの正確なサイズを知る必要がないことを意味します。
ご覧のとおり、生のランダムノイズ画像を使用してランダム化されたタイルを作成する方がはるかに簡単で、結果にエッジの歪みは発生しません。この特定の画像変換は、背景画像ページにリストされており、「ピット」というタイトルが付けられています。他の多くのランダム画像変換とその外観の例については、そのページを参照してください。
ただし、このタイルが「六角形」に見えるためには、タイルは通常の正方形、または2倍の正方形であってはなりません。最終的なタイルサイズは長方形である必要があります。この長方形の正確な比率は、実際には無理数を伴いますが、ピクセル配列を使用した画像処理にはあまり適していません。ただし、コンピュータやデジタルカメラの画像のほとんどで使用されている、4:3の比率は、うまく機能する比率です。
タイルが生成するパターンを見ると、特定の機能には、その同じ機能を囲むように円状に6つのコピーがあることがわかります。これは、タイルが生成する「六角形」パターンですが、他のすべてのタイル画像と同じ「正方形」パターンでタイル化されています。上記の「ヘクスタイル」パターンの1つのバリエーションは、上で実行したように水平方向にではなく、タイル画像を垂直方向に2倍にすることです。結果として、六角形パターンは90度回転します。ただし、依然として同じタイプのパターンです。
将来:追加の画像を反転して、より大きなタイルパターン(pmgタイル群)を生成します。 将来:ギャップや重複なしに完全にタイル化されるように、画像から六角形を切り取る(マスクする)方法。
ただし、上記は元の画像の中央にある小さな図形をタイル化する場合にのみ機能します。一般的な画像にはあまり適していません。一般的な画像の六角形タイリングには、正三角形をマスクアウトする必要もあります。次に、正三角形のエッジがミラーリングされるように、ピースを回転させます。これは簡単な作業ではありません。
対角ミラーは、転置を実行し、次にボロノイ、スパースカラーを使用して生成されたマスクを使用することによって生成されます。この対角ミラーは、正方形のピクセルジオメトリにより、同じ方法でミラー全体でピクセルの1行を自動的に共有することに注意してください。また、垂直および水平の反転とフロップを作成する前に、エッジに沿って1セットのピクセルを削除します。この画像を「タイル」として使用する前に、上端と左端に沿って別の行と列のピクセルを削除することもお勧めします。これを行う必要はありませんが、見た目が良くなると思います。エッジピクセルの行と列を削除しないと、画像が結合する場所に、重複したピクセルの醜い「継ぎ目」ができます。代替案として、最初に生のランダム画像をタイル化し、次に背景パターン変換を実行すると、鏡面に沿って「クリップされた外観」になる可能性が低くなりますが、よりスムーズな遷移になります。
最初の部分は「ランダムデータのタイル化」の生成であり、後半ではランダムデータを「色相」マッピングに魔法のように変換します。また、タイル画像を生成するために後で適切に切り取られる初期画像に、追加のピクセルも追加しました。
タイル画像とその背景にある数学に関するより完全な入門については、Wikipedia:壁紙群を参照してください。上記で説明したのは、作成できる多くのタイルパターンの一部にすぎません。
「p4g」は上記の「p4m」タイルとほぼ同じですが、フリップを使用するのではなく、ミラーリングされた正方形の180度回転を使用して、完全なタイル画像を生成します。ただし、画像はミラーで結合されていないため、既存の画像をタイルソースとして使用することはできません。エッジが分離して不連続になるためです。ただし、生のランダムデータをタイル化してから、結果のタイル画像を処理して、滑らかな結果を生成できます。
タイリングの非ミラーリングの性質により、追加する前にエッジから重複するピクセルの行または列を削除する必要がないことに注意してください。ただし、両方の場合で同じタイプのプロセスに従う場合は、そうしても問題ありません。
![]() |
|
|
単色キャンバス
直接生成
特定の色とサイズのキャンバスを生成するのは非常に簡単です。 "-size
" (サイズが指定されていない場合はデフォルトで "1x1
") を指定してから、"canvas:
" を使用して、指定された色のキャンバスを生成します。色が指定されていない場合は、'white
' のキャンバスが生成されます。例... ここでは、'khaki ' 色のキャンバスを生成します。
|
![]() |
より一般的な (そしてより伝統的な) 形式は "xc: " (これは「X 定数画像」を意味します) です。 これは一般的に私が使用するものです。たとえば、ここに X ウィンドウの色 'wheat ' を使用した画像があります。
|
![]() |
いくつかの素晴らしい 画像読み込み修飾子 を使用すると、単色キャンバス画像を単一の引数として指定できます。 このテクニックは、特定のサイズと色の 'xc' キャンバス画像を、多くの ImageMagick スクリプトに対する単一の「入力画像」引数として指定できることを意味します。
|
![]() |
キャンバスをすでに作成したが、別の色でキャンバスが必要な場合は、"-opaque " 演算子を使用してその色を置き換えることができます。
|
![]() |
-scale
" を使用します。ここでは、組み込みの "rose: " 画像からローズ色を取得します。
|
![]() |
同じサイズの画像を作成する
ImageMagick を使用する場合の最も基本的なテクニックの1つは、既存の画像と同じサイズのキャンバスを生成することです。 これは、既存の画像を必要なキャンバスに変換することで実行できますが、画像の元のサイズは保持されます。 一般に、保持する必要があるのは画像のサイズだけではなく、すべての画像メタデータも保持する必要があります。 ラベル、コメント、カラープロファイル、時間遅延、保存圧縮、深度などのものです。 このメタデータは、新しく白紙化したキャンバスにそのような情報を注釈を付けたり、元の画像を新しいキャンバスに重ねて、その情報を保持する必要がある場合に重要になる可能性があります。 当然、IM はこれを行うための多数の方法を提供しており、通常はさまざまな画像操作を使用した結果です。 画像を単色でクリアする際にその使用が非常に明確なものはほんの一握りです。左側がテスト画像です...この画像を実際にどのように生成したかは心配しないでください。 この演習では重要ではありません。 IM を使用するときに十分に機能するように、さまざまな色、透明度、その他の機能を含むように設計しました。 この画像の生成に使用されたコマンドに本当に興味がある場合は、私がそれを作成するために使用する特別なスクリプト "generate_test" を参照してください。 |
![]() |
特定の色を重ねる
IM v6.4.2-1 以降では、単一の色でカンマなしで "+level-colors " を使用して、すべての色を設定できます。
|
![]() |
-alpha
" 演算子を使用して、色の追加の前 (または後) に透明度を便利なものに設定します。 または、"-channel All
" を使用して、色のリセット操作によって透明度チャンネルも設定されるようにすることができます。 もう1つの古い手法は、"-colorize
" を使用して塗りつぶし色を完全に不透明な値で重ねることです。 ただし、IM v6.7.9 より前のバージョンでは、元の画像のアルファチャンネルは変更されなかったため、事前にアルファチャンネルを無効にする "-alpha Off
" を使用するか、"-alpha Opaque
" で不透明にすることが推奨されます。使用しない場合でも同じ結果が得られるでしょう。
|
![]() |
IM v6.4.3-0 以降では、"-sparse-color " 演算子を使用して、いくつかの点を必要な色に設定し、提供されているほとんどすべての色付け方法を使用して、画像全体を覆うように広げることができます (以下のスパースカラーポイントを参照)。
|
![]() |
より一般的な方法は、"-draw " を使用して、現在の画像内のすべての色を現在の "-fill " 色に直接リセットすることです。
|
![]() |
上記のすべての「単純な」方法に関する主な不満は、どれも画像を現在の "
-background
" 色に単純にリセットしないことです。 次のメソッドセットでは、アルファ合成を利用して、さまざまな演算子に画像を目的の色で強制的に置き換えます。 これらの複数画像の手法は、"-compose
" を使用する演算子で動作します。たとえば、"-flatten " (「背景へのフラット化」の例を参照) を使用できます。これにより、"-background " 色を使用してキャンバスが作成されます。
|
![]() |
Dst
' 合成メソッドを使用して、背景キャンバスのみを読み取り、元の画像のピクセルカラーを無視します。元の画像のメタデータ (コメントやラベルデータなど) を取得するだけで、画像自体を特定の色のサイズとサイズのキャンバス画像に置き換えたい場合は、"-extent " 演算子(「範囲、画像サイズの直接調整」を参照) が最適なソリューションです。 ここでも、Dst ' 合成メソッドを使用して、元の画像のピクセルデータを無視し、"-background " 色のみを使用するようにします。
|
![]() |
または、"-border " (「境界線の追加」を参照) を使用し、"-bordercolor " を色ソースとして使用できます。
|
![]() |
![]() ![]() |
"-border " キャンバスを生成する方法は、IM バージョン 6.1.4 より前のバージョンでは機能しません。 これより前では、"-border " 演算子によって生成された背景は、単純な単色ではなく、境界色で囲まれた黒いキャンバスでした。 あまり役に立ちません。 |
キャンバス生成のより柔軟な (ただし非常に遅い) 方法は、"FX, DIY 演算子 " 演算子によって提供されました。 また、入力画像の透明度チャンネルは、デフォルトでは "-fx " が透明度チャンネルに触れないため、オフにする必要があります。
|
![]() |
"-fx " 演算子では、少し色を計算することもできます。たとえば、70% 暗い金色の色はどうでしょうか。
|
![]() |
たとえば、ここでは半透明の赤色のキャンバスを作成します。 ただし、Web ページの「青みがかった」背景に重ねると、オフパープルピンク色になります。
|
![]() |
-fx
" 演算子を使用する場合は、4 つすべての 'RGBA
' カラーチャンネルを変更するために "-channel
" を設定する必要があることに注意してください。選択した色で画像を白紙化
元の画像の色を使用して画像を白紙化することも可能ですが、トリッキーな場合があります。 特定のピクセルを「背景色」として使用したい場合に便利な手法です。 たとえば、ピクセル 0,0 は一般的な選択肢です。![[IM 出力]](../images/rose.png)
FX, DIY 演算子
" を使用して、色の白紙化に使用するピクセルを選択することです。
|
![]() |
|
![]() |
|
![]() |
|
![]() |
その他のキャンバス作成テクニック
非常に特定の色を持つキャンバスを生成する方法は他にもたくさんありますが、それらはかなり難解です。そのため、詳細なコメントがないと、数ヶ月または数年後に自分のIMスクリプトを見たときに、実際に何をしているのかが分かりにくいかもしれません。これらのテクニックはお勧めしませんが、IMの古い柔軟性の低いバージョンを使用している場合は知っておくと便利です。黒いキャンバス
-threshold"を使用して、透明度チャンネルをオフにすることで、黒いキャンバスを作成できます。従来、黒いキャンバスを作成するには、" |
magick test.png -threshold 100% -alpha off black_threshold.png |
![[IM Output]](black_threshold.png)
"を提供すると、 |
magick test.png -level 100%,100% -alpha off black_level.png |
![[IM Output]](black_level.png)
" |
magick test.png -fx 0 -alpha off black_fx.png |
![[IM Output]](black_fx.png)
ただし、" |
magick test.png -evaluate set 0 -alpha off black_evaluate.png |
![[IM Output]](black_evaluate.png)
また、" |
magick test.png -gamma 0 -alpha off black_gamma.png |
![[IM Output]](black_gamma.png)
![[IM Output]](black_posterize.png)
あまり明白ではない方法として、画像の色レベルを少なくして「ポスタリゼーション」すると、黒のみが使用される結果となります。
|
画像を完全に透明にしてから、'extract 'を使用して画像のマスクを抽出できます。 |
magick test.png -alpha transparent -alpha extract black_alpha.png |
![[IM Output]](black_alpha.png)
白いキャンバス
-threshold"を再度使用します。ただし、すべてのIMバージョンで、すべての色が白にマップされるように、値は負の数である必要があります。従来の方法は、再び" |
magick test.png -threshold -1 -alpha off white_threshold.png |
![[IM Output]](white_threshold.png)
"を提供すると、 |
magick test.png -level -1,-1 -alpha off white_level.png |
![[IM Output]](white_level.png)
もちろん、" |
magick test.png -fx 1.0 -alpha off white_fx.png |
![[IM Output]](white_fx.png)
ただし、" |
magick test.png -evaluate set 100% -alpha off white_evaluate.png |
![[IM Output]](white_evaluate.png)
![[IM Output]](white_posterize.png)
または、他の黒いキャンバス生成方法を否定します。
|
画像を完全に不透明(透明度なし)にしてから、'extract 'を使用して画像のマスクを抽出できます。 |
magick test.png -alpha opaque -alpha extract white_alpha.png |
![[IM Output]](white_alpha.png)
透明なキャンバス
おそらく既存の画像から生成したい最も重要なキャンバスは、透明なキャンバスです。次に、このキャンバスに描画や追加を行い、望むように仕上げて、元の画像に重ねることができます。 -alphatransparent"演算子を使用します(IM v6.4.3-7で追加)。最も速くて簡単な方法は、" |
magick test.png -alpha transparent trans_alpha.png |
![[IM Output]](trans_alpha.png)
null:
")を使用すると、無視されます。 ' |
magick test.png null: -alpha set -compose Clear -composite -compose Over \ trans_compose.png |
![[IM Output]](trans_compose.png)
ここでは、現在の" |
magick test.png -alpha set -fill none -draw 'matte 0,0 reset' color_matte.png |
![[IM Output]](color_matte.png)
" |
magick test.png -alpha set -channel A -fx 0 +channel trans_fx.png |
![[IM Output]](trans_fx.png)
当然、" |
magick test.png -alpha set -channel A -evaluate set 0 +channel \ trans_evaluate.png |
![[IM Output]](trans_evaluate.png)
画像を完全に透明にする別の方法は、" |
magick test.png -channel A -threshold -1 +channel trans_threshold.png |
![[IM Output]](trans_threshold.png)
101%
のようなものではなく、'-1
'が使用された理由です。上記の画像結果の多くでは、元の画像の元のRGBカラーはまだ存在しており、それらが透明になっただけです。たとえば、ここで上記の画像の1つを読み込み、IMに画像のマット/アルファチャンネルをオフにして、色を再び表示するように要求します。
|
![]() |
-alpha On
"を使用して追加しますが、その場合は、"-alpha Transparent
"演算子を使用する方が良いでしょう。画像の透明度の制御の例を参照してください。 その他のキャンバスの彩色
特定の色を使用する以外に、プライマリ/セカンダリの色でキャンバスを生成するのに十分な柔軟性を持つのは"-gamma"演算子だけです。基本的に、チャンネルをゼロにするには0
を使用し、チャンネル値を最大化するには-1
を使用します。たとえば、ここに黄色いキャンバスを生成します...
|
![]() |
IM v6.4.2以降では、"+level "演算子を使用して、すべてのカラーチャンネルに特定のグレーレベルを設定することもできます。
|
![]() |
色のグラデーション
上で見たように、単色のキャンバスは簡単に作成できますが、時にはもっと面白いものが欲しくなることもあります。非常に便利な画像作成演算子の1つに「gradient: 」があります。例えば...
|
![]() |
gradient:
」は上部が白、下部が黒、そして画像の高さ全体に滑らかなグレーの陰影を持つ画像を生成します。しかし、グレーのグラデーションである必要はなく、1色または両方の色を指定することで、異なる色のグラデーションを生成することもできます。
magick -size 100x100 gradient:blue gradient_range1.jpg magick -size 100x100 gradient:yellow gradient_range2.jpg magick -size 100x100 gradient:green-yellow gradient_range3.jpg magick -size 100x100 gradient:red-blue gradient_range4.jpg magick -size 100x100 gradient:tomato-steelblue gradient_range5.jpg |
![[IM Output]](gradient_range1.jpg)
![[IM Output]](gradient_range2.jpg)
![[IM Output]](gradient_range3.jpg)
![[IM Output]](gradient_range4.jpg)
![[IM Output]](gradient_range5.jpg)
white
」または「black
」になり、指定された色からの色距離が最も大きくなる方になります。したがって、「blue
」は「blue-white
」のグラデーションを生成し、「yellow
」は「yellow-black
」のグラデーションを生成します。「red-blue
」グラデーションは、中央に紫色の暗い帯を示しています。この暗さは、特に強い原色の場合に、より暗い非線形sRGB色空間が使用されることによって引き起こされます。詳細については、実画像の処理を参照してください。![]() ![]() |
「gradient: 」は現在、sRGB 色空間の色表現のみを理解しています。そのため、線形LAB色空間で「red-blue 」の色を使用して、より明るく正しい「紫」のグラデーションを生成することはできません。また、HSV色空間を使用して多色の「虹」グラデーションを生成することもできません。 ただし、このようなグラデーションは比較的簡単に「ごまかす」ことができます。以下の他の色空間でのグラデーションを参照してください。 |
![]() ![]() |
現在、グラデーションは他の角度で指定したり、3色以上を含んだりすることはできません。ただし、この機能はSVGグラデーションの不可欠な部分であるため、この状況は変更され、グラデーションオプションが大幅に改善される可能性があります。 |
![]() ![]() |
IM v6.3.1以降、グラデーションを生成するために使用されるアルゴリズムは、水平方向に均一な色を生成するようになりました。つまり、画像の各行のすべてのピクセルに同じ色が割り当てられます。つまり、1行あたり1色です。 このバージョンより前は、「 gradient: 」演算子は画像の幅を無視し、左上隅から右下隅に向かって行ごとに色を増分して割り当てることによって機能していました。結果として、グラデーションは現在のように主に垂直グラデーションでしたが、完璧なものではありませんでした。通常、この事実はテスト画像や画像マッピングでの使用などの特別な場合にのみ重要でした。 |
注意:グラデーションの動作は、これらの定義によって影響を受ける可能性があります。
gradient:angle=角度 (度単位) | 線形グラデーションの場合、これは色1から色2へのグラデーションの方向を、北(上)を基準に時計回りの正の方向で指定します。放射状グラデーションの場合、これはグラデーションの回転を、通常のX-Y方向から時計回りの正の方向で指定します。Imagemagick 6.9.2-5でサポートされています。 |
gradient:bounding-box=WxH+X+Y | グラデーションを画像寸法よりも大きいまたは小さい領域に制限します。境界ボックスで定義された領域が画像よりも小さい場合、色1は背景色になります。Imagemagick 6.9.2-5でサポートされています。 |
gradient:center=x,y | 放射状グラデーションの中心点の座標を指定します。デフォルトは画像の中央です。Imagemagick 6.9.2-5でサポートされています。 |
gradient:direction=値 | 線形グラデーションの方向を上/下/左/右、または対角コーナーに向かって指定します。選択肢は、北西、北、北東、西、東、南西、南、南東です。Imagemagick 6.9.2-5でサポートされています。 |
gradient:extent=値 | 中心にある放射状グラデーションの形状を指定します。選択肢は、円、対角線、楕円、最大、最小です。円と最大は、画像の半分の幅と高さの大きい方に等しい半径を持つ長方形の画像でも円形の放射状グラデーションを描画します。円と最大のオプションはどちらも、デフォルトの放射状グラデーションと同等です。最小オプションは、画像の半分の幅と高さの小さい方に等しい半径を持つ長方形の画像でも円形の放射状グラデーションを描画します。対角線オプションは、画像の半対角線に等しい半径を持つ長方形の画像でも円形の放射状グラデーションを描画します。楕円オプションは、画像の半分の幅と高さに等しい半径を持つ長方形の画像に対して、楕円形の放射状グラデーションを描画します。Imagemagick 6.9.2-5でサポートされています。 |
gradient:radii=x,y | グラデーションのx半径とy半径を指定します。x半径とy半径が等しい場合、放射状グラデーションの形状は円になります。それらが異なる場合、形状は楕円になります。デフォルト値は、画像の半分の幅と半分の高さの最大値です。Imagemagick 6.9.2-5でサポートされています。 |
gradient:vector=x1,y1,x2,y2 | ベクトル1 (x1,y1) からベクトル2 (x2,y2) に向かう線形グラデーションの方向を指定します。色1 (fromColor) はベクトル位置 x1,y1 に配置され、色2 (toColor) はベクトル位置 x2,y2 に配置されます。Imagemagick 6.9.2-5でサポートされています。 |
放射状グラデーション
IM v6.4.4以降、同様の方法で放射状グラデーション画像を生成することもできます。
|
![]() |
|
![]() |
これにより、片方のエッジを1.42(2の平方根)倍大きくして切り抜くことで、中心からコーナーまでの正方形の放射状グラデーションを簡単に生成できます。
|
![]() |
gradient:
」画像ジェネレーターと同じ規則に従います。
magick -size 100x100 radial-gradient:blue rgradient_range1.jpg magick -size 100x100 radial-gradient:yellow rgradient_range2.jpg magick -size 100x100 radial-gradient:green-yellow rgradient_range3.jpg magick -size 100x100 radial-gradient:red-blue rgradient_range4.jpg magick -size 100x100 radial-gradient:tomato-steelblue rgradient_range5.jpg |
![[IM Output]](rgradient_range1.jpg)
![[IM Output]](rgradient_range2.jpg)
![[IM Output]](rgradient_range3.jpg)
![[IM Output]](rgradient_range4.jpg)
![[IM Output]](rgradient_range5.jpg)
透明度のあるグラデーション
IM v6.2.9-8以降、「gradient: 」(および後続の「radial-gradient: 」)画像作成演算子は、透明色および半透明色の使用を理解しています。
|
![]() |
![]() ![]() |
ImageMagick 6.5.4-7より前のバージョンでは、完全な透明度を含むグラデーション(最後の例など)は、一般的に黒いハローを生成していました。 何が起こっていたかというと、生成されたグラデーションは、指定された色から特別な色「 none 」、つまり透明な黒へのグラデーションでした。その結果、色は半透明の黒に向かって陰影を付け、完全に透明になる前に。この問題の解決策は、透明度グラデーションを生成し、それを目的の色で着色することでした。 |
|
![]() |
ヒストグラム調整によるグラデーション
線形グラデーションに何らかの形のヒストグラム調整を適用することで、非線形グラデーションを作成できます。たとえば、シグモイドコントラスト関数を使用して、より自然に見えるグラデーションを作成できます。
|
![]() |
評価/関数グラデーション
評価演算子および関連する関数演算子を使用して、単純な線形グラデーションを変更することもできます。
|
![]() |
|
![]() |
|
![]() |
歪んだグラデーション
回転したグラデーション
疎色メソッド「重心
」(下記参照)は、任意の角度でグラデーションを生成する便利な方法を提供しますが、IMがバージョン6.4.3-0より古い場合は、対角線または回転したグラデーションを生成するために他の方法を使用する必要がある場合があります。たとえば、グラデーション画像のサイズを大きく(2の平方根または1.42を掛ける)、それを45度回転させて、画像を最終サイズに切り抜くことで、対角線グラデーションを作成できます。
|
![]() |
|
![]() |
グラデーションのワーピング
しかし、同じ歪みメソッドを使用して、単純な回転以上のことができます。グラデーションをねじって...
|
![]() |
グラデーションを台形に再マップできます。
|
![]() |
|
![]() |
|
![]() |
radial-gradient:
」は、これらのグラデーションを生成するためのより簡単な方法であると思われます。非常に便利ですが、生成が難しいグラデーションは、極角グラデーションです。このグラデーションの正確な形式は、グラデーションが偶数サイズの画像の中央に配置されるか、奇数サイズの画像に配置されるかによって異なります。たとえば、弧状歪みを使用すると、偶数ピクセル寸法の画像(この場合は76ピクセル)を生成できます。
|
![]() |
-90
」は、「ゼロ」と「最大」が同じ値にラップする「不連続性」の角度を設定します。値「50
」は、最終的な切り抜かれた画像のサイズの1/2より大きくする必要があります。より小さな画像を生成するために、はるかに長いグラデーションを使用したことに注意してください。これにより、特に画像が大きくなるにつれて、結果全体の正確さが向上します。密接に関連する極歪みも、このようなグラデーションを生成できますが、歪みの「中心」の正確な位置を制御できるため、奇数ピクセルサイズの極グラデーション画像を正しく生成できます。この場合、75ピクセルの画像(半径=「36.5
」)です。
|
![]() |
75
」ピクセルの半分である値「36.5
」によって決定されました。「.5
」オフセットは、極中心の正しい処理にとって重要な側面です。デフォルトでは、歪みは画像の最上部に不連続性を配置するため、横方向のワーピングが、弧状歪みによって生成されたものと一致するように、不連続性の角度と位置を修正することに注意してください。次に、角度付きグラデーションを生成しますが、透明な円形マスクを使用するわずかに異なるバリアントを示します。
|
![]() |
49
」は半径から1を引いたものです。したがって、最終的な画像は100x100ピクセルになります。円形の形状とグラデーションをワーピングして、興味深い非線形グラデーションを作成できます。たとえば、波形歪みを使用して円弧状にすると、ほぼ三角形のグラデーションを作成できます。
|
![]() |
|
![]() |
合成によるグラデーション
また、様々な合成方法を組み合わせて、グラデーションを修正することもできます。例えば、Modulus_Add合成方法を使用すると、ベネチアンブラインドのようなグラデーションを作成できます。
|
![]() |
|
![]() |
|
![]() |
その他のカラースペースでのグラデーション
"gradient:
"ジェネレーターは現在、別の色空間で直接グラデーションを生成することはできません(非線形sRGBグラデーション画像のみが作成されます)。ただし、グラデーションを別の色空間に転送して、興味深い効果を生成できます。例えば...
magick -size 30x600 xc:red -colorspace HSB \ gradient: -compose CopyRed -composite \ -colorspace RGB -rotate 90 gradient_rainbow.jpg |
![[IM Output]](gradient_rainbow.jpg)
red
')をHSL色空間に変換します。彩度の高い色であればどれでも使用できます。これにより、画像の彩度と輝度チャネルが適切な値に正しく設定されます。その後、グラデーションが生成され、このHSL色空間画像の「色相」(「赤」に相当)チャネルにコピーされます。そして、HSL画像をRGBに戻すと、完全に彩度の高い色のフルレインボーグラデーションが得られます。別の方法は、これらの色空間の1つに対して適切な値のグラデーションを生成し、画像のカラー空間を変更する("-set
"を使用)ことです。これにより、画像内で作成したカラー値を変更せずにカラー空間が変更されます。これで、RGBに戻すと、同じ値の虹が得られます。
magick -size 30x600 gradient:'#FFF-#0FF' -rotate 90 \ -set colorspace HSB -colorspace RGB \ gradient_rainbow_2.jpg |
![[IM Output]](gradient_rainbow_2.jpg)
|
![]() |
リサイズされたグラデーション
Glenn Randers-Pehrsonによって提案された1つのコツは、2ピクセル幅の非常に小さな画像を作成し、"-resize
"を使用して必要な画像サイズに拡大することでした。リサイズ演算子は、拡大された画像をスムーズにして、より大きなスケールで見栄えが良くなるようにします。このスムージングを使用して、非線形グラデーションを生成します。例えば、ここでは「ポータブルビットマップ」(またはPBM形式)の画像を使用して小さな画像を生成し、拡大のためにIMに供給します。
|
![]() |
![]() ![]() |
'csh'およびその亜種のような一部のシェルでは、上記のサイズ変更ジオメトリ設定の'! '文字を(引用符の中でも)うまく処理できません。したがって、バックスラッシュ '\ '文字が必要になる場合があります。注意が必要です。 |
最初の2ピクセル画像を生成する簡単な方法は、実はグラデーション自体を使用することです!これにより、色を直接指定できます。もちろん、結果も回転させない限り、垂直グラデーションに限定されます。
|
![]() |
もちろん、この手法では1次元に限定されません。ここでは、4ピクセルの「ポータブルグレイマップ」(またはPGM画像形式)を使用して、2次元グラデーションを生成します。
|
![]() |
![]() ![]() |
Network Portable Bitmap画像形式は、スクリプトから画像を生成するのに非常に汎用性があります。これは、画像データを生成または操作する手段として知っておく価値のある形式です。 |
注意深く見ると、グラデーションは拡大されたピクセルの中心から始まり、画像全体を端から端まで覆っていないこともわかります。これは、トライアングルリサイズフィルターを使用するとより明確になります。
|
![]() |
リサイズ演算子は、設定された"リサンプリングフィルター "に従って、これらのピクセル間の色をスムーズにします。フィルターを調整することで、リサイズグラデーションをより端から端まで効果的に生成できます。
|
![]() |
magick xc:black xc:red xc:yellow xc:green1 xc:cyan xc:blue xc:black \ +append -filter Cubic -resize 600x30\! gradient_rs_rainbow.jpg |
![[IM Output]](gradient_rs_rainbow.jpg)
補間されたルックアップグラデーション
"-interpolate
"設定の詳細については、補間設定を参照してください。グラデーションを生成する別の方法は、特別な補間設定を使用することです。この設定は、ピクセルルックアップが整数ではなく、特定のピクセルと正確に一致しない場合に返されるピクセルカラーを決定するために使用されます。その後、補間はルックアップポイントを囲むピクセルに基づいて色を決定します。例えば、デフォルト設定の'bilinear
'では、2つのピクセルの間にあるルックアップの色を線形に決定します。
magick -size 600x30 xc: \( +size xc:gold xc:firebrick +append \) \ -fx 'v.p{i/(w-1),0}' gradient_interpolated.jpg |
![[IM Output]](gradient_interpolated.jpg)
i/(w-1)
'は、2番目の2ピクセル画像で'0.0
'から'1.0
'に変化します。浮動小数点数は、"gradient:
"と非常によく似た、完璧な線形グラデーションを生成します。上記は実際には、(完璧なグラデーションで違いを参照してください)2色画像の補間ルックアップを使用して、Clutで再着色された画像"を使用してグラデーション画像を再着色することとほぼ同等です。
magick -size 30x600 gradient: -rotate 90 \ \( +size xc:gold xc:firebrick +append \) -clut \ gradient_clut_recolored.jpg |
![[IM Output]](gradient_clut_recolored.jpg)
magick -size 30x600 gradient: -rotate 90 -interpolate Bicubic \ \( +size xc:black xc:tomato xc:wheat +append \) -clut \ gradient_clut.jpg |
![[IM Output]](gradient_clut.jpg)
補間ルックアップグラデーションは、2次元に拡張することもでき、純粋に1次元のグラデーションと同じくらい簡単に、正方形の線形グラデーション(双線形補間)を生成できます。
|
![]() |
|
![]() |
ただし、メッシュ補間設定は、リサイズフィルターとしては使用できません。これは、ピクセル内領域を2つのフラットな線形三角形に分割する特別な2次元補間であり、最小の色差を持つ角を接続する対角線に沿ってヒンジで留められています。したがって、2つの色を同じ色にして、"
-interpolate mesh
"を使用すると、非常に異なる2Dグラデーションを生成できます。
|
![]() |
独自のグラデーションを作成する
FX DIY演算子を使用すると、現在のピクセル位置に基づいて、独自のグラデーションやその他の画像生成を定義できます。この演算子は処理する画像が必要なため、グラデーションまたはその他の画像をその画像に合わせて生成できます。つまり、グラデーションを生成する画像のサイズを知る必要はありません!例えば、作業中の画像に合わせてサイズが調整された線形グラデーションを簡単に生成できます。
|
![]() |
![]() ![]() |
グレースケールグラデーションを生成する場合、上記の例のように「G 」または緑のチャネルなど、1つのカラーチャネルのみを生成するように要求するだけで、-fx演算子を3倍高速化できます。このチャネルは、分離して、必要なグレースケール画像を形成できます。これは、特に非常に複雑な"-fx "式を使用する場合に、非常に大きな速度向上をもたらす可能性があります。 |
|
![]() |
|
|
![]() |
2次元の円形線形放射状グラデーション(円錐)はどうでしょう。
|
![]() |
![]() ![]() |
"-fx "関数'rr=hypot(xx,yy) 'は、非常によく使用される式'rr=sqrt(xx*xx+yy*yy) 'を高速化するためにIM v6.3.6に追加されました。また、放射状グラデーションを作成するときに、'xx=i/w-.5 'などの追加の代入を行う必要がなくなりました。 |
1.42
'(またはsqrt(2)
)の値は、画像の寸法に対するグラデーションの全体的なサイズを制御します。このように、グラデーションの半径(黒が中心からどれだけ離れているか)は、隅までの対角線距離です。式から'sqrt() '('hypot() '関数に組み込まれています)を削除して、3Dシェーディング効果に役立つ可能性のある、より興味深い球形のグラデーションを作成することもできます。
|
![]() |
高次関数を使用すると、画像の矩形のエッジの周りにフェードオフ効果を与えることができます。フェードの量を制御するには、パワー値 '4 ' を調整します。
|
![]() |
これは、直接的な数学を使用して生成された角度グラデーションです。
|
![]() |
atan2(y,x)
' 関数は、-PI から +PI までのラジアン単位の角度を返す (manpage を参照) ため、その出力をスケーリングして変換し、0.0 から 1.0 のカラー範囲に正しく収める必要があります。そのため、上記は実際よりもはるかに複雑に見えます。この最後の例は、グラデーションの歪みによってより高速に生成できます。より複雑な DIY グラデーション
余談: このセクションは、疎な色の点の追加前に作成され、その作成に直接的な影響を与えました。 もちろん、FX 関数はカラーグラデーションを生成できます。たとえば、ここに、非常に複雑な FX 式を使用した、距離比に基づくグラデーションがあります。
|
![]() |
![]() ![]() |
画像処理は、このような強い原色をブレンドする際の「sRGB 暗化」を避けるために、線形色空間 (RGB) で実行されました。詳細については、実画像の処理を参照してください。 |
|
![]() |
|
![]() |
hypot()
' 関数は、距離の平方根を生成する必要がないため、使用されなかったことに注意してください。上記は、疎な色メソッドの '逆
' および 'シェパード
' を使用して実装されました。そのため、上記は次を使用して、はるかに簡単に実行できるようになりました...
magick -size 100x100 xc: -colorspace RGB \ -sparse-color Inverse '50,10 red 10,70 yellow 90,90 lime' \ -colorspace sRGB gradient_inverse_alt.gif magick -size 100x100 xc: -colorspace RGB \ -sparse-color Shepards '50,10 red 10,70 yellow 90,90 lime' \ -colorspace sRGB gradient_shepards_alt.gif |
![[IM Output]](gradient_inverse_alt.gif)
![[IM Output]](gradient_shepards_alt.gif)
DIY グラデーションと色相
-- (色相は扱うのが難しい)
余談: これは、興味深い虹効果を生成しようとした一種の失敗の試みでした。失敗しましたが、その失敗から多くのことを学びました。 上記はうまく機能しますが、もっとうまくやりたいと思いました。平均色にマージするスポットを生成するのではなく、ポイント間で明るい虹色のグラデーションを生成できるのではないかと考えました。そこで、色相グラデーションを生成するために、HSB 色空間で 逆距離加重補間を試みましたが、色相の周りに色がより均等に配置されるように、また、カラーホイールを生成する別の方法を提供することを期待して、黄色を青に切り替えました (上記の他の色空間のグラデーションを参照)。
|
![]() |
|
![]() |
この極座標色相から X-Y 座標への変換は、非極座標 RGB 空間で計算を実行するのとある意味で似ており、同じ灰色へのシェード効果を示しています (前の例を参照)。したがって、円形平均を使用することで、実際には HSB 色空間を高歪みの RGB バリアントに変換しているだけであれば、線形 RGB 色空間でタスクを実行し、色を彩度を上げて色相を生成すればどうでしょうか!
magick -size 100x100 xc: -colorspace RGB \ -sparse-color Inverse '50,10 red 10,70 blue 90,90 lime' \ -colorspace sRGB gradient_inverse_RGB.png magick gradient_inverse_RGB.png -colorspace HSB \ -channel GB -evaluate set 100% +channel \ -colorspace sRGB gradient_inverse_RGB_Hue.gif |
![[IM Output]](gradient_inverse_RGB.png)

![[IM Output]](gradient_inverse_RGB_Hue.gif)
![]() ![]() |
画像処理は、このような強い原色をブレンドする際の「sRGB 暗化」を避けるために、線形色空間 (RGB) で実行されました。詳細については、実画像の処理を参照してください。 |
完全なグラデーションの生成 (数学的)
フーリエ変換 (周期的)、画像マッピング、またはグラデーション数学など、完全な数学的グラデーションを生成するには、これまで見てきたグラデーションとは異なる特別なグラデーションが必要です。これはどういう意味でしょうか? これは小さな 1x5 ピクセルの "gradient: " 画像で、個々のピクセル色が見えるようにスケールしました。
|
![]() |
|
![]() |
-0.5
から、画像の高さから 0.5
を引いた値になることに注意してください。これが画像の実際のエッジのピクセル座標です。結果をよく見ると、一番上と一番下のピクセルは白または黒ではないことがわかります。ピクセルは、ピクセルの中心にあるグラデーションの色です。このグラデーションは数学的に正しいため、このグラデーションは、特別な「タイル」または「周期的」な状況で使用すると正しく「タイル」されます。以前のグラデーション画像は正しく「タイル」されません。純粋な白ピクセルが純粋な黒ピクセルの隣にあり、純粋な白と純粋な黒が通常等価な値と見なされる状況では、数学的なサイクルに 1 ピクセルのギャップまたは「分離」が生成されます。より簡単な方法は、1 ピクセル長い "gradient:
" 画像を生成し、いずれかの端から (現在の "-gravity
" 設定に従って) 1 ピクセルを切り取ることです。たとえば、ここでは、黒ピクセル (またはゼロ値) を最終結果でより望ましいことが多いため、一番上の白いピクセルを切り取りました。
|
![]() |
疎なカラーポイント
IM v6.4.3-0 で追加された "-sparse-color
" オペレーターは、画像を受け取り、指定された浮動小数点 'x,y
' 座標で色を設定します。つまり、次の形式です。-sparse-color {method} 'x,y color x,y color x,y color ...'
-channel
" 設定に従って制限されます)は、これらの孤立したカラーポイントとの関係に従ってマッピングされ、それらのポイント間の色が滑らかになります。メソッドは、その関係がどうなるかを定義します。当然、介在する色を定義する方法はたくさんあり、どの方法を選択するかは、達成しようとしているものに大きく依存します。また、2次元補間の完全に自由な形式と実際に分類することもできます(補間、Wikipediaを参照)。画像の拡大、またはリサイズは、実際にはこの特殊なサブセットですが、拡大されるピクセルの完全な固定グリッドから開始します。残念ながら、点のグリッドを扱うように特別に設計されたリサイズフィルターまたは補間メソッドは、疎に分離されたカラーポイントの自由形式のセットに直接変換されることはほとんどありません。つまり、不完全なグリッドを含むリサイズは機能しません。これは、「地理情報システム(GIS)」のメソッドにも関連しており、景観は疎に分離された高さのポイント(厳密なグリッドにはほとんどありません)を使用して測定され、景観の残りの部分はそれらの孤立したポイントから決定されます。同様の状況で、気象学では、孤立した気圧と温度のポイントを持つことが多く、その後補間する必要があります。一般的に、補間後、マップはさらに処理されて、等しい値(高さ、圧力、温度)のポイントを示す「等値線」を生成し、ほとんどの人がよく知っているさまざまな天気図を生成します。この場合、生成された画像は、入力データの単純なグレースケール「高さマップ」、またはおそらく3つの変数をすべて同時に、それぞれを別個の画像「チャネル」に分割したものであると考えることができます。重心(三角形グラデーション)
"Barycentric
" メソッドは、3 つのポイントのみを色の線形三角形にマッピングします。この三角形の外側の色は、これまでどおりに続きます。入力ポイントを小さな円でマークして、表示される色がすべて疎なカラーオペレーターによって生成された補間値であるようにしました。
|
![]() |
![]() ![]() |
画像処理は、このような強い原色をブレンドする際の「sRGB 暗化」を避けるために、線形色空間 (RGB) で実行されました。詳細については、実画像の処理を参照してください。 |
|
![]() |
|
![]() |
![]() ![]() |
上記で使用されている三角形マスクは、描画が図形の周りに余分な線を描画する方法により、1/2 ピクセル大きすぎます。詳細については、描画塗りつぶし境界を参照してください。これは、グラデーションの三角形メッシュを生成する場合に問題になる可能性があります。 |
barycentric
' メソッドは、実際には、線形アフィン方程式を 3 つのカラーチャネルそれぞれに個別にマッピングしたものです。そのため、上記のスリーポイントの例のカラーチャネルをそれぞれ分離すると、各カラーチャネルで 3 つの単純な線形グラデーションが得られます。上記のグラデーションがすべて三角形のエッジの1つに平行にマッピングされたのは、原色を使用したためだけです。つまり、通常はそうではありません。ただし、常に画像の個別の各チャネルで単純な線形グラデーションと、3D 色空間の値の平坦な平面を取得します。重心グラデーションと2色グラデーション
三角形の重心グラデーションのこの平行効果は、実際には非常に役立ちます。2 つのポイントが同じ色に設定されている場合、それらのポイントは、それらのポイントと他の色のポイントの間のグラデーションの「角度」を定義します。たとえば、2 つのポイントを 'red
' にすると、グラデーションは 2 つの 'red
' ポイントに平行になります...
|
![]() |
|
![]() |
斜めグラデーション
これにより、2 色のみを使用して線形の斜めグラデーションを生成する簡単な方法が提供されます。たとえば、任意のサイズの入力画像に対して、ある隅から別の隅に移動する斜めグラデーションを作成する特に優れた方法を次に示します。
magick -size 600x60 xc: -colorspace RGB \ -sparse-color barycentric '0,0 skyblue -%w,%h skyblue %w,%h black' \ -colorspace sRGB diagonal_gradient.jpg |
![[IM Output]](diagonal_gradient.jpg)
magick -size 600x60 xc: -colorspace RGB \ -sparse-color barycentric '0,%h black -%w,0 black %w,0 skyblue' \ -colorspace sRGB diagonal_gradient_2.jpg |
![[IM Output]](diagonal_gradient_2.jpg)
2 ポイントグラデーション
カラーポイントが 2 つしかない場合、IM は 3 番目のポイントを生成して、角度が元の 2 つのポイント間で垂直になるようにします。結果は、非常に自由に制御できる単純な線形グラデーションです。
|
![]() |
magick -size 600x60 xc: -colorspace RGB \ -sparse-color barycentric '0,0 skyblue %w,%h black' \ -colorspace sRGB sparse_bary_two_point_wide.jpg |
![[IM Output]](sparse_bary_two_point_wide.jpg)
双一次(4 ポイントグラデーション)
このメソッドは、3 つのカラーチャネルすべてに対して 4 つのポイントに方程式を適用し、ポイント間およびポイントを超えて均一なカラーグラデーションを生成します。
|
![]() |
重心
' メソッド(上記参照)に置き換えられます。5 つ以上のポイントが与えられた場合、すべてのポイントの最適適合が行われるため、指定されたポイントで与えられた色と実際には一致しない可能性があります。これはお勧めしません。ボロノイ(最も近い色)
"Voronoi
" メソッドは、各ピクセルをユーザーが提供した最も近いカラーポイントにマッピングするだけです。これは基本的に、各ポイントの周りの一連の多角形「セル」に画像を分割します。例えば...
|
![]() |
-scale
" を使用して目的のサイズに戻します。
|
![]() |
![]() ![]() |
このような強い原色のブレンド中に「sRGB が暗くなる」のを避けるために、すべての画像処理は線形色空間(RGB)で実行されました。詳細については、実像の処理を参照してください。 |
|
![]() |
|
![]() |
-blur
" が大きいほど、さまざまな「セル」間のグラデーションが大きくなります。ただし、エッジ(および別のポイント)に近い場合、小さい色付きセルを保持したり、元のポイントが指定された色のままになることを保証したりできない可能性があることに注意してください。Fred Weinhaus が開発した特別な「線形ぼかし」手法を使用することで、セル間に固定幅の線形グラデーションを生成できます。
|
![]() |
autotrace
' 設定を "-corner-threshold 120
" で調整する必要があることがわかりました。シェパード(色のスポット)
"Shepards
" メソッドは、与えられた各ポイントまでの距離の逆二乗の比率を使用して、各ポイントでのキャンバスの色を決定します。数学がどのように実行されるかの例については、上記のより複雑なDIYグラデーションを参照してください。これは、各ポイントに色のスポットライトがあり、光が無限大の与えられたすべての色の均一な平均に広がるにつれて、互いに相互作用するようなものです。
|
![]() |
![]() ![]() |
画像処理は、このような強い原色をブレンドする際の「sRGB 暗化」を避けるために、線形色空間 (RGB) で実行されました。詳細については、実画像の処理を参照してください。 |
逆(色の鋭いポイント)
"Inverse
" メソッドは、与えられたポイントのより直接的な逆距離重み付けを使用することを除いて、実際には "Shepards
" と同じです。数学がどのように実行されるかの例については、上記のより複雑なDIYグラデーションを参照してください。これは、ImageMagick バージョン 6.6.9-7 でのずっと後の追加機能でした。例えば...
|
![]() |
magick -size 100x100 xc: -colorspace RGB \ -sparse-color Inverse '45,45 red 55,55 lime' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 45,45 45,47 circle 55,55 55,57' \ sparse_inverse_near.png magick -size 100x100 xc: -colorspace RGB \ -sparse-color Inverse '30,30 red 70,70 lime' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,30 30,32 circle 70,70 70,72' \ sparse_inverse_far.png |
![[IM Output]](sparse_inverse_near.png)
![[IM Output]](sparse_inverse_far.png)
|
![]() |
シェパード法
」にも適用されます! シェパード法によるパワーファクター
シェパード法と逆距離の疎な色メソッドは、実際には同じですが、逆距離の重みに適用される「パワーレベル」が異なります(それぞれ2.0と1.0)。IM v6.8.0-10以降では、「shepards:power
」という操作上の定義を使用してこのパワーレベルを設定できます。これは「シェパード法
」で使用されます。例えば
magick -size 100x100 xc: -colorspace RGB -define shepards:power=0.5 \ -sparse-color Shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,10 30,12 circle 10,80 10,82' \ -draw 'circle 70,60 70,62 circle 80,20 80,22' \ sparse_shepards_pow0.5.png magick -size 100x100 xc: -colorspace RGB -define shepards:power=1 \ -sparse-color Shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,10 30,12 circle 10,80 10,82' \ -draw 'circle 70,60 70,62 circle 80,20 80,22' \ sparse_shepards_pow1.png magick -size 100x100 xc: -colorspace RGB -define shepards:power=2 \ -sparse-color Shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,10 30,12 circle 10,80 10,82' \ -draw 'circle 70,60 70,62 circle 80,20 80,22' \ sparse_shepards_pow2.png magick -size 100x100 xc: -colorspace RGB -define shepards:power=3 \ -sparse-color Shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,10 30,12 circle 10,80 10,82' \ -draw 'circle 70,60 70,62 circle 80,20 80,22' \ sparse_shepards_pow3.png magick -size 100x100 xc: -colorspace RGB -define shepards:power=8 \ -sparse-color Shepards '30,10 red 10,80 blue 70,60 lime 80,20 yellow' \ -colorspace sRGB -fill white -stroke black \ -draw 'circle 30,10 30,12 circle 10,80 10,82' \ -draw 'circle 70,60 70,62 circle 80,20 80,22' \ sparse_shepards_pow8.png |
![]() パワー 0.5 |
![]() パワー 1.0 (逆距離) |
![]() パワー 2.0 (シェパード法) |
![]() パワー 3.0 |
![]() パワー 8.0 |
スパースカラー手法のまとめ
比較のために、さまざまな4点の「-sparse-color
」画像の繰り返しを以下に示します。
![]() ボロノイ |
![]() ボロノイ(ぼかし) |
![]() シェパード |
![]() 逆 |
![]() 双一次 |
![]() ボロノイ |
![]() ボロノイ(ぼかし) |
![]() シェパード |
![]() 逆 |
![]() 重心 |
ボロノイ
」、「シェパード法
」、および「逆距離
」メソッドのみが5点以上に適しています。より多くの「-sparse-color
」メソッドが計画されています。何かアイデアがあれば、私にメールを送ってください。 チャンネルと疎な色
「-sparse-color
」演算子は、「-channel
」設定の影響を受けます。つまり、その設定を使用して、その効果を単一のチャンネルに制限したり、透明度チャンネルに拡張したりできます。「-channel
」設定を使用して、1つのチャンネルのみを操作し、そのチャンネルを「-separate
」することで、グレースケール画像の処理を高速化することもできます(詳細については、チャンネル処理を参照してください)。例えば..
|
![]() |
-channel
」設定で疎な色を使用して、任意の画像に透明なグラデーションを簡単に追加できるようになりました。たとえば、ここで、内蔵の「rose:
」画像の対角線に沿って50%の透明度になるように整列された透明な対角グラデーションを追加します。
|
![]() |
![]() ![]() |
色「Opaque 」は、「Black 」の別の名前です。基本的には、完全に不透明な色を指定することだけに興味があり、実際の色自体は重要ではない場合に使用されます。色「Transparent 」も同様です。代わりに「White 」と「None 」を簡単に使用できたでしょう。 |
![]() ![]() |
IM v6.6.8-5より前は、「-channel 」設定で選択されていないチャンネルはゼロ(黒)の値にリセットされていました。これにより、その効果的な有用性が大幅に制限されていました |
-channel
」設定、およびそのチャンネルが処理中の画像で「アクティブ」かどうかによって異なります。最も簡単な方法は、処理を単一のチャンネルに制限することです。また、色名ではなく生の数値を使用する場合、透明度の値は「マット」値(0=不透明)であり、「アルファ」値(1=不透明)(IMv7の場合)ではないことに注意してください。したがって、上記では、色名の代わりに数値を使用できたはずです...
-channel A -sparse-color Bilinear '0,0 1.0 -%w,%h 1.0 %w,%h 0.0' |
塗りつぶし演算子としてのスパースカラー
疎な色演算子を作成した元の理由の1つは、わずかな数の固定された色の点を含む画像を与えて、これから残りの未定義の色を「塗りつぶす」ことができるようにするためでした。たとえば、ここに少数のピクセルを描画しました。「+antialias
」設定は、半透明または混合色を描画しないように特別にオフに設定されていたため、画像には指定された4つの正確な色のみが含まれており、他の色は含まれていません。
|
![]() |
シェパード法
」を使用して、他のすべての色を塗りつぶすことができます。
|
![]() |
sed
」コマンドは、列挙テキストファイル形式を取得し、最初のヘッダー行と透明度を含む行を削除してから、ピクセル座標と色のリストに再フォーマットします。そのリストは、「@-
」引数を使用して疎な色演算子に「パイプ」されます。はい、上記は非常にトリッキーですが、機能します。少なくとも、ごく少数の点の場合です。ただし、提供される点が多いほど、操作は遅くなります。これは、疎な色が、画像やモルフォロジー指向ではなく、その処理において「点」指向であるためです。最終的には、モルフォロジー指向の「穴埋め」メソッドのセットを提供して、上記の画像をそのまま与えるだけで、透明な領域を自動的に塗りつぶせるようにしたいと考えています。この点抽出手法をEdgeInモルフォロジーメソッドと組み合わせて、オブジェクトまたは穴の端の周囲のピクセルを抽出できます。これにより、欠落している背景または穴を「塗りつぶす」ことができます(モルフォロジーとチャンネルに示すように)。例えば...
magick figure.gif -channel A -morphology EdgeIn Diamond shape_edge_pixels.gif magick shape_edge_pixels.gif txt:- |\ sed '1d; / 0) /d; s/:.* /,/;' | \ magick shape_edge_pixels.gif -alpha off \ -sparse-color shepards '@-' shape_edge_in_lights.png magick shape_edge_in_lights.png figure.gif -composite shape_in_lights.png |
![[IM Output]](figure.gif)

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

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

![[IM Output]](shape_in_lights.png)
スパースカラーのシェパード法、ぼかしの代替
「-sparse-color
」を使用する代わりに、透明な背景にピクセルがある画像を取得してぼかし処理をすることができます。その後、透明度は破棄されます。この問題は、元の色が保持されないことと、どの「sigma」値を使用する必要があるのかが正確にわからないことです。また、各色がどれだけ「近い」かを考慮に入れていません。そのため、互いに近い(「sigma」値未満の)2つの色付きピクセルは、互いに押しつぶし合い、一緒にぼかされます。より良い方法は、徐々に小さな「sigma」値を持つ複数のレイヤーのぼかし画像を生成し、一番上に元のぼかしのない画像を配置することです。
|
![[IM Output]](sparse_source.gif)

![[IM Output]](sparse_blur_layered.png)
シェパード法
」の結果と同等ですが、正確ではありませんが、非常に近いものです。ただし、多くの入力ピクセルが関与する場合は、はるかに高速になる可能性があります。これは、個々のポイントを使用して計算するのではなく、画像(モルフォロジー)指向であるためです。その他のレイヤー化されたぼかし手法は、サイズ変更を使用して、ぼかし画像の「ピラミッド」を生成することです。この手法については、サイズ変更を使用した大きなぼかしで詳しく説明しています。
|
![]() |
-layers RemoveDups
」は、複数の「クローンサイズ変更」操作によって生成された余分な「単一の平均ピクセル」画像をすべて削除します。次に、画像はガウシアンサイズ変更フィルター(ぼかしと同等)を使用して元のサイズに戻されます。画像順序は、元の画像を一番上に配置し、よりぼやけたレイヤーを下にして、以前のようにフラット化されるように反転されます。これは、画像を1回だけ読み取り、すべての作業を単一のコマンドで実行できるという利点があります。また、サイズ変更が各ステップで画像の半分になるだけであり、非常に大きなシグマでの遅いぼかしを回避できるため、特に大きな画像でも非常に高速に動作します。この方法の唯一の欠点は、「ぼかし」画像を復元し、生成するサイズ変更クローンの数(最大の寸法のLog2+1)の大まかなアイデアを把握する必要があることです。ただし、サイズ変更クローンのやりすぎは、入力画像がすでに最小の1ピクセル画像にサイズ変更されている場合、サイズ変更が単に「何もしない」になるため、パフォーマンスに大きな影響を与えることはありません。余分で役に立たない「サイズ変更された画像レイヤー」は、「-layers RemoveDups
」を使用して自動的に処理されます。唯一の実際的な問題は、サイズが2のべき乗ではない画像を処理するときに、サイズ変更された画像が「同期しなくなる」可能性があることです。この問題がどれほど深刻かは不明ですが、それらの画像も最もぼやけているため、それほど大きくないはずです。もちろん、これにはまだ「シェパード法
」の「漏れ」問題があるため、この問題をより詳しく見てみましょう。 シェパード法による「リーク」
「シェパード法
」には「境界」の理解がないため、「色の線」の反対側にある色が漏れたり、その線を越えて「にじみ出たり」します。最終的には、遠く離れると、すべてのピクセルの純粋な平均色が得られます。これは常に望ましい結果ではありません(ただし、場合によっては望ましい)。この例では、「Red
」曲線が「White
」線に近づくほど、色が2つの線を越えて遠くに「漏れ」、ピンク色を生成します。
|
![]() |
|
![]() |
プラズマ画像
プラズマグラデーション
グラデーションが色の滑らかな範囲を提供する一方で、別の画像作成演算子 "plasma:
" は異なる種類のグラデーションを提供します。これは、画像のランダムな色の背景を生成するのに理想的です。まず、"plasma:
" はランダム化された画像であることを指摘しておく必要があります。そのため、実行するたびに異なる画像が生成されます。たとえば、ここでは3つの別々の「標準」プラズマ画像を生成しますが、同じコマンドを使用したにもかかわらず、各画像は互いに異なります。
|
![[IM Output]](plasma1.jpg)
![[IM Output]](plasma2.jpg)
![[IM Output]](plasma3.jpg)
gradient:
" と同様に、上部に白、下部に黒で始まることがわかります。あまり知られていないのは、線形グラデーションの場合とまったく同じように、プラズマグラデーションの色を指定できることです。
|
![[IM Output]](plasma_range1.jpg)
![[IM Output]](plasma_range2.jpg)
![[IM Output]](plasma_range3.jpg)
![[IM Output]](plasma_range4.jpg)
![[IM Output]](plasma_range5.jpg)
tomato
' や 'steelblue
' のような中間色のほうが、'red
' や 'blue
' のような純粋な色よりも効果的であることがわかります。プラズマで同じ色を2回使用すると、主にその色を背景として、元の色に近いランダムな色の斑点が現れます。
|
![[IM Output]](plasma_black.jpg)
![[IM Output]](plasma_grey.jpg)
![[IM Output]](plasma_white.jpg)
![[IM Output]](plasma_yellow.jpg)
![[IM Output]](plasma_tomato.jpg)
![[IM Output]](plasma_steelblue.jpg)
grey
」プラズマは、特に素晴らしく、玉虫色の「真珠母」のような効果を与えています。これは基本的に、グレーには「plasma:
」が生成する色の自由度が完全に与えられているためです。完璧な50%グレーのプラズマを正規化すると、白と黒を含む、色の全範囲にわたって特に均一な多色プラズマ画像が生成されます。
|
![]() |
または、色のコントラストを広げて、極端にすることなく、より大胆にすることもできます。
|
![]() |
フラクタルプラズマ
プラズマジェネレーターには、非常にカラフルな効果を生み出す特別なフラクタルモードもあります。生成される色は、より誇張された色の変化を生み出すように強化されています。
|
![[IM Output]](plasma_fractal1.jpg)
![[IM Output]](plasma_fractal2.jpg)
![[IM Output]](plasma_fractal3.jpg)
プラズマ画像は少し「ノイズが多い」と感じることがよくあります。そのため、通常は "
-blur
" を使用して少しスムージングすると効果的です。ここでは、上記の中央のプラズマ画像からノイズをスムージングしました。
|
![]() |
"-paint " を使用して、ランダムな色の斑点を作成できます。
|
![]() |
または、低レベルのノイズを除去するために "-blur " を使用した後、"-emboss " 画像演算子を使用して、色をより鮮明で円形にすることもできます。
|
![]() |
"-blur " の後に "-sharpen " を使用すると、"-emboss " で生成したよりもパステル調のカラーパターンを生成できます。
|
![]() |
背景パターンとして、渦巻きプラズマグラデーションを生成すると特に素晴らしいと思います。
|
![]() |
グレースケールプラズマ
さて、プラズマジェネレーターは、純粋な黒一色の色でも、常に色を生成します。ただし、純粋なグレースケールプラズマを生成すると便利なことがよくあります。これには、2つの簡単な方法があります。最も簡単な方法は、プラズマ画像を取得してグレースケールに変換することです。
|
![]() |
|
別の方法は、カラーチャネルの1つを他の2つにコピーして、より強力な単一層の効果を得ることです。
|
![]() |
|
最後のテクニックは、プラズマで "-shade " を使用することです。
|
![]() |
-shade
" は、より「まだらのプラズマ」効果を生み出すようにしか見えません。色の変化が非常に誇張されたフラクタルプラズマを使用する代わりに、定色プラズマ法を使用してグレースケールプラズマを作成できます。副作用として、この方法では、生成されたグレースケールプラズマ画像の全体的な明るさを制御することもできます。
|
![[IM Output]](plasma_grey0.jpg)
![[IM Output]](plasma_grey1.jpg)
![[IM Output]](plasma_grey2.jpg)
![[IM Output]](plasma_grey3.jpg)
![[IM Output]](plasma_grey4.jpg)
|
![[IM Output]](plasma_grey5.jpg)
![[IM Output]](plasma_grey6.jpg)
![[IM Output]](plasma_grey7.jpg)
![[IM Output]](plasma_grey8.jpg)
![[IM Output]](plasma_grey9.jpg)
プラズマ画像のシードまたは繰り返し
"plasma:
" は、ほぼ純粋な黒または純粋な白、またはその他の色(純粋である可能性は低いですが)の領域を生成できることを覚えておいてください。また、すべて1つの色で構成される画像が得られる可能性は低いですが、可能性のある結果でもあります。そのため、良い結果が得られたら、後で再利用するために保存しておくとよいでしょう。このため、プラズマ画像を使用するスクリプトには、このようなランダム化された画像を生成および再利用するためのオプションを含めたい場合があります。つまり、再利用を可能にするために、プラズマ画像の生成をその画像を使用する他の部分から分離したい場合があります。ただし、より簡単な手法は、IM乱数ジェネレーターを「シード」または初期化して、'plasma: ' が同じ「ランダム化された」画像を生成するようにすることです。これにより、スクリプトまたはプログラムを調整して、優れたまたは興味深い着色または効果を繰り返し生成できます。
|
![]() |
-seed
" 番号を変更しない限り、右下隅に常に「赤」の領域が表示されます。興味深いことに、異なる初期化カラーグラデーションで同じシードを使用すると、ランダムではあるものの、内部パターンが類似した画像のセットを生成できます。
magick -size 100x100 -seed 4321 plasma:grey-grey plasma_rnd1.jpg magick -size 100x100 -seed 4321 plasma:white-blue plasma_rnd2.jpg magick -size 100x100 -seed 4321 plasma:green-yellow plasma_rnd3.jpg magick -size 100x100 -seed 4321 plasma:red-blue plasma_rnd4.jpg magick -size 100x100 -seed 4321 plasma:tomato-steelblue plasma_rnd5.jpg |
![[IM Output]](plasma_rnd1.jpg)
![[IM Output]](plasma_rnd2.jpg)
![[IM Output]](plasma_rnd3.jpg)
![[IM Output]](plasma_rnd4.jpg)
![[IM Output]](plasma_rnd5.jpg)
-fx
" 'rand()
' 関数、"-virtual-pixel
" 'random
' 設定、"-random-threshold
" ディザー演算子、および "-noise
" 演算子など、乱数ジェネレーターを使用できます。そのため、乱数ジェネレーターを特定で使用する直前にジェネレーターをシードすることをお勧めします。IM v6.3.4-3の時点では、"+seed
" を使用してジェネレーターを再ランダム化することもできます。したがって、この設定を「シードされたプラズマ」の後に配置すると、後続の演算子が、必要に応じてランダム化された結果を正しく生成することが保証されます。デフォルトでは、IMが起動するとシードがランダム化されるため、通常は "+seed
" を使用して自分でランダム化する必要はありません。プラズマの使用に関する問題
"plasma:
" 画像で避けるべき問題の1つは、高いアスペクト比で生成することです。これは、通常のプラズマカラー効果を歪ませ、色を針のような筋に引き伸ばす傾向があります。これに対する簡単な解決策はないため、これが必要でない場合は、注意が必要です。また、プラズマ画像には、存在してはならない左上から右下への明確な斜めの歪みもあります。つまり、アルゴリズムに何らかの「空間バイアス」の欠陥があります。たとえば、Thomas Maus <thomas.maus_AT_alumni.uni-karlsruhe.de> が指摘したように、同じプラズマ画像をミラーリングして追加すると、結果の画像には常に明確な「V」が表示されます...これは起こるべきではありません。しかし、問題はあまりにも深く、プラズマジェネレーター関数全体を基本的に完全に書き直さなければ修正できないようです。ランダム画像
生のランダムノイズ
IM v6.3.5以降では、ノイズジェネレーター、"+noise " メソッド 'Random ' を使用して、既存の画像から完全にランダムな画像を生成できます。
|
![]() |
IMがこれよりも古い場合は、低速の DIY FX演算子、"-fx " を使用して、純粋なランダムノイズ画像を生成できます。
|
![]() |
または、高速化のために、"-spread " 演算子を使用して、グラデーション(3つのカラーチャネルで別々に)または他の画像を使用してランダム化できます。
|
![]() |
ランダムなスペック(ピクセルダスト)
散在するランダムなピクセルの画像を生成することも非常に役立ちます。ランダム画像の 3 つのカラーチャネルは、それぞれ独立したランダムなグレースケール画像と考えることができ、これらのチャネルはさまざまな方法でマージできることを覚えておいてください。たとえば、カラーチャネル(「G 」または緑チャネル)を最初に閾値処理し、グレースケール画像として分離することで、ランダムなドットのマスクを生成できます。
|
![]() |
G
」または緑チャネル)を使用して、別のカラーチャネル(「R
」または赤チャネル)からランダムな値を選択することもできます。さまざまな画像合成手法を使用します。
magick random.png -channel G -threshold 5% -negate \ -channel RG -separate +channel \ -compose Multiply -composite random_black.png magick random.png -channel G -threshold 5% \ -channel RG -separate +channel \ -compose Screen -composite random_white.png magick random.png -channel G -threshold 5% -negate \ -channel RG -separate +channel \ -compose CopyOpacity -composite random_trans.png |
![[IM Output]](random.png)

![[IM Output]](random_black.png)
![[IM Output]](random_white.png)
![[IM Output]](random_trans.png)
-seed
」設定を使用して、乱数ジェネレーターを事前に初期化することもできます。これにより、プラズマ画像の場合と同様に、特定のマシンで同じランダム画像を繰り返し生成できます。ぼやけたランダム画像(ランダムなブロブ)
ランダム画像を直接使用して斑点効果を作成できますが、純粋にランダムな画像は一般的にあまり役に立ちません。ただし、純粋にランダムな画像をぼかすことで、近くのピクセルが関連付けられるような「近傍」順序が導入されます。たとえば、ここでは 1 つのランダムな画像のみをぼかすことで、ランダムな値によって大きな「ブロブ」またはまだらな色が生じます。
magick random.png -virtual-pixel tile -blur 0x1 -auto-level random_1.png magick random.png -virtual-pixel tile -blur 0x3 -auto-level random_3.png magick random.png -virtual-pixel tile -blur 0x5 -auto-level random_5.png magick random.png -virtual-pixel tile -blur 0x10 -auto-level random_10.png magick random.png -virtual-pixel tile -blur 0x20 -auto-level random_20.png |
![[IM Output]](random.png)

![[IM Output]](random_1.png)
![[IM Output]](random_3.png)
![[IM Output]](random_5.png)
![[IM Output]](random_10.png)
![[IM Output]](random_20.png)
-blur
」演算子は強いエッジ効果を持つため、避けるのが最善です。ボーナスとして、「-virtual-pixel
」設定を「tile
」に変更すると、ランダム化された画像はタイル化可能になり、色が画像境界を越えて折り返されます。このタイル化機能は、ランダムなプラズマ画像では現在不可能であり、純粋なランダム画像が非常にランダムであるという固有の結果です。ぼやけたランダム色相私が特に気に入った、ぼやけたランダムノイズ画像の特定の変換の 1 つは、値をHSBカラーの色相にマップすることです。
|
![]() |
私が知っている最良の解決策は、画像の3つすべてのランダムチャネルを(モジュラス加算合成を使用して)追加して、値の範囲を拡張することです。これにより、ぼやけたスポットが小さくなるという副作用もありますが、少なくとも、よりダイナミックな範囲の虹色が得られます。何か良いアイデアはありますか?
|
![]() |
magick random.png -channel G -separate random_0_gray.png magick random_1.png -channel G -separate random_1_gray.png magick random_3.png -channel G -separate random_3_gray.png magick random_5.png -channel G -separate random_5_gray.png magick random_10.png -channel G -separate random_10_gray.png magick random_20.png -channel G -separate random_20_gray.png |
![[IM Output]](random_0_gray.png)
![[IM Output]](random_1_gray.png)
![[IM Output]](random_3_gray.png)
![[IM Output]](random_5_gray.png)
![[IM Output]](random_10_gray.png)
![[IM Output]](random_20_gray.png)
magick random_0_gray.png -threshold 50% random_0_thres.png magick random_1_gray.png -threshold 50% random_1_thres.png magick random_3_gray.png -threshold 50% random_3_thres.png magick random_5_gray.png -threshold 50% random_5_thres.png magick random_10_gray.png -threshold 50% random_10_thres.png magick random_20_gray.png -threshold 50% random_20_thres.png |
![[IM Output]](random_0_thres.png)
![[IM Output]](random_1_thres.png)
![[IM Output]](random_3_thres.png)
![[IM Output]](random_5_thres.png)
![[IM Output]](random_10_thres.png)
![[IM Output]](random_20_thres.png)
ランダムな粒度(カオスの中の秩序)
ぼやけたランダム画像はすべて同じ初期ランダム画像から生成されたため、すべて関連付けられていることを覚えておいてください。ただし、生成される新しいランダム画像はすべて完全に異なるパターンを持ちますが、パターンは構造が多かれ少なかれ似ています。まず、最初から「ぼやけたランダム画像」を生成する完全な例を示します...
|
![]() |
-channel
」設定の多用は、画像の全体的な生成を3倍高速化するために重要です。チャネル分離により、純粋なグレースケールの結果が得られます。必要に応じて、「-channel
」設定の両方を省略することもできます。これにより、完全に分離した3つの異なる「ぼやけたランダム画像」が生成されます。画像にはいくつかの重要な特徴があり、画像を3つの等しい色のセットに分割する(ポスタリゼーションと呼ばれる手法を使用)と、黒と白の各ゾーン内に、より多くの円のブロブまたは「顆粒」が表示されます。たとえば...
|
![]() |
ランダム画像の「粒度」(またはぼかし係数)
内の円形構造のサイズを決定します
もちろん、「ぼかし係数」または「粒度」が小さいほど、曲線は小さく、またはきつくなり、「内の円形構造のサイズを決定します
0
」の値に達するまで、画像内のすべての凝集または「ブロブ」が消え、純粋なランダムな「ノイズ」、「雪」、または「ピクセルダスト」タイプの効果が残ります。余談:実際には、「顆粒」自体のサイズは、それらを生成するために使用される閾値係数によって異なります。係数が実際に記述しているのは、白と黒の領域の中心間の平均距離です。値が大きいほど距離が大きくなり、スポットは、その増加した距離に対応するために大きく、より分散している必要があります。これは、以下に示すランダムリップルを見始めると、より明らかになります。
また、50%のソラライズ操作をいくつかの追加のレベル調整と組み合わせて使用して、画像から十分に分離された黒と白の顆粒を抽出することもできます。
たとえば、ここに、「8 」の粒度と、「25% 」のブロブしきい値で、画像の黒と白の両方の部分から白いスポットを生成する完全な例を示します。
|
![]() |
![[IM Output]](animated_granularity.gif)
animate_granularity
」を使用して生成されました。同じランダム画像がソースとして使用されているため、「顆粒」またはスポットは実際には移動しませんが、粒度が増加すると、より大きな「顆粒」を生成するために、ある程度成長したり、消えたりします。また、アニメーションの色数を減らしましたが、完全なランダム画像の構造は、実際には白と黒の顆粒の2つのセットの間の滑らかなグラデーションであることに注意してください。このグラデーションが、他の手法で画像を役立てるものです。ランダムフラックス(アニメーションサイクル)
上で見たように、粒や点は実際にはそれほど大きく動きません。しかし、アニメーション効果を出すには、時間とともにスムーズに動くパターンが必要です。また、そのパターンが単に前後に動くだけであってほしくありません。そして最後に、アニメーションがループするときに、その動きのパターンが突然ジャンプしたり、ぎくしゃくしたりしてほしくありません。そこで必要なのは、スムーズに繰り返されるランダムパターンを生成する方法です。これは難しい注文です。また、スムーズにする必要があるので、すべてのパターンを同じ単一のランダム画像から生成する必要があります。ここに、そのようなランダムパターンを生成できるアイデアがあります。各ランダムピクセル値をランダムな強度と考えるのではなく、代わりにその値を、そのピクセルが最大または最小強度になる「時間」値と考えるのです。つまり、その値を「波」上の位置に魔法のように変換します。したがって、各ピクセルはサインカーブの何らかの「位相」を表します。これは複雑に聞こえますが、実際にはそうではありません。単にランダム画像を正弦波関数のソース画像として使用します。次に、時間シーケンス内の各画像に対して、その時間サイクル内の特定のポイントの「位相」を設定します。
magick random.png -function Sinusoid 1,{time} \ ... do granular blurring, and other processing ... |
{time}
」は、完全なアニメーションサイクルで「0
」から「360
」まで変化します。その結果、各ピクセルは「静的な」ランダム値を持つのではなく、時間とともに黒と白の間をループで循環するようになります。各ピクセルはこの同じサイクルに従いますが、各ピクセルは完全に異なる「位相」を持ち、他のすべてのピクセルとは独立してサイクルします。つまり、画像はまだランダムですが、提供された「時間」値でスムーズに変化します。科学的な考え方をする人にとっては、これは原子以下のレベルに存在する「量子フラックス」を見ているようなもので、そこでは空間は通常スケールで見られる「静的」状態とはかけ離れています。そのため、「ランダムフラックス」という名前が付けられています。たとえば、12枚の画像のタイムシーケンスを生成してみましょう...
|
![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
|
![]() |
![]() ![]() ![]() ![]() ![]() |
![]() |
180
」(右下)では、実際には最初の画像(左上)の正確なネガが得られるということです。つまり、「白」の粒子が「黒」の粒子になり、その逆も同様です。実際、アニメーションの後半全体は、実際には前半のネガです。これは、単純な「ランダムフラックス」アニメーションの生成時間を短縮するために使用できます。画像は180度の位相でネガであるため、各「白」の粒子は、隣接する「黒」の粒子と場所を交換するようにゆっくりと移動することに気付くでしょう。しかし、後半全体は前半のネガであるため、単に前後にシャッフルするだけでなく、元の画像に戻るために移動し続けたり、ループで円を描いたり、適切にフェードアウトおよび表示したりする必要があります。言い換えれば、白と黒の粒子は、はるかに複雑なサイクルで移動します。
![[IM Output]](flux_anim.gif)
たとえば、単に「白」の粒子の動きだけを示してみましょう...
|
![]() |
|
![]() |
より長いサイクリックシーケンスの動きを予測不能にするには、複数のランダム画像からの複数の正弦波サイクルを組み合わせるために、いくつかのグラデーション数学を使用することもできます。または、同じランダム画像の他のカラーチャネルを使用することもできます。
FUTURE: Create even less predictable, long time 'harmonic' cycles.
ランダムな波紋
ぼかしランダム画像に別のバリエーションを追加することで、これらの画像をより便利にし、粒度以外に別の制御変数を与える、より高いレベルの複雑さを追加できます。しかし、最初に、ランダム画像が明るい領域と暗い領域だけで構成されているのではなく、これらの領域の間の傾斜も含まれていることを覚えておく必要があります。その傾斜を正弦波関数への入力として使用すると、画像内のスポットの間にリップルを生成できます。正弦波関数のこの使用法と、前のランダムフラックスの例との主な違いは、今回は、関数がブラーを使用してスムージングされた後ではなく、前に追加されていることです。また、この場合、より重要なのは2番目の「位相」値ではなく、「周波数」値です。例:
magick random_10_gray.png -function Sinusoid 1,90 ripples_1.png magick random_10_gray.png -function Sinusoid 2,90 ripples_2.png magick random_10_gray.png -function Sinusoid 3,90 ripples_3.png magick random_10_gray.png -function Sinusoid 4,90 ripples_4.png |
![[IM Output]](random_10_gray.png)

![[IM Output]](ripples_1.png)
![[IM Output]](ripples_2.png)
![[IM Output]](ripples_3.png)
![[IM Output]](ripples_4.png)
1
」の場合、基本的にはソース画像内の明るい「塊」と暗い「塊」の両方を白にし、それらの間に暗い隙間を残します。「周波数」が「2
」の場合、その暗い隙間に追加の「リッジ」または「リップル」が絞り込まれます。周波数が大きくなるにつれて、元の画像の最も明るい領域と最も暗い領域の間にますます多くの「リップル」が発生し、より複雑になります。リッジの数が増えるにつれて、画像内の元の「塊」や「粒子」が見えなくなる可能性があります。これは、レベル調整を使用してグラデーションを「クリッピング」するか、シグモイドコントラストを使用して中間トーンを圧縮することで、リップルを追加する前にグラデーションを修正することで解決できます。これにより、「粒子」に質量または領域が与えられ、リップルの間の「静止」領域が提供されます。
magick random_10_gray.png -level 25% random_enhanced.png magick random_enhanced.png -function Sinusoid 4,90 ripples_4e.png magick random_10_gray.png -sigmoidal-contrast 10,50% random_sigmoidal.png magick random_sigmoidal.png -function Sinusoid 4,90 ripples_4s.png |
![]() ![]() |
![]() ![]() ![]() |
![]() ![]() ![]() |
上記の例で使用されている2番目の値「
90
」は、正弦波関数の「位相」です。これは、ソース画像内の「黒」の粒子が「リップル」画像でどの色になるかを決定します。
magick random_enhanced.png -function Sinusoid 3,0 ripples_3e000.png magick random_enhanced.png -function Sinusoid 3,90 ripples_3e090.png magick random_enhanced.png -function Sinusoid 3,180 ripples_3e180.png magick random_enhanced.png -function Sinusoid 3,270 ripples_3e270.png |
![[IM Output]](random_enhanced.png)

![[IM Output]](ripples_3e000.png)
![[IM Output]](ripples_3e090.png)
![[IM Output]](ripples_3e180.png)
![[IM Output]](ripples_3e270.png)
90
」の場合、両方とも白になります。ただし、「0.5 」のような分数の「周波数」値を適用すると、「白いソース」の粒子は、「黒いソース」の粒子のネガになります(「位相」によって決定されます)。
|
![]() |
0.5
」の分数を持つ「周波数」値を使用すると、各スポットの周りの最初のリップルは、「位相」に応じて、すべて白またはすべて黒になります。![]() ![]() |
整数または「0.5 」以外の他の「周波数」は、2つの粒子のセットが何らかの方法で同期されないため、推奨されません。同様に、リップルアニメーションを生成する場合を除き、90度の倍数以外の位相は推奨されません(下記参照)。 「分散マップ」(下記参照)を生成する場合は、「 0 」の位相値が推奨されます。これにより、強化された「粒子」領域内の歪みが最小限に抑えられます。 |
|
![]() |
たとえば、ここで、上で作成した前のフラックスアニメーションを取得し、リップルを追加します。この場合、リップルはフラックスアニメーションのグラデーションが移動するだけで移動します。
|
![]() |
|
![]() |
今後: 分散マッピング歪みへのリップルランダム画像の利用.
タイル状キャンバス
タイル画像は非常に大きい場合も非常に小さい場合もあり、広い領域を覆うために横方向および縦方向に並べて配置するように設計されています。World Wide Webのおかげで、利用可能なタイル画像が爆発的に増加しています(必要なものを見つけるのはまた別の問題です)。以下は、Anthonyのアイコンライブラリからコピーしたタイル画像のセットで、これらのサンプルページ全体で使用します。
![]() bg.gif |
![]() tile_aqua.jpg |
![]() tile_water.jpg |
![]() rings.jpg |
![]() tile_disks.jpg |
![]() tile_weave.gif |
-tile
」することで、元の背景画像を完全に置き換えることができます(「Copy
」合成演算子を使用)。 (詳細については、タイル合成を参照してください)。
|
![]() |
別の方法は、「tile: 」コーダーを使用してタイル画像を読み込み、特定のサイズにタイル状に配置することです。
|
![]() |
![]() ![]() |
「tile: 」コーダーは、画像の透明部分を現在の背景色で置き換えることに注意してください。これは、内部的にリクエストされたサイズのキャンバスを生成し、そのキャンバス上にタイル画像を「オーバーレイ」するためです。透明度を維持したい場合は、「 -background none 」または「-compose SRC 」を設定します(詳細については、Src合成メソッドを参照)。 |
-composite
」を使用して元の画像の上にオーバーレイすることができます。タイル画像が部分的に透明な場合は、「Over
」の「-compose
」メソッドを指定する必要があります。これは、特に大きな画像の場合、非常に遅いタイリング方法であり、オーバーレイ用にどれだけ大きな画像を作成する必要があるかを判断する問題もあります。
|
![]() |
-draw
」演算子の「タイル塗りつぶしパターン」としてタイルを指定することで、別の画像の上にタイル画像を描画して、好きな形状や図形を作成できます。これは、「-tile
」設定がdrawで使用される「-fill
」カラー設定をオーバーライドするためです。 MVG描画設定を参照してください。
|
![]() |
-draw
」および「-annotate
」などの演算子でのみ機能します。「-draw
」を使用して機能します。 「-fill
」カラーを直接使用する画像演算子、「label:
」、「caption:
」、「text:
」などでは機能しません。ただし、「-draw 」には、画像内のすべてのピクセルを塗りつぶし色またはタイルパターン(設定されている場合)に完全にリセットするなど、特別なカラープリミティブが組み込まれています。
|
![]() |
-fill
」カラーの代わりに「-tile
」を使用しました。より高度な方法は、元の画像のサイズに設定された特別な歪みビューポート設定とともに、歪み演算子を使用することです(定義済みのグローバルアーティファクトとパーセントエスケープを使用)。これは基本的に、小さなタイル画像を囲む小さなタイルの仮想ピクセルをマッピングして、より大きなタイル状のキャンバスを生成します。
|
![]() |
オフセットタイルキャンバス
背景テクスチャの正確な位置をもう少し制御する必要がある場合があります。タイルパターンを他の画像と整列させるか、最終画像の他の部分との悪い相関を避けるためです。標準的なタイリングメソッドの多くでは、これは「-tile-offset
」設定を使用して実現できます。たとえば、ここでは、「tile:
」または「pattern:
」を使用して、タイル状のキャンバス画像を直接作成するために使用されるタイル画像をロールします。
magick -size 80x80 -tile-offset +30+30 tile:rose: offset_tile.gif magick -size 80x80 -tile-offset +20+20 \ pattern:checkerboard offset_pattern.gif |
![[IM Output]](offset_tile.gif)
![[IM Output]](offset_pattern.gif)
![]() ![]() |
タイルオフセット設定は、IMバージョン6.3.9-9より前は壊れていました。つまり、「X」オフセットは「X」と「Y」オフセットの両方の値に使用されていました(指定された「Y」値は無視されました)。これは、上記の例は(XオフセットとYオフセットが同じであるため)機能していた可能性がありますが、2つの値が異なる場合は予期しない結果になる可能性があることを意味します。 |
これは、「magick montage 」の背景「-texture 」設定でも機能します。
|
![]() |
「-tile 」または「-fill 」設定の前に定義することで、設定を使用することもできます。例:...
|
![]() |
-tile
」画像を定義する前に、「-size
」設定がリセットされていることを確認してください。
|
![]() |
メモリ内の画像でのタイリング
メモリ内にある(作成または変更された)画像をタイル状に配置するのは簡単ではなく、いくつかの間接的な方法しか利用できません。
タイル画像を複製して追加する
タイル画像の正確なサイズを気にしない場合は、画像を複数回追加するだけで済みます。たとえば、ここでは画像を3x3の配列にタイル状に配置します。
|
![]() |
|
![]() |
MPRを使用したタイリング:(メモリプログラムレジスタ)
より良い方法は、画像を特別な「メモリ内」ファイル形式「mpr:
」または名前付き「メモリプログラムレジスタ」に保存することです。このレジスタから、「-tile
」設定を使用するか、特別な「tile:
」画像ファイルリーダーを使用できます。どちらも「保存された」画像ファイル形式からのみ設定できます。たとえば、「tile: 」を使用して特定のサイズのタイル画像を作成します...
|
![]() |
![]() ![]() |
「tile: 」コーダーは、画像の透明部分を現在の背景色で置き換えることに注意してください(上記を参照)。 |
または、「-tile 」または「-fill 」塗りつぶしパターンを設定し、「-draw 」を使用して色をリセットすることで、既存の画像の上にタイル状に配置します(カラー塗りつぶしプリミティブを参照)...
|
![]() |
![]() ![]() |
透明度を含む画像をタイル状に配置する場合は、「-alpha set 」を使用して、出力画像にも透明度があることを確認してください。そうしないと、結果の画像にはタイルの「隠れた」透明色が示されます。 |
または、塗りつぶしパターンを使用して、円などの他の描画プリミティブを使用して描画します。
|
![]() |
mpr:
」の後に指定する名前は任意のものでかまいません。これは、画像の保存に使用される(メモリ内の)「mpr」レジスタ名のラベルにすぎません。ラベル、数字、色、さらにはファイル名にすることもできます。歪みによる仮想ピクセルを使用したタイリング
この方法では、仮想ピクセル設定を使用して、大きなタイル状のキャンバスを生成します。この設定は、実際の画像(通常の画像の境界外)を囲む領域がどのように表示されるかを定義します。仮想ピクセルを抽出する最も簡単な方法は、特別な歪みビューポート設定で歪み演算子を使用することです。
|
![]() |
また、「Mirror 」や「CheckerTile 」などの他のスタイルの仮想ピクセルタイリング設定にもアクセスでき、ビューポート設定を使用して適切なオフセットタイリング制御も行うことができます。
|
![]() |
45
」はツリーの幅がカバーする角度を指定し、「50
」はツリータイルの上端の半径を定義します。残りはこれから推測します。
|
![]() |
組み込みのIMパターン/タイルの変更
ImageMagick組み込み画像とパターンの完全なリストを参照してください。このようなパターンはたくさんありますが、ここでは1つか2つだけを取り上げます。組み込みのパターンは一般的に非常に小さい画像であり、広い領域を覆うようにタイル状に配置できます。ただし、それだけでは非常に単調に見え、役に立ちません。たとえば、ここに提供されている大きくて興味深いパターンの1つを示します...
|
![]() |
-size
」を設定することによるキャンバス作成の一部として、または塗りつぶしタイルとして、広い領域にタイル状に配置されます(上記のタイル状キャンバスを参照)。サイズ設定がない場合、パターンのデフォルトのタイルサイズである30x30ピクセルが使用されます。ここで、IMによって現在提供されているすべてのパターンは、私が最後の例で使用した「checkerboard
」パターンを除いて、すべて純粋な白黒であることに気づくでしょう。これは、タイルパターンとして特に使用したいパターンの1つです...
|
![]() |
-opaque
」画像演算子を使用して置き換えることができます。
|
![]() |
checkerboard
」パターンに色を付けたい場合は、最初に「-auto-level
」を使用して2つのグレーを白黒にマッピングしてから、それらの2つの色を置き換えるのが最適です。ここでは、「-opaque
」を使用して色を置き換える代わりに、少し使いやすい「+level-colors
」演算子(IM v6.2.4-1の追加)を使用します。
|
![]() |
-floodfill
」演算子を使用してパターンに色を付けることもできます。ただし、これが正常に機能するには、変更したパターンをタイル状に配置する前にこれを行う必要があります。この場合、必要な色の規則的なパターンで色を付けるために、タイルを3倍に拡大する必要もあります。
|
![]() |
また、単純なタイリングパターンをゆがめたり歪ませたりして、興味深いバリエーションを作成することもできます。たとえば、私が特に興味深いと思った六角形パターンでの「しわ」効果(フォント画像ジェネレーターからのしわIM効果による手法)など
|
![]() |
タイル画像の変更
タイルを既存のタイルであろうと組み込みのパターンの1つであろうと、変更する際に人々が直面する最大の問題は、多くの画像操作が画像の「タイル可能性」を破壊することです。たとえば、ここでは、組み込みの「hexagon
」パターンを取得し、それを変更して、幅の広い六角形の線のシェーディングされたグレースケールパターンを作成しようとしました。
|
![]() |
|
![]() |
|
![]() |
代替案
仮想ピクセルに頼る代わりに、別の方法があります。基本的には、画像に操作を加える前に、エッジ効果を回避するために、事前に「仮想エッジピクセル」を自分で提供します。これは、最初にわずかに広い領域に画像をタイル状に並べることで行います。画像を修正した後、導入されたエッジの歪みを回避して、タイルを再抽出できます。実行される画像操作の範囲に応じて、それほど大きくする必要はありません。最終結果で全てのエッジ効果を止めるには、15〜40ピクセルで十分であることがわかりました。画像を再抽出するには、追加のピクセルを「-shave
」で削除するか、処理された画像の中央から元のタイルサイズを「-crop
」で切り抜くことができます。たとえば、ここでは、組み込みの「hexagons
」パターンを使用して、3Dの「-shade
」効果を作成しています。
|
![]() |
|
![]() |
タイル画像の生成
タイル状に並べることができる画像を生成するときに直面する最大の問題は、画像のエッジとコーナーをシームレスにフィットするように一致させようとすることです。これが行われない場合、得られるのは、画像のコピーが繰り返される一連の正方形のボックスだけです。これは簡単な問題ではなく、非常にイライラし、頭を悩ませる経験になる可能性があります。タイルの一方のエッジに表示されるオブジェクトは、画像がタイル状に並べられたときに全体を再形成するために、画像の反対側にもう一度表示される必要があります。これはコンピューターで生成された画像では比較的簡単にできますが、現実世界の写真を使用した優れたタイル画像を生成することはほとんど不可能です。もう1つの大きな問題は、タイルが繰り返されているように見えないようにすることです。この唯一の真の解決策は、繰り返しパターンが見えにくくなるように、十分に類似しているが異なる要素を十分に含めることができるほどタイル画像を大きくすることです。このため、繰り返しに見えない小さなタイルを生成することは特に困難です。FUTURE: Ideas and suggestions for generating tile patterns? Anyone? Or roll, add element, roll, add element, etc... Any and all suggestions and examples accepted. Suggestions for generating tile from real photos of repeating patterns, such as water, fallen leaves, clouds, stucco, brickwork, etc... Generating Escher-like tile patterns.
ランダムノイズタイル
生のランダムノイズキャンバスには、そもそもエッジの特性がないため(すべてのピクセルカラーは、隣接するピクセルの色とは完全に独立しています)、エッジの歪みを心配することなくタイル化できます。基本的に、ピクセルレベルでは非常にランダムであるため、最初から一致するエッジがないため、タイル化しても何も失われません。残念ながら、実際の目的で生のランダムノイズ画像を使用する状況はほとんどありません。あまりにもひどくランダムであるため、役に立ちません。ただし、本質的なタイル化可能性を維持しながら画像を修正することにより、必要なランダム化されたタイルパターンをほぼ作成できます。たとえば、前の例で使用した「タイルを修正する」手法を使用して、元のタイルの基本的な「-blur 」を見てみましょう。
|
![]() ![]() |
この手法を使用すると、生のランダムノイズ画像にほぼすべての変換を適用できます。たとえば...
|
![]() ![]() |
六角形タイリング
正方形の形にタイル状に並べるのではなく、「ランダムノイズ」画像を使用すると、非常に異なる種類のタイルを生成できます。画像寸法を2倍にし、余分なスペースにタイルを再配置しますが、半分オフセットすることにより、基本的なランダムノイズ六角形タイルパターンを生成できます。これは、ImageMagickの組み込みの特殊な「pattern:hexagons 」をタイル化するときに得られるのと同じ種類のタイル効果です。
|
![]() ![]() |
ここでは、同じ「ランダムノイズ」画像(2:3の比率の長方形)をさらに2回重ねて、基本的な六角形パターン(4:3の長方形)を生成します。六角形にタイル状に並べられたランダムノイズタイルは、背景画像ページの「paint_3s」変換を使用して変換され、非常に見栄えの良い六角形タイルパターンを生成します。
|
![]() ![]() |
![]() ![]() |
数学的には、上記は既存のタイルから新しい壁紙群を生成していません。元の「非六角形」画像と最終バージョンは両方とも、同じ「p1」タイル群に属しています。 実際に行っていることは、ひし形の「プロトタイル」タイルパターンを、同じタイルパターンのより大きな長方形の直交整列された「基本領域」に変換することです。このようにして、標準的なタイル化方法を使用して画像をタイル化できます。 |
三重六角形タイリング
「hexagons
」組み込みパターンに色を付けたとき(上記の組み込みIMパターン/タイルの変更を参照)、より大きなタイルを形成するために再マッピングする前に、初期タイルの3つの異なるバリエーション(たとえば、回転を使用)を作成できます。もちろん、「hexagons
」パターンに色を付けたときと同様に、最終的なタイル画像を、繰り返される長方形のタイルパターンを生成するために、3倍に拡大する必要があります。生成された3つのタイルの間のバリエーションは、あまり大きく異なってはならず、後処理にも耐えられる必要があります。そうしないと、手法のメリットが得られません。これは、初期タイルも十分に大きくする必要があることを意味します。これにより、存在する特定の特徴が保持されます。たとえば、ここでは、非常に単純な線画を取り、それを回転させて3つの類似したバリエーションを作成します。これらの回転された画像は、3倍の画像六角形パターンを生成するために、より大きなキャンバス(6倍大きい)に7回タイル化されます。
|
![]() ![]() ![]() |
斜めミラータイリング
ここでは、任意の正方形の画像を魔法のように中心点を中心に8つのミラー画像にする1つの方法を示します。具体的には、複雑な「p4m」タイルパターンを生成しています。最初にランダム色相画像を生成し、ソース画像の左下半分を使用して、対角線方向に、次に水平方向と垂直方向にミラーリングします。
|
![]() ![]() |
|
![]() |
タイル画像とその背景にある数学に関するより完全な入門については、Wikipedia:壁紙群を参照してください。上記で説明したのは、作成できる多くのタイルパターンの一部にすぎません。
「p4g」は上記の「p4m」タイルとほぼ同じですが、フリップを使用するのではなく、ミラーリングされた正方形の180度回転を使用して、完全なタイル画像を生成します。ただし、画像はミラーで結合されていないため、既存の画像をタイルソースとして使用することはできません。エッジが分離して不連続になるためです。ただし、生のランダムデータをタイル化してから、結果のタイル画像を処理して、滑らかな結果を生成できます。
|
![]() |