⚠️ これは 非公式の翻訳サイトです。ImageMagick Studio LLC とは無関係です。正確な情報は 原文(https://usage.imagemagick.org/blur/index.html) を参照してください。

ImageMagick 使用例 -- 画像のぼかしとシャープ

ImageMagick 使用例 前書きと索引
画像のぼかし

画像のぼかし

画像をぼかしてぼんやりさせることは一見役に立たない操作に思えるかもしれませんが、実際には背景効果や影を生成するのに非常に役立ちます。また画像の輪郭をアンチエイリアスするために 'ジャギー' の効果を滑らかにしたり、特徴を丸めてハイライト効果を生み出すのにも非常に役立ちます。ぼかしは非常に重要なので、画像のリサイズにも不可欠な要素となっています。ただしそちらは元画像の単一ピクセルの境界内に制限された別のぼかし手法です。ImageMagick には一般的な画像ぼかし演算子が2つあります。"[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" による拡散と "[-blur](https://imagemagick.org/command-line-options/#blur)" です。両者の結果は非常に近いですが、"[-blur](https://imagemagick.org/command-line-options/#blur)" の方が高速なアルゴリズムなので、後者の方が数学的により正確であっても、一般的には前者が好まれます。(ぼかし演算子 vs ガウシアンぼかし演算子を参照)。

ぼかし/ガウシアンの引数

"[-blur](https://imagemagick.org/command-line-options/#blur)" と "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" の引数は同じですが、画像処理に不慣れな人にとっては、引数の値は混乱の元になりえます。

**-blur  {_radius_}x{_sigma_} **

上記で重要な設定は2番目の sigma 値です。これは画像をどれだけ '拡散' あるいはぼかしたいかを、ピクセル単位で近似的に表したものと考えることができます。画像をぼかすのに使うブラシの大きさだと思ってください。数値は浮動小数点値なので、'0.5' のような非常に小さい値も使えます。1番目の値 radius も重要で、ピクセルを拡散する際に演算子が見るべき領域の大きさを制御します。この値は通常 '0' か、最低でも sigma の2倍にすべきです。オプションの効果を示すために、周囲に余白を多く取ったこの単純な画像(ぼかし演算子は処理に多くの余白を必要とします)を使い、さまざまな演算子設定での結果を表にしてみましょう。また、太い線と細い線の両方を含むフォントをわざと使い、小さな線のディテールと大きな色面のぼやけ方を見せています。 |

  magick -font Gecko -pointsize 48  label:A \
          -bordercolor white -border 20x10  blur_source.png

[IM Output]

[IM Output]

小さな radius は、ぼかしの効果をぼかされるピクセルからその数ピクセル以内にあるピクセル(正方形の半径)に限定します。そのため '1' のような非常に小さな radius を使うと、実質的にぼかしを各ピクセルのすぐ隣のピクセルに限定することになります。sigma は浮動小数点ですが、radius はそうではないことに注意してください。浮動小数点値が与えられた(あるいは内部的に計算された)場合、ぼかしの '近傍' を決めるために、最も近い整数に切り上げられます。各近傍ピクセルが最終結果にどれだけ寄与するかは、依然として sigma によって制御されます。非常に小さな sigma('1' 未満)はその寄与を少量に限定し、大きな sigma はすべての近傍ピクセルからより均等な量を寄与させます。最大の sigma '65355' は、正方形近傍内のすべてのピクセルの単純な平均化を生み出します。また、小さめの radius に対して大きな sigma を使うと、ぼかし結果にアーティファクトが現れることにも注意してください。これは "-blur 5x8" の出力で特に顕著です。これは小さな正方形近傍がぼかされる領域を '断ち切る' ことで、ぼかしの滑らかなガウシアン曲線に突然の停止を生じさせ、鋭い輪郭に沿ってリンギングアーティファクトを生み出すことに起因します。というわけで…

ぼかしでは radiussigma より小さくしてはいけません

理想的な解決策は、上記の表の最終行に示すように、単に radius を '0x' に設定することです。その場合、演算子は与えられた sigma に最適な radius を自動的に決定しようとします。IM が使う最小の半径は3で、IM の Q16 版では通常 sigma の3倍です(IM Q8 はより精度が低いので、より小さい半径が使われます)。非ゼロの radius を使うのは、非常に小さな sigma の場合か、特殊なぼかしの場合だけです。というわけで…

可能な限り、ぼかし操作では radius をゼロにしましょう

sigma の小さな値は通常、アンチエイリアスが使われていない画像の線をぼかして輪郭を滑らかにするためにのみ使われます(詳細はアンチエイリアスを参照)。その状況では '1x0.3' のぼかしが、画像からほとんどの 'ジャギー' を除去するのに便利な値だと感じています。一方、大きな値は、背景や影効果(合成フォントを参照)のためのぼんやりした画像を生成したり、画像のハイライト効果(応用例のページ全体で示されています)を生成するのに役立ちます。IM が 'x' スタイルの引数を扱う方法のため、上記の sigma は省略可能です。しかしこちらの方が重要な値なので、本来は radius が省略可能であるべきです。radius は自動的に決定できるからです。そのため、この種の畳み込み演算子に単一の値だけを引数として与えるのは無意味です。これは長い間このようになっており、変更すると多くのものが壊れてしまうため、変わる可能性は低いでしょう。ぼかしはチャンネル設定を使う ぼかしを実演するために、まず単純に明るい青の背景にぼんやりした黒い円を生成することから始めましょう… |

  magick -size 70x70 xc:lightblue \
          -fill black -draw 'circle 35,35 20,25'  circle_on_blue.png
  magick circle_on_blue.png    -blur 0x8         circle_on_blue_blur.png

[IM Output] [IM Output]
ご覧のとおり、このような単純な画像をぼかすことには何の問題もありません。期待どおりにちゃんと動作します。しかし透明な背景を含む画像でこれをもう一度試してみると… |

  magick -size 70x70 xc:none \
          -fill black -draw 'circle 35,35 20,25'  black_circle.png
  magick black_circle.png       -blur 0x8        black_blurred.png

[IM Output] [IM Output]
ちょっと待って、何が起きたのでしょう! 画像が変わっていません! 実は演算子はちゃんと動作しました。しかし "[-blur](https://imagemagick.org/command-line-options/#blur)" はグレースケールチャンネル演算子として、"[-channel](https://imagemagick.org/command-line-options/#channel)" 設定によって3つの色チャンネルだけに制限されています。つまり画像の3つの色チャンネルだけがぼかされ、画像の透明度すなわちアルファチャンネルはそのまま残されます。しかし上記では、画像は色 'none' の背景キャンバス上の完全に不透明な円であり、IM はこの 'none' を完全に透明な黒と定義しています! それはつまり、透明な黒い背景の上に黒い円があるということです。言い換えれば、すべての色が黒で、一部は不透明、他の部分は透明な画像です。その結果、画像をぼかしたとき、私たちは黒を黒とぼかしただけで、おそらく想像できるとおり、黒が生み出されたのです! したがって結果には色の変化がありませんでした。また、画像のアルファすなわち透明度チャンネルには一切触れていないので、画像の透明度は変化しないままになりました。つまり、黒い円のままだったのです! 私たちが本当にしたかったのは、画像の4つのチャンネルすべて、特にアルファチャンネルをぼかすことです。これを行うには、"[-channel](https://imagemagick.org/command-line-options/#channel)" 設定を画像の4つのチャンネルすべてに設定します(例: 'RGBA' という値を使う)。 |

  magick black_circle.png  -channel RGBA  -blur 0x8  black_blurred_RGBA.png

[IM Output]
まとめると…

透明度を持つ画像をぼかすときは、常に "-channel RGBA" 設定を使いましょう。

| IM バージョン 5.5.7 では4つの色チャンネルすべてを自動的にぼかしていましたが、この演算子には透明度を持つ画像に対して他のバグ的な効果があります。詳細は透明度を伴うぼかしのバグを参照してください。
---|---
| GIF や JPEG のような一部の画像形式は半透明ピクセルを扱えません。そのため、何らかの半透明の色を持つ画像には、可能であれば PNG 形式を使うことをお勧めします。
---|---
上記からわかるように、"[-channel](https://imagemagick.org/command-line-options/#channel)" 設定は "[-blur](https://imagemagick.org/command-line-options/#blur)" のようなグレースケール演算子にとって非常に重要です。しかしこのような演算子を使う際に重要になりうるのは、それだけではありません。例えば、先ほどの '"[-channel](https://imagemagick.org/command-line-options/#channel)" 設定を忘れた' 例をもう一度、今度は黄色い円で試してみましょう。 |

  magick -size 70x70 xc:none \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_circle.png
  magick yellow_circle.png       -blur 0x8           yellow_blurred.png

[IM Output] [IM Output]
黒い円のときのように画像が変化しないのとは違って、今度は縁の周りに黒がにじみ出た、見るに堪えない黄色い円が生成されたことに注目してください。うわっ! この問題は、新しい IM ユーザーがほとんど気づかない事実によって引き起こされます。

透明なピクセルにも色があります。たとえ見えなくても。

上記の場合、その透明な色は黒であり、それが黄色い円ににじみ出たのです。もちろん、透明な画像に対して "[-channel](https://imagemagick.org/command-line-options/#channel)" 設定を正しく行えば、これを修正でき、期待どおりに動作します。 |

  magick yellow_circle.png  -channel RGBA  -blur 0x8  yellow_blurred_RGBA.png

[IM Output]

ぼかしの内部処理

これをさらに一歩進めて、より複雑な例で "[-blur](https://imagemagick.org/command-line-options/#blur)" が内部で何をしているのかを正確に探ってみましょう。ここでは、完全に透明な赤の背景に描かれた黄色い円という、とても特別な画像を作ります。これにより、画像をぼかす際に透明な色が持つ効果を見ることができます。 |

  magick -size 70x70 xc:'#F000' \
          -fill yellow   -draw 'circle 35,35 20,25'   yellow_on_red.png

[IM Output]
色 "#F000" は完全に透明な赤であることに注意してください。つまり画像の背景領域は、より一般的な完全に透明な黒ではなく、実際には見えない赤色なのです。これは後のテストで重要になります。"[-alpha off](https://imagemagick.org/command-line-options/#alpha)" 演算子を使って画像のアルファチャンネルを実質的に削除することで、画像の透明な部分の色を見ることができます。 |

  magick yellow_on_red.png   -alpha off  yellow_on_red_matte.png

[IM Output]
では、デフォルトの 'RGB' "[-channel](https://imagemagick.org/command-line-options/#channel)" 設定を使って、もう一度画像の色だけをぼかしてみましょう。 |

  magick yellow_on_red.png   -blur 0x8   yellow_on_red_RGB.png

[IM Output]
ご覧のとおり、画像の完全に透明な赤の背景が、見える黄色い円ににじみ出て、以前と同じように興味深いオレンジの縁を与えています。この効果が気に入るかもしれませんが、見えない完全に透明な色に頼るよりも、これを生成するもっと良い方法があります。この画像を正しくぼかせることを証明するために、きちんとやってみましょう… |

  magick yellow_on_red.png  -channel RGBA  -blur 0x8  yellow_on_red_RGBA.png

[IM Output]
アルファチャンネルを含めてぼかすと、以前のようなオレンジ色が生じない理由は、"[-blur](https://imagemagick.org/command-line-options/#blur)" 演算子が(現在の "[-channel](https://imagemagick.org/command-line-options/#channel)" 設定に従って)アルファチャンネルが関与していると認識すると、そのアルファチャンネルに従って 見える ピクセルだけを使ってぼかすようになるからです。アルファチャンネルが関与しない場合は、それを完全に無視し、完全に透明な赤が黄色とぼかされてさまざまな色合いのオレンジを生み出します。基本的に、ぼかしアルゴリズムは、どんな色であっても画像内の完全に透明なピクセルをすべて無視するように修正されています。半透明なピクセルは依然として関与しますが、その結果への影響もどれだけ見えるかによって調整されます。その結果、円はぼんやりした半透明の黄色い斑点になります。まさにユーザーが達成しようとしていたものでしょう。本当に望むなら、色とアルファチャンネルを別々にぼかすこともでき、それによって色チャンネルに対するアルゴリズムの '可視性調整' を効果的に切り離せます。その結果は、汚れた茶色のかすみを通して輝く太陽のようなものになります。 |

  magick yellow_on_red.png  -channel  A  -blur 0x8 \
                             -channel RGB -blur 0x8  yellow_on_red_GS.png

[IM Output]
この最後の例は、画像内のアルファチャンネルと色(透明かどうかにかかわらず)の間にまったく相互作用がなかった場合に、純粋なグレースケール演算子が生み出したであろうものを生成しました。つまり、赤、緑、青、アルファの各チャンネルが、それぞれ別々のグレースケール画像であるかのように、互いに完全に独立してぼかされます。覚えておいてほしいのは、デフォルトの "[-channel](https://imagemagick.org/command-line-options/#channel)" 設定は 'RGB' なので、デフォルトの動作はアルファチャンネルをぼかさず、かつ 画像内の見える色と見えない色を一緒にぼかすということです。"[-blur](https://imagemagick.org/command-line-options/#blur)" がもはや常に純粋なグレースケール演算子ではなくなったことを嬉しく思いませんか。とはいえ、本当に望むならそのように使うこともできます。しかし、いつもこの選択肢があったわけではありません… | _IM バージョン 6.2.4-4 より前は、"[-blur](https://imagemagick.org/command-line-options/#blur)" と "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" 演算子は純粋なグレースケール操作として適用され、そのためアルファチャンネルの '可視性' に応じて色の重み付けを調整しませんでした。その結果、透明度を伴うどんな形のぼかしも、ほとんど常に前の例でわざと生成したような恐ろしい '黒いハロー' 効果を生み出していました。

これは IM ディストリビューション内の長期にわたる重大なバグとして分類され、回避するのも非常に困難なものでした。この問題の詳細については、透明度を伴うぼかしのバグのページを参照してください。_
---|---

FUTURE: Blur and Trimming Images.

ぼかし演算子 vs ガウシアンぼかし演算子

"[-blur](https://imagemagick.org/command-line-options/#blur)" と "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" のどちらが画像のぼかしに優れているかについて、いくらか混乱がありました。まず "[-blur](https://imagemagick.org/command-line-options/#blur)" の方が高速ですが、それは2段階の手法で実現しています。最初に一方の軸で、次にもう一方の軸でぼかします。一方 "[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" 演算子は、すべての方向を同時にぼかすため、数学的により正確です。両者の速度差は、関与するぼかしの量にもよりますが、10倍以上にもなる巨大なものになりえます。より技術的な文脈で言えば、"[-blur](https://imagemagick.org/command-line-options/#blur)" は2パスの1次元直交畳み込みフィルタであり、"[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" は2次元の円筒畳み込みフィルタです。詳細は畳み込みを参照してください。両手法の結果は、他の 'フィルタ付き' 畳み込み操作の使用とは異なり、同じになるはずです。しかし2パス方式は中間段階があることを意味し、そこで丸めやクォンタム効果が発生しうるのです。Cristy もこれを裏付けて、次のように報告しています… 高速なので、"[-gaussian-blur](https://imagemagick.org/command-line-options/#gaussian-blur)" の代わりに常に "[-blur](https://imagemagick.org/command-line-options/#blur)" を使うべきです。丸めのために内部のいくつかのピクセルが異なる場合があり、また縁のピクセルも、これも中間段階での仮想ピクセルの縁効果の損失のために異なる場合があります。要約すると、2つの演算子はわずかに異なりますが、その差は最小限です。"[-blur](https://imagemagick.org/command-line-options/#blur)" の方がはるかに高速なので、それを使いましょう。ぼかしに関わるほぼすべての例で、私はそうしています。

Resize を使った大きなぼかし

画像のぼかしに大きなシグマ値を使うと非常に遅くなります。しかし、この処理を高速化するために使えるテクニックがあります。ただしこれは大まかな手法にすぎず、結果を改善するには数学的な厳密さが必要かもしれません。本質的に、大きなぼかしが遅い理由は、画像内のすべてのピクセルそれぞれについて、多くのピクセルをまとめるための大きなウィンドウすなわち 'カーネル' が必要だからです。しかしリサイズ(画像を小さくすること)は、その過程で生成するピクセルが少ないだけで、同じことを行います。このテクニックは基本的に、画像を縮小してから再び拡大することで、強くぼかされた結果を生成します。ガウシアンフィルタはこれに特に役立ちます。ガウシアンシグマの定義を直接指定できるからです。例えば、ここでは小さなバラの画像を、2つの手法でシグマ値5だけぼかしてみます。

  magick rose: -blur 0x5   rose_blur_5.png
  magick rose: -filter Gaussian -resize 50% \
          -define filter:sigma=2.5 -resize 200%  rose_resize_5.png

[IM Output] [IM Output] [IM Output]

シグマ設定(拡大ステップでのみ使用)が実際に望む値の半分でしかないことに注意してください。画像サイズも2倍にしているからです。縮小率と与えるシグマ値の両方を調整することで、全体の結果のぼかしをより大きくできます。縮小ステップが高速化を生み出すものですが、品質管理のために拡大ステップでも少なくとも何らかのぼかしをかけるべきです。これはこのテクニックの一例にすぎません。本来は、非常に非常に大きな画像に対する非常に非常に大きなシグマ値に使うことを意図しています。例えば、最近のデジタル写真でシグマ10以上を使うぼかしなどです。このテクニックは、単一画像の多段階ぼかしを生成するためにも使われ、スパースカラー Shepards の別法で用いられています。


画像のシャープ

作成中

シャープは、テレビ番組や映画で最もよく見かけるコンピュータグラフィックスのアルゴリズムです。警察が銀行強盗の車のナンバープレートや、ぼやけた店舗カメラ映像に映った男の顔を 'ズームイン' した写真を 'きれいにする' 場面を思い浮かべれば、何のことかわかるでしょう。基本的に彼らがやっているのは、カメラレンズによる自然なぼけや低解像度画像のために失われた画像の細かいディテールを復元しようとすることです。シャープの引数?(展開)

最も重要な要素はシグマです。これがシャープ操作の本当の制御だからです。
上記でこれが2番目の項になっているのは、歴史的な偶然によるものにすぎません。
値は、実質的にシャープなしの .1 から、強烈なシャープの 3 以上まで、任意の
浮動小数点値にできます。0.5 から 1.0 がかなり良いです。

半径は、しきい値と同様に、効果の制限にすぎません。

半径は整数単位でのみ指定します。アルゴリズムがそのように動作するからです。
大きいほど遅くなります。しかし最低でもシグマの 1 倍、できれば 2 倍にすべきです。
まず最初の数値は忘れて、単に 0 を使ってください。そうすれば、与えた 'シグマ' 係数に最適な数値が使われます。シグマが大きいほどシャープが強くなります。 -sharpen 0x.4 非常に小さい
-sharpen 0x1.0 約1ピクセルサイズのシャープ
-sharpen 0x3.0 おそらく大きすぎる
"[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" 演算子は、いわば反転したぼかしです。実際、ほぼ同じように動作します。これがぼかしとどう関連するかを示す例については、補間と外挿による画像処理を参照してください。例えば、単純な画像をぼかしてから、そのぼかしを除去するために再びシャープしてみましょう。
  magick -font Gecko -pointsize 72 label:A  A_original.jpg
  magick A_original.jpg     -blur    0x3    A_blur.jpg
  magick A_blur.jpg         -sharpen 0x3    A_blur_sharp.jpg
  magick A_blur_sharp.jpg   -sharpen 0x3    A_blur_sharp_x2.jpg

[IM Output] [IM Output] [IM Output] [IM Output]

ご覧のとおり、結果は完璧ではありません。ピクセルを拡散させると画像の鋭い角がぼやけてしまうからです。特に、画像の一番上にある2本の線の角に生じた余分な太りや、細い線がほぼ消えてしまったことに注目してください。操作を繰り返したり、シャープの領域のサイズを大きくしたりしても、画像を正確に元に戻すことはできません。基本的に、画像のぼかしによってより細かいディテールが失われてしまったからです。しかし、マクロなディテールはかなりよく復元できます。ぼやけた画像や大きくズームされた画像の細かいディテールを復元できるのは、警察、天文学者、政府のスパイ機関が使うソフトウェアパッケージで大きな金を生み出すシャープアルゴリズムです。

アンシャープ画像

作成中

"[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" と "[-unsharp](https://imagemagick.org/command-line-options/#unsharp)" の両演算子は、元画像からぼかしを引くというまったく同じ手法を使って動作します。"[-sharpen](https://imagemagick.org/command-line-options/#sharpen)" と "[-unsharp](https://imagemagick.org/command-line-options/#sharpen)" が実際にどう動作するかの内部的な詳細については、アンシャープ畳み込みを参照してください。

  magick A_blur.jpg       -unsharp 0x5        A_blur_unsharp.jpg

[IM Output] [IM Output]

Alex Beels 氏による [ImageMagick でのシャープ化](http://redskiesatnight.com/2005/04/06/sharpening-using-image-magick/) へのコメントから

  GIMP のアンシャープに合わせる
    gimp の半径に 1 を足す => IM のシグマ
    しきい値を 255 で割る   => IM のしきい値

  なので GIMP で radius=2 amount=1.5 threshold=5 とすると
    -unsharp 0×3+1.5+0.0196 になる

  別の人は im_sigma = sqrt(gimp_radius) と提案した

**Fred Weinhaus 氏の生メモ**

テスト用にぼかした画像。

A_original.jpg

magick A_original.jpg -blur 0x3 A_original_blur3.jpg

シャープは、ガウシアン型のぼかしをかけた画像を元画像から引いてエッジ画像
(ハイパスフィルタ)を作り、それを元画像に同量でブレンドし直すもので、
結果としてハイパス強調された画像が得られる。

magick A_original_blur3.jpg -sharpen 0x3 A_original_blur3_sharp3.jpg

アンシャープはより複雑だが似ている。上記のように差分(エッジ結果)を取る、
つまりシャープと同様だが、その一部または倍数だけを元画像にブレンドし、
かつ差分があるしきい値を超えた場合のみブレンドする。したがって
unsharp 0x3+1+0 は基本的に sharpen 0x3 と同じ。

magick A_original_blur3.jpg -unsharp 0x3+1+0
A_original_blur3_unsharp3_1_0.jpg

compare -metric rmse A_original_blur3_sharp3.jpg
A_original_blur3_unsharp3_1_0.jpg null:
164.661 (0.00251256)

この差は、一方で分離可能な(ガウシアン)ぼかしフィルタを使い、もう一方では
使わない、というどちらかに起因するのかもしれない。あるいは IM 実装の他の
どこかのわずかな違いにすぎないのかもしれない。

元画像とのブレンドを減らすと、シャープが弱くなる。

magick A_original_blur3.jpg -unsharp 0x3+0.5+0
A_original_blur3_unsharp3_0p5_0.jpg

元画像とのブレンドを増やすと、シャープが強くなる。

magick A_original_blur3.jpg -unsharp 0x3+2+0
A_original_blur3_unsharp3_2_0.jpg

しきい値を上げると、再びシャープが弱くなる。

magick A_original_blur3.jpg -unsharp 0x3+2+0.2
A_original_blur3_unsharp3_2_0p2.jpg

私(Fred)のいくつかのスクリプト binomialedge, gaussianedge, sharpedge は、この
(ハイパスフィルタ結果と元画像との間の)ブレンドの概念を使っており、スクリプトに
その説明がある。私のスクリプトでのしきい値処理は異なるやり方で、異なる目的のために
行われている。

**デコンボリューションを使ったシャープ**

デコンボリューション(画像の高速フーリエ生成周波数形式での除算)を使うテクニックが
ある。これは、元画像に適用された正確な 'ぼかし' がわかっているか、何らかの方法で
計算されている場合に最もうまく機能する。

現時点では IM では生の 'DIY' 手法しか利用できず、そうしたいくつかの手法がサブセクション
[フーリエの乗算/除算](https://usage.imagemagick.org/fourier/fft_math/) で実演(試行)
されている。

影の生成

"[-shadow](https://imagemagick.org/command-line-options/#shadow)" 演算子は、IM の例ページとともに開発された高度な演算子です。基本的には、与えられた画像の透明度の形状に対する、非常に複雑なぼかしと再着色を表します。これは IM ユーザーが常に行っていた操作ですが、正しく達成する方法を理解するにはかなりの知識が必要でした。この演算子は画像(通常はクローンで、すでに何らかの透明度を持っている場合もある)を取り、それを影画像に変換します。その影画像は、その後、与えられたオフセットで元画像の下に配置でき、(一般的には特別なレイヤーマージ演算子を使います)。例えば、ここではこの Web ページに合わせるためにネイビーの影色を使って、既存の画像に影をつける標準的な方法を示します。 |

  magick rose: \( +clone  -background navy  -shadow 80x3+5+5 \) +swap \
          -background none   -layers merge  +repage   shadow.png

[IM Output]
影画像が画像から正しくオフセットされていることに注目してください。ぼかしの 'sigma' 値をゼロにして、固いけれども半透明の影を作ることもできます。 |

  magick rose: \( +clone  -background navy  -shadow 60x0+4+4 \) +swap \
          -background none   -layers merge +repage  shadow_hard.png

[IM Output]
"[-layers](https://imagemagick.org/command-line-options/#layers) merge" を使って影画像を元画像と重ねることで、左上だけでなく任意の方向からの光源による影を簡単に生成できます。 |

  magick rose: \( +clone -background navy -shadow 80x3-5+5 \) +swap \
          -background none  -layers merge +repage  shadow_other.png

[IM Output]
単にレイヤーマージを使うのが最も簡単ですが、それは結果画像の全体的なオフセットをずらしてしまう傾向があります。ただしそのずれはレイヤー化の手法によるものではなく、"[+repage](https://imagemagick.org/command-line-options/#repage)" が結果の 'レイヤー' 画像に存在しうる負または正のオフセットを除去することによるものです。代替テクニックについては影とオフセット問題を参照してください。 | レイヤーマージの手法は IM v6.3.6-2 で追加されました。これより前は、似たレイヤー平坦化演算子 "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" を代わりに使う必要がありました。しかしこの演算子には問題があります(次を参照)。
---|---

形状を持った影

さて "[-shadow](https://imagemagick.org/command-line-options/#shadow)" は形状を持った画像を念頭に設計されました(そしてこれがその複雑さの理由です)。例えば、ここに典型的な影付きフォントがあります。 |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:A -trim \
          \( +clone   -background navy   -shadow 80x3+3+3 \) +swap \
          -background none   -layers merge +repage  shadow_a.png

[IM Output]
元画像に影をクリッピングせず収めるのに十分な余白があれば、このコマンドを使えます。これは特別な '[DstOver](compose.html#dst_over)' 合成手法を使い、2つの画像の順序を入れ替える必要を回避します。 |

  magick -background none -stroke black -fill white \
          -font Candice -pointsize 48 label:'A ' \
          \( +clone -background navy -shadow 80x3+3+3 \) \
          -background none -compose DstOver -flatten  shadow_a_size.png

[IM Output]
元画像に要求された影のための余分な余白が十分になかったため、これに少しのクリッピングが見えるでしょう。

影とオフセット問題

影の問題は、ぼやけた影がすべての方向に広がることです。これを補うために、"[-shadow](https://imagemagick.org/command-line-options/#shadow)" 演算子は、与えられたぼかしの 'sigma' 値の2倍のサイズの境界を加えることで、実際の元画像を拡大します。つまり、'x3' を使って影をぼかすと、画像を12ピクセル(すべての辺で3ピクセルの2倍)拡大します。この拡大を補うために、影画像には適切な負の仮想キャンバスオフセットも与えられ、影をつける画像に対して正しく配置されるようになります。通常の画像の場合、それは生成される影画像が負のオフセットを持つことを意味します。しかしこれは、お使いの IM に "[-layers](https://imagemagick.org/command-line-options/#layers)" の 'merge' 手法が利用できない場合に問題を生じます。例えば、ここでは光が右上から差すかのように、画像の左側に影を加えようとします。 |

  magick rose: \( +clone  -background navy  -shadow 60x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left_clipped.png

[IM Output]
ご覧のとおり、影は負のオフセットのために "[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" 演算子によってクリッピングされました。良くないですね! 一つの解決策は、元画像に初期オフセットを加えて、結果の影画像のオフセットが負にならないようにすることです。 |

  magick rose: -repage +11+0\
          \( +clone   -background navy   -shadow 80x3-5+5 \) +swap \
          -background none   -mosaic   shadow_left.png

[IM Output]
別の方法は、影を生成した後で両方の画像を適切な量だけオフセットすることです。これにより、"[-mosaic](https://imagemagick.org/command-line-options/#mosaic)" で合成する前に負のオフセットを除去します。両方の画像に与えたオフセットを加えるために、"[-repage](https://imagemagick.org/command-line-options/#repage)" で '!' フラグを使っていることに注目してください。 |

  magick rose: \( +clone -background navy -shadow 80x3-5-5 \) +swap \
          -repage +11+11\! -background none  -mosaic  shadow_tl.png

[IM Output]
必要な余白の量は、少なくとも 2×'sigma'-'offset'、この場合は 2×3--5 ⇒ 11 ピクセルであるべきで、そうしないと影がクリッピングされる恐れがあります。ただし、約 'sigma'-'offset' の余白でも通常は許容できるレベルのクリッピングになります。もう一つの代替案は、最終的な影のための十分な余白を作るように元画像を拡張することです。これは、仮想キャンバス上の画像の元の位置を保ちながら影を扱う、最良の方法です。例えば、ここでは影のための余分な余白を元画像にパディングし、その後、影画像を直接下に敷きます。最終画像が 'パディングされた' 画像の中央に残っていることがわかるように、表示する画像結果には境界を含めました。 |

  magick rose: -bordercolor None -border 11x11 \
          \( +clone -background navy -shadow 80x3+5+5 \) \
          -background none -compose DstOver -flatten \
          -compose Over  shadow_space.png

[IM Output]
必要なパディングの量は、影がクリッピングされないように、少なくとも 'sigma'+abs('offset')、できれば 2×'sigma'+abs('offset') であるべきです。パディングは余白を減らすために非対称にもできますが、通常は便宜上、(上記のような)対称なパディングが使われます。 | 上記で "-compose Over" 設定は実際には必要ありませんが、推奨されます。そうしないと、後の操作(他の "magick" コマンドであっても)が影響を受け、予期しない結果になる可能性があるからです。つまり、非標準の合成設定は、画像レイヤー化、境界やフレームの追加、あるいは単に他の合成を含む、他の操作に影響を与えうるのです。
---|---

影と Composite

フォーラムの多くの人は、影画像を生成してから、より低レベルの "[-composite](https://imagemagick.org/command-line-options/#composite)" を使って画像をマージしようとします。例えば、元画像を生成した(より大きな)影画像の上に直接重ねます。 |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) \
          +swap -composite  +repage shadow_composite.png

[IM Output]
まず覚えておくべき点は、合成演算子は非常に低レベルであり、元画像や影演算子が持つかもしれないレイヤーや仮想キャンバスのオフセットを一切読み取らないということです。実際、影が加えた、おそらく負の(悪い)オフセットをRepage 設定を使って除去または調整する必要があります。これは、上記の例で見られるオフセットが、単に影が影のための余白を与えるために入力画像を拡大した方法によって生成されていることを意味します。影がその位置にあるのは、ひとえに影画像がシグマの2倍だけ拡張されたためです。さらに、'固い影'(ゼロシグマ)を使うと、影にオフセットがまったくなくなり、その結果、暗いハロー縁効果を除けば、影は元画像によって隠されてしまいます。本質的に、影演算子が提供する組み込みのオフセット計算をあきらめてしまったのです。もちろん、代わりに適切な合成のジオメトリ/グラビティ設定を計算して設定することもできます。最も簡単な方法は、"[-gravity](https://imagemagick.org/command-line-options/#gravity) Center" 設定を使うことです。拡大された影画像はすべての辺で等しく拡張されているからです。 |

  magick rose: \( +clone  -background navy  -shadow 60x3 \) +repage \
          +swap -gravity center -geometry -3-5 -composite shadow_geometry.png

[IM Output]
画像の順序が入れ替わっているため、中央寄せのジオメトリオフセットが負になっていることに注目してください。

影による輪郭

"[-shadow](https://imagemagick.org/command-line-options/#shadow)" を使って、テキストなどの形状のぼやけた輪郭を生成することもできます。レイヤーマージを使うと、IM は半透明のぼかしに必要な余分な余白を自動的に加えます。 |

  magick -background none -fill white \
              -font Candice -pointsize 48 label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \) +swap \
          -background none   -layers merge +repage  shadow_outline.png

[IM Output]
ここで、ぼかした形状を輪郭付けに使う際の一つの問題が見えます。ぼかしの働き方の性質上、形状の縁は常に少なくとも50%透明になります。これを補うには、影をつける画像の形状を拡大する(例についてはより濃いソフト輪郭フォントを参照)か、あるいはもっと良い方法として、レベル調整を使って影画像の透明度を調整し、形状の縁に沿った50%透明が完全に不透明になるようにできます。 |

  magick -background none -fill white \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background black  -shadow 100x3+0+0 \
             -channel A -level 0,50% +channel \) +swap \
          +repage -gravity center -composite   shadow_outline_darker.png

[IM Output]
影の位置とオフセットを扱うもう一つの方法は、基本的に "[-shadow](https://imagemagick.org/command-line-options/#shadow)" が生成したすべてのオフセットを("[+repage](https://imagemagick.org/command-line-options/#repage)" を使って)捨て去り、より大きな影画像の上に元画像を中央に重ねることです。"[-geometry](https://imagemagick.org/command-line-options/#geometry)" 合成オフセットを加えることで、影を別の操作としてオフセットできます。 |

  magick -background none -fill white -stroke black \
          -font Candice -pointsize 48  label:A -trim \
          \( +clone -background navy  -shadow 80x3 \) +swap \
          +repage -gravity center -geometry -3-3 -composite \
          shadow_geometry_offset.png

[IM Output]
ただし、オフセットが影の位置決めに通常使うものと負の関係になっていることに注目してください。これは、実際には影ではなくテキストの形状をオフセットしているので、方向が逆になるからです。ただしこの方法は、オフセットがぼかしの 'シグマ' の2倍より大きくなると、影画像ではなく元のソース画像をクリッピングしてしまいます。そのため、影画像に元画像を重ねるためのパディング余白を含めない限り、'固い影'('x0' のぼかし 'シグマ' を使う)には使えません。ただし、柔らかくぼやけた影であれば、これが問題になることはめったにありません。影付けの実践的な例については、サムネイルの影付けより良い3Dロゴ生成を参照してください。

Montage コマンドでの影

IM v6.3.1 から、"magick montage" の "[-shadow](https://imagemagick.org/command-line-options/#shadow)" 設定は、この演算子が提供する柔らかい '形状を持った' 影を利用するようになりました。 |

  montage -label Rose  rose: \
          -background none -geometry +5+5 -shadow  shadow_montage.png

[IM Output]
ただし、その影の色、ぼかし具合、オフセットを設定する制御は提供されていません。"magick montage" は単純なオン/オフオプションを超えて、そのような制御を一度も提供したことがないからです。

影の内部処理

内部的には "[-shadow](https://imagemagick.org/command-line-options/#shadow)" は極めて複雑です。基本的に、'柔らかくぼやけた影' に対応するために画像を拡大する必要があるだけでなく、画像の既存の形状をぼかし、その色を適切に設定し、最後に仮想ページ/キャンバスのオフセットを調整する必要があります。これらすべてをユーザーの指定に従って行います。例えば、次の "[-shadow](https://imagemagick.org/command-line-options/#shadow)" コマンドが与えられたとして…

    magick image_clone.png -shadow 60x4+5+5   image_shadow.png

同等の IM 操作は次のようになります…

  magick image_clone.png -alpha set \
          -bordercolor none  -border 8  -repage -8-8\!  \
          -channel A -virtual-pixel transparent \
               -blur 8x4 -evaluate multiply .60 +channel
          -fill {background_color} -colorize 100% \
          -repage +5+5\!     image_shadow.png

上記の値 8 はぼかしシグマの2倍であり、ぼかした影のための十分な余白を提供するためのものであることに注意してください。ただしこれは、最終画像がシグマの4倍ピクセル分大きくなることを意味します。これを補うために、同量の負のオフセットも加えられます。さて、シグマの2倍の負のオフセットが生成画像に加えられるので、影がクリッピングされたり、元画像に対して誤って配置されたりしないよう注意すべきです。それは、元画像に初期の正のオフセット(8-5 や +3+3 ピクセルなど)を与えるか、あるいは負のオフセットを最終画像のクリッピングなしに理解するレイヤーマージを使うことで行えます。基本的に、影画像に関わる負のオフセットの可能性を正しく扱うために、前述のテクニックを使ってください。 PNG と MIFF 形式は、負のオフセットと半透明ピクセルの両方を扱える、私が知る限り唯一の画像形式です。影画像を将来の使用のために保存する場合は、PNG の使用を推奨します。
私が言ったように、"[-shadow](https://imagemagick.org/command-line-options/#shadow)" は非常に複雑な操作です。もちろん、上記の例は "[-shadow](https://imagemagick.org/command-line-options/#shadow)" が内部で行うことに近いものの、まったく同じではありません。実際の "[-shadow](https://imagemagick.org/command-line-options/#shadow)" 演算子は、境界/背景/塗りつぶしの色や、現在の仮想ピクセル設定などのグローバル設定を一切変更しません。また、ぼかしシグマが0に設定されている場合は、ぼかし関数がゼロのシグマや半径に対して警告を出すのを防ぐため、"[-blur](https://imagemagick.org/command-line-options/#blur)" 演算子の使用をショートカットします。
FUTURE: overlaying multiple shadows

Overlaying two images with shadows, produces an unrealistic darkening of the
shadow where the shadow overlaps.  This darkening would be correct if each
object was lit by separate light sources, but more commonly the objects are
lit by the same light source.

The solution is to overlay the one image over the other, applying the shadow
effects to the opaque parts of each layer image in turn. That is, the
background shadow should be generated separately into each layer.  Remember
the shadow cast by the top most layer should become fuzzier than the shadow
contribution of the bottom most layer.

This complexity gets worse when you have three objects shadowing each other.
Also the offset and blurring from the shadow of each object should technically
be separate.  To generate that level of complexity, probably a 3-d ray-tracing
program should be used instead (sigh).

特殊なぼかし

IM バージョン6で追加された、非常に特殊な用途を持つ他のいくつかのぼかしがあります。これらは特定の方法で動作し、他のほとんどの '畳み込み' 系操作のようにすべての方向には作用しません。また、画像を歪ませてからより通常のぼかしをかけるといった、特殊なぼかしを生成する他の手法ほどうまく機能しないかもしれません。例えば極座標サイクルの技楕円(マップ)ぼかしを参照してください。

警告: これらのぼかしはすべて実験的なものであり、構文が変わる可能性があります!

放射状ぼかし

"[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" を使って、画像がぐるぐる回転しているかのように、円を描くようにぼかすことができます。ただし技術的には、これは放射状ぼかしというより回転ぼかしまたは角度ぼかしです。注: Depolar-Polar - 回転ぼかしテクニックを使うと、(はるかに遅い速度ではありますが)はるかに高品質な結果が得られます。ただし、通常の "[-blur](https://imagemagick.org/command-line-options/#blur)" 演算子と同様に、"[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" も "[-channel](https://imagemagick.org/command-line-options/#channel)" 設定の影響を受けることに注意してください。 |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 35,5 35,65' \
          -stroke yellow -strokewidth  9 -draw 'line 35,5 35,65' \
          -channel RGBA  -radial-blur 30   radial_blur.png

[IM Output]
オブジェクトを中心からずらす(画像に余白を加える)ことで、より興味深い "[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" 効果が得られます。 |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 90   radial_blur_90.png

[IM Output]
ぼかしの引数は、放射状ぼかしがカバーする角度です。つまり、元画像から各方向にその角度の半分ずつです。なので180の角度は半円にわたり、360度は画像を完全な円でぼかします。 |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180   radial_blur_180.png

[IM Output]
|

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 360   radial_blur_360.png

[IM Output]
さらに少し画像ワーピングを加えて、効果をより興味深くすることもできます… |

  magick -size 70x70 xc:none \
          -stroke red    -strokewidth 15 -draw 'line 5,50 65,50' \
          -stroke yellow -strokewidth  9 -draw 'line 5,50 65,50' \
          -channel RGBA  -radial-blur 180 -swirl 180 radial_swirl.png

[IM Output]
全円の放射状ぼかしは、大まかな円形グラデーションを生成するのに使えます。ただし、正しいグラデーションを生成するための正しい形状を作り出すのは極めて難しく、おそらくその労力に見合わないでしょう。それでも試してみました… |

  magick -size 80x80 xc:lightblue -fill red \
          -draw "path 'M 40,40   C 43,43 47,47 50,40 \
                  S 52,23 40,20   S 14,22 10,40   S 15,75 40,79 Z'" \
          radial_gradient_pre.gif
  magick radial_gradient_pre.gif  -radial-blur 360  radial_gradient.gif

[IM Output] [IM Output]

モーションぼかし

"[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)" を使って、(半径とシグマ、加えてぼかしが起きるべき角度を与えることで)一方向のみに線形に減衰するぼかしを加えることができます。これは、画像(あるいはカメラ)が非常に非常に速く動いていたかのような見た目を与えます。 |

  magick -size 70x70 xc:none  -channel RGBA \
          -fill yellow  -stroke red  -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+45  motion_blur.png

[IM Output]
オブジェクトに軌跡がつくだけでなく、運動方向の縁にも背景がぼかされて入り込んでいることに注意してください。この先頭側の縁のぼかしは、元画像を再描画または重ねて、より小さな "[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)" を複数回再適用することで改善できます。 |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x8+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x6+45 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x2+45 \
          motion_blur_redraw.png

[IM Output]
複数のモーションぼかしで、動くオブジェクトの後を引く尾にある程度の広がりを持たせることができます。立ちのぼる煙や炎のようなものです。 |

  magick -size 70x70 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+25 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+55 \
          -draw 'circle 45,45 35,35'  -motion-blur 0x12+40 \
          motion_blur_spread.png

[IM Output]
このテクニックは、地面に広がる影を生成するのに使えます。あるいは、モーションぼかしを生成してから、それを少し放射状ぼかしすることもできますが、中心を正しく合わせるには画像の移動が必要です。さらに余分な画像ワーピングを加えて、もっと面白くすることもできます… |

  magick -size 70x100 xc:none -channel RGBA \
          -fill yellow  -stroke red -strokewidth 3 \
          -draw 'circle 35,80 45,70'  -motion-blur 0x20+90 \
          -background none  -rotate 50  -wave 5x25  -rotate -50 \
          -gravity center   -crop 70x100+0+0  +repage \
          -draw 'circle 35,80 45,70'  -blur 0x2 \
          motion_wave.png

[IM Output]

"[-radial-blur](https://imagemagick.org/command-line-options/#radial-blur)" は両方向にぼかしますが、"[-motion-blur](https://imagemagick.org/command-line-options/#motion-blur)" は一方向のみにぼかすことに注意してください。どちらの場合も、これら特殊なぼかしは避けるべき強い縁効果を持つので、画像の縁の周りに(一般的には "[-border](https://imagemagick.org/command-line-options/#border)" を使って)余分な余白をパディングすることをお勧めします。上記のより実践的または興味深い例や使い方を見つけたら、コピーを私にメールしてください(アドレスはページのフッターにあります)。


ぼかしを使った形状のフェザリング

作成中

警告: このセクションは現在では古くなっており、画像を正しくフェザリングしたいユーザーは距離を使った形状のフェザリングを見るべきです。ここで示されているのは 'ぼかしフェザリング' として知られるもので、後半で示すように '偽のフェザリングテクニック' です。とはいえ、これは依然として有用な手法ですが、'凸' の画像形状に限られます。 画像から形状を切り抜くとき、その形状の縁を少しフェザリングまたはぼかして、より滑らかな見た目にしたり、誤って含まれてしまった形状の外側の部分を目立たなくしたり、コピー&ペーストであることが明らかにならないように画像を背景に馴染ませたいことがよくあります。基本的に、ある形状に '固い' 縁を持たせる代わりに、それを柔らかくしてアンチエイリアスやレンズぼかしを '偽装' し、ペーストがよりシームレスになるようにします。例えば、ここでは明るい色の背景に重ねた GIF 画像があります。 |

  magick shape.gif -background wheat -flatten  overlaid.png

[IM Output]
しかし、ブール透明度を持つ GIF 画像を重ねており、その結果、高度にエイリアスされた、すなわち階段状の縁を持つため、画像は背景上で非常に場違いに見えます。実写画像を扱っていたなら、上記の結果は非常に人工的に見えるでしょう。しかし画像の透明度を少しぼかすことで、重ねた画像をより滑らかに背景に馴染ませることができます。 |

  magick figure.gif -alpha set -virtual-pixel transparent \
          -channel A -blur 0x0.7  -level 50,100% +channel \
          -background wheat -flatten  edge_blured.png

[IM Output]
ところで、これはサムネイルにソフトエッジを生成するのに使われるのとまったく同じテクニックです。これのさらなる例については、Fred Weinhaus 氏の "feather" マスキングスクリプトの結果を見てください。ご覧のとおり、これは重ねた画像と背景の間に高いコントラストがある単純なケースでは非常にうまく機能します。しかし、はるかに大きなフェザリングぼかし係数を使いたい場合や、2つの画像が両方とも非常に明るい色の場合には、深刻な問題があります。
ぼかしは形状領域の内側と外側の両方に広がるので、形状の縁がゼロ(完全に透明)になるが、縁から離れるにつれてすぐに完全に不透明になるように、アルファチャンネルを調整する必要があることに注意してください。まさにそのようなアルファチャンネル調整の例は、透明度処理を伴う CLUTで提供されています。この調整は重要です。そうしないと、形状の外側の領域を目立たなくする代わりに、形状の外側の領域の半透明の影やハローを加えてしまうからです。基本的に、以前は画像の透明度によって隠されていた、いくらかの半透明の '未定義の色' です。しかしぼかしには、形状の輪郭も滑らかにしてしまうという特にやっかいな問題があります。例えば… |

  magick -size 100x60 xc: -draw 'polygon 5,5 50,30 5,55 95,30' \
          sharp_angles.gif

[IM Output]
この特定の形状をぼかすと、こうなります… |

  magick sharp_angles.gif -blur 0x5  feather_blurred.gif

[IM Output]
マスクの頂点が、縁よりも多く目立たなくされていることに注目してください。また、内角がどのように '埋まって' いるかにも注目してください。透明度を伴うと、これは完全に透明なピクセルが半透明になる結果になりえます。つまり、未定義の色を持つピクセルが実際に見えるようになるのです! 画像をしきい値処理すると、これがより明確に見えます。 |

  magick feather_blurred.gif  -threshold 50%  feather_blur_thres.gif

[IM Output]
これが 'ぼかし' を画像のフェザリング手法として使うことの問題です。特に、指や耳、そして脚の間の領域のようなものを扱う際に懸念されます。つまり、付属物自体の形状と、その間の空間への影響です。画像が漫画のような境界の輪郭を持っている場合、これは '1ピクセル' のフェザリングではそれほど大きな問題ではありません。しかし実写画像(明確な境界を持たない)では、これは本当の問題です。適切な解決策は、ある点が形状の縁からどれだけ離れているかについての何らかの尺度を見つけることでしょう。ただし、近接する2つの縁がその効果を足し合わせないようにします。この距離測定操作は、現在では IM に追加されており、距離モルフォロジーとして知られています。これをフェザリングに使う詳細については、距離を使った形状のフェザリングを参照してください。


関連する演算子

Basic image modifications
  -despeckle -enhance
  -noise  -spread -displace

  -median
    Set each channel color of the pixel to the median value of all all pixels
    within a given radius. (median = center most value of all values found,
    half on one side, half on the other).  This is a way of "de-speckling" an
    image  (such a dust in a scan).  But could distort edges, cause some color
    channel aburation, and remove thin lines.

    This filter is the best technique to use for removing Salt & Pepper
    noise, especially on gray scale images.

    It is suggested that a trim for a scan use a median filtered image for
    attempting to find the appropriate bounding box.

  -adaptive-sharpen  radius x sigma
    Adjust sharpening so that it is restricted to close to image edges
    as defined by edge detection.

    See forum discussion
      https://magick.imagemagick.org/viewtopic.php?f=1&t=10266

  -adaptive-blur   radius x sigma
    Blur images, except close to the edges as defined by an edge detection
    on the image.  Eg make the colors smoother, but don't destroy any
    sharp edges the image may have.

  -adaptive-resize
    Resize but attempt not to blur across sharp color changes