ImageMagick の例 —
デジタル写真の処理
- 索引
-
ImageMagick の例 序文と索引
-
デジタルカメラのメタデータ、EXIFプロファイル
-
デジタル写真の向き
-
色の調整
-
写真変換レシピ集
- わずかな回転補正 - 水平でない写真の修正
- チルトシフト効果 - 風景を人工的な模型のように見せる
- PNG-JPEGレイヤードイメージ - テキストを鮮明に保ちながらページを圧縮する
- 写真の重ね合わせ - 連結された写真のぼやけた重ね合わせ
- 多重露光 - 同じシーンの複数の写真を混ぜ合わせる
- 個人の匿名性を保護する - 写真の一部をぼかす
- 画像にテクスチャを追加する
- クロマキーマスク - 特定の色域による修正
- 子供向けの色塗り画像
- 鉛筆スケッチ
- ヴィネット除去
デジタルカメラのメタデータ、EXIFプロファイル
デジタルカメラが写真を撮ると、JPEG保存ファイルに多くの追加情報が含まれます。このメタデータはEXIFプロファイルとして知られており、写真ラボや開発のために特に提供されています。「-verbose
」設定を付けたImageMagickの「magick identify
」コマンドはこのEXIF情報を表示します。これは、私が中国南部の昆明動物園で撮影したパゴダの写真のEXIFデータです。
![]() ![]() |
EXIFデータまたは識別出力は、大文字と小文字を区別しない方法で処理する必要があります。たとえば、多くの古いバージョンのIMは「EXIF: 」(大文字)ではなく「exif: 」(小文字)を出力します。 |
- 私のカメラはパナソニック('
Make
')、DMC-LZ1('Model
')です。 - カメラは回転していました('
Orientation
')。しかし、EXIFデータを調整せずに回転を修正したはずです。カメラはわずかに上向きに傾いていましたが、その情報は記録されていません。 - '
FocalLength
'が'37mm
'であることは、カメラの'光学ズーム'機能を使用しなかったことを示しています。私のカメラは最大6倍の光学ズームで'FocalLength
'は'366/10
'または'222mm
'になります。 - そして'
DigitalZoomRatio
'は、デジタルズームも使用しなかったことを示しています。 - カメラはまた、高速な1/8秒の'
ExposureTime
'、3mmの開口'MaxApertureValue
'、または'FNumber
'の'5.6
'、そして'ISOSpeedRating
'の'64
'を使用しました。 - フラッシュ('
LightSource
')は使用されませんでした。 - 元の画像は1728 x 2304ピクセル('
ExifImageLength
'と'ExifImageWidth
')でした。ただし、確認したい場合は、実際の画像は小さくなっています。そのため、トリミングまたはサイズ変更を行ったはずです。 - '
DateTime
'文字列によると、おそらく最も重要なことに、2005年7月9日午後2時5分頃に撮影されました。これは、カメラの時間が正しく設定されていたことを前提としています(実際には正しく設定されていました)。 - より近代的なカメラは、GPSの位置情報や、おそらくビューのコンパス方向さえ持っているかもしれません!
デジタル写真の向き
PhotoshopはEXIFの'Orientation
'設定に基づいてデジタル画像を自動的に回転させると聞いています。IMも、画像を読み込んだ後に「-auto-orient
」演算子を含めることでこれを行います。ただし、これは重要です。
JPEG形式はロスのある形式です
これは、JPEGファイル形式をデコードして保存するたびに、画像がわずかに劣化することを意味します。一般的な画像プロセッサとして、IMは常にフォーマットを完全にデコードして再エンコードするため、画像を再保存すると常にJPEG画像が劣化します。JPEG形式の性質の詳細については、「JPEG画像ファイル形式」を参照してください。重要なのは、IMを使用してデジタル写真の向きを修正する(「-auto-orient
」を使用)のは、サムネイルの作成、画像への注釈付け、透かしの追加、または露出調整など、他の画像修正操作を実行する場合のみです。IMは、画像プロパティエスケープを使用して、写真から現在の向き(数値として)を抽出できます…
|
![]() |
-orient
」演算子を提供します(可能な値を確認するには「-list orientation
」を使用してください)。
|
![]() |
Top-Left
'または1であることに注意してください。もちろん、後で「-auto-orient
」を使用する予定がある場合は、EXIFメタデータ(「-strip
」または「-thumbnail
」を使用)を削除しないでください。画像メタデータを削除する前に使用してください。画像を劣化させたり、変更したりせずに写真の向きを修正したい場合は、JHeadプログラムを使用することをお勧めします。たとえば、ここでは写真の向きを修正し、ディレクトリ内のすべてのデジタル写真の組み込みプレビューサムネイルを削除します。
jhead -autorot *.jpg |
![]() ![]() |
JPEGのロスレス回転は、サイズが8または16の倍数である画像に対してのみ正しく機能します。これは、ほとんど(すべてではない)デジタルカメラの写真に当てはまります。奇数のサイズの画像でこれを行うと、(部分的なサイズを含む)右端または下端のブロックが最終画像で正しく配置されません。これらのブロックは、右端または下端のみに存在できるためです。 これの例については、この特定の議論を参照してください。 |
jpegtrans
」またはIM「-rotate
」を使用して自分で回転し、EXIFの向き設定をリセットする(JHeadまたはIMの「-orient
」演算子を使用)か、EXIFプロファイルを削除することです。Other IM Lossy Modifications... If you are also resizing or otherwise modifying the image, such as reducing its quality and size for use on the web, then data loss is already a fact. As such during those operations IM can do similar things, allowing you to do all the required operations in a single 'load-save' cycle. Rotate ALL images to landscape -rotate 90\< portrait -rotate -90\>
色の調整
先に進む前に、使用される一般的な色の修正方法の紹介として、色の修正を最初に参照することをお勧めします。「-normalize
」を使用する)高コントラストの線画やグラフィックは素晴らしいものですが、正規化された写真は非現実的に見えることがあり、前述のように、印刷もよくない場合があります。「-contrast-stretch
」演算子で正規化の「境界」を制限できますが、「-levels
」および/または「-sigmoidal-contrast
」演算子を使用すると、「よりスムーズな」調整を行うことができます(これらの演算子が実行する操作の詳細については、ヒストグラム調整を参照してください)。上記の入力は、IMメーリングリストの「Tong」からのものです。露出不足写真の明るさ調整Walter Dnes氏提供
適切な露出を可能にするのに十分な光がない場合があります。他の場合では、モーションブラーを除去するために、最適な時間よりも短い露出時間を使用する必要がある場合があります。露出不足のデジタル写真は、「-sigmoidal-contrast
」演算子を使用して、'0%
'のしきい値レベルで、ハイライトを吹き飛ばすことなく、暗い領域を優先的に明るくすることができます。シグモイド非線形コントラストで詳細を参照してください。これは、日没後の無料コンサートで撮影された、わずかに露出不足の例です。明るく照らされた領域が多く、クリアですが、より見やすくしたい暗い領域もあります。
![]() ![]() |
常に、中間作業にはTIFFやPNGなどの非可逆圧縮形式を使用する必要があります。JPEG形式は、Web公開のためにディスク容量とダウンロード帯域幅を削減するためにのみここで使用されます。 小さなサムネイルではなく、例で使用されている拡大版を見るには、画像を選択してください。 |
ビニング - デジタルノイズの低減Walter Dnes氏提供
多くの真剣な写真家は、デジタルカメラメーカーによる「メガピクセル競争」の副作用に不満を持っています。メーカーは、デジタルカメラのセンサーに小さなピクセルを多く詰め込むことでメガピクセル数を増やしています。ピクセルが小さくなると、同じISO設定でのノイズの多い画像になり、低いISO設定を使用せざるを得なくなります。ノイズを避けるために低いISO感度を使用すると、露出時間が長くなります。これは、内蔵フラッシュの10フィートの範囲を超える屋内では、三脚にカメラを設置して撮影する静物写真以外では、ほとんどの民生用デジタルカメラが事実上役に立たないことを意味します。多くのデジタルカメラユーザーは、より高いISO設定でノイズの少ない画像のためにいくつかのピクセルを喜んで交換しますが、企業をコントロールするマーケティング担当者は、これを選択肢として検討することを拒否します。幸いなことに、このトレードオフは、デジタル写真の後に行うことができます。専門用語は「ビニング」です。簡略化された理論は以下の通りです…- n×nのピクセルグリッドを取り、そのコンポーネントの平均値を計算して1つの「スーパーピクセル」を取得します。
- 信号は組み合わせたピクセル面積に比例し、これは信号量がn²倍増加したことを意味します。
- ノイズはランダムです。つまり、組み合わせたピクセル面積の平方根、つまりnに比例します。その結果、SNR(信号対ノイズ比)はn倍増加します。詳細はPhoto Glossary, Binningを参照してください。
![]() ![]() |
ビニングを使用するには、写真画像は最終的な目的のサイズの整数倍である必要があります。 |
-filter
」設定の「box
」は、画像を「-resize
」する場合、ピクセルのグループを1つのピクセルに平均化します(詳細はリサンプリングフィルターを参照)。つまり、「ビニング」を行うには、画像を正しくリサイズするだけで済みます。

写真変換クックブック
わずかな回転補正-- 写真をより水平にする
典型的な状況。写真を撮影しましたが、画像が水平ではなく、修正したいと考えています。![[IM Output]](beijing_tn.png)
画像を単純に回転するだけで、コーナーに色の領域を含むわずかに大きな画像が得られ、修正が目立ち、ひどいものになります。
|
![]() |
チルトシフト効果-- 風景を人工的なモデルのように見せる
![[IM Output]](beijing_tn.png)
最初にやるべきことは、画像の色を強調して非常に高いコントラストを与え、おそらく少し明るくして、強いスタジオライトで非常に明るく照らされているように見せることです。
|
![]() |
15
」のコントラスト値は非常に強力なコントラストです。また、コントラスト閾値の中心を「30%
」のグレー値にオフセットすることで、画像を少し明るくしました。コントラスト強調画像の色が十分に漫画チックにならない場合は、モジュレート演算子を使用して画像の色飽和度を高めることを検討してください。この画像には、タイル張りの屋根と明るい緑色の木々ですでに十分な色の効果があるため、必要ありませんでした。画像の拡大図を見ると(サムネイルをクリック)、色を強調するだけでも、画像に人工的な光の感じが与えられますが、背景の車や前景の人物には細部が多すぎるため、モデルのように見えません。次に、チルトシフトです。これには、上下が白で、中央が黒のグラデーション画像を作成します。線形グラデーションを使用する人もいますが、放物線グラデーションの方が優れていると思います。
|
![]() |
magick beijing_contrast.jpg beijing_blurmap.jpg \ -compose Blur -set option:compose:args 10 -composite \ beijing_model.jpg |
![[IM Output]](beijing_model.jpg)
magick beijing_md.jpg -sigmoidal-contrast 15x30% \ \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \ -solarize 50% -level 50%,0 \) \ -compose Blur -set option:compose:args 10 -composite \ beijing_model.jpg |
速度の最適化
可変ぼかしマッピング操作は、本質的にシングルパスの2次元ぼかし方法(均一なガウスぼかしに相当)を使用しています。ただし、ぼかし操作を2つの1次元可変ぼかし操作で行うことで、一般的な速度向上を得ることができます。たとえば、ここでは最初に水平方向に、次に垂直方向にぼかします…
magick beijing_md.jpg -sigmoidal-contrast 15x30% \ \( +clone -sparse-color Barycentric '0,0 black 0,%h gray80' \ -solarize 50% -level 50%,0 -write mpr:blur_map \) \ -compose Blur -set option:compose:args 10x0 -composite \ mpr:blur_map \ -compose Blur -set option:compose:args 0x10 -composite \ beijing_model_2pass.jpg |
チルトシフト効果と実物モデルの問題点
結果の写真を注意深く見ると、それが偽のチルトシフトであり、実物モデルの写真ではないことがわかります。これは、建物のベースと比較して、大きな建物の屋根がぼやけすぎていることからわかります。ベースとほぼ同じ距離にあるにもかかわらずです。「壁」のベースは、壁の上部よりもぼやけています。つまり、偽物であることがわかります。問題は、大きな垂直方向のオブジェクトは、高さによって変動するぼかしではなく、表面全体で同じ量だけぼかす必要があることです。ぼかしのグラデーションは、画像内のさまざまなオブジェクトの焦点深度、つまり距離を表すことを忘れないでください。そのため、垂直方向のオブジェクトの表面はすべて同じ「距離」にあるため、同じ量だけぼかす必要があります。修正するには、ぼかしのグラデーションを調整して、それらの領域が、画像の残りの部分と比較して、そのオブジェクトの「ベース」の一定(またはほぼ一定)の色を持つようにする必要があります。つまり、垂直面は一定のぼかし量を持ち、水平面はすべてぼかしのグラデーションを持ちます。基本的に、ぼかしのグラデーションは、画像内の各点の実際の「深度」を表す必要がありますが、ほとんどの画像では非常に複雑なグラデーションです。この調整は、水平な壁とは何か、オブジェクトが画像内でどのくらい離れているかを人間が解釈する必要があるため、達成するのが難しい場合があります。また、容易に自動化できる可能性も低いです。この効果で何ができるか?チルトシフト画像をメールで送ってください!ここに参照します。あるいは、上記の例でチルトシフトの欠陥を修正することもできます。PNG-JPEGレイヤードイメージ
大きな新聞や雑誌のページを、白い背景のみを使用したPNGとして保存されたテキストレイヤーと、JPGとして保存された画像レイヤーに分割することにより、2つの画像を組み合わせたものよりもはるかに少ないディスク容量を使用できます!より重要なことに、画像はロスのある圧縮(JPEG)を使用でき、テキストコンポーネントは鮮明でクリアなままです(PNG)。ばかげて奇妙に聞こえますが、実際には本当です。分離された画像は、単一の組み合わせ画像で使用されるディスク容量の3〜4倍を節約できます。通常、2つの画像は、公開プロセス中に別々のレイヤーとして生成されます。しかし、後で画像を分離することもできます。画像は単に重ね合わされています…これは通常のオーバーコンポジションを使用しており、PNG(オーバーレイ)画像が透明である必要があります。この透明性は、上記のように、ブール(純粋なオン/オフ)マスクとして2つの形式で提供されます。画像分離の例コードを歓迎します。写真の重ね合わせ-- ぼやけたオーバーラップされた写真
一連のオーバーラップする写真を作成することは(パノラマという意味ではありません)、特にウェブサイトの作成において一般的なタスクです。しかし、IMオペレーターに関する正しい知識がない限り、実行するのは難しい場合があります。最も簡単な方法は、2つの画像のマスク付き合成と、オーバーレイする画像を選択するためのマスクを使用することです。ただし、最初に簡単な数学を行う必要があります。この例では、サイズは120x90ピクセルの2つのサムネイル画像を使用しており、水平方向に40ピクセルオーバーラップさせたいと考えています。これは、結果の画像は幅120 + 120 - 40ピクセル、つまり200x90ピクセルの画像になることを意味します。次に、マスクが必要です。これは片側を黒、もう片側を白にし、中央に40ピクセルのグラデーションを配置する必要があります。出力画像のサイズです。つまり、120ピクセル - 40ピクセルで、2つのオーバーラップされていない領域それぞれに80ピクセルの領域が得られます。では、マスク画像を生成しましょう…
|
![]() |
plmlut
」水平グラデーションジェネレータースクリプトを使用することです。これは、上記で生成したシャープな線形グラデーションではなく、グラデーションの曲率をより細かく制御できます。これで数学的な計算は終わったので、残りは、生成したマスクを使用して、3つの画像のマスク付き合成を実行することだけです。ただし、オーバーラップする右側の画像(任意の色)に必要なスペースを提供するために、宛先(左側)の画像を拡大し、適切な重力(右側、または 'East
')を使用して2番目の画像を正しく配置する必要があります。
magick holocaust_tn.gif -extent 200x90 spiral_stairs_tn.gif \ overlap_mask.png -gravity East -composite overlap_photos.jpg |
![[IM Output]](../img_photos/holocaust_tn.gif)
![[IM Output]](../img_photos/spiral_stairs_tn.gif)

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

![[IM Output]](overlap_photos.jpg)
|
![]() |
magick -size 90x90 xc:white -size 90x30 gradient: -append -rotate 90 \ hatching_tn.gif \ \( chinese_chess_tn.gif -clone 0 \ -compose CopyOpacity -alpha off -composite -repage +90+0 \) \ \( holocaust_tn.gif -clone 0 \ -compose CopyOpacity -alpha off -composite -repage +180+0 \) \ \( spiral_stairs_tn.gif -clone 0 \ -compose CopyOpacity -alpha off -composite -repage +270+0 \) \ -delete 0 -compose Over -mosaic overlap_series.jpg |
![[IM Output]](overlap_series.jpg)
多重露光-- 同じシーンの複数の写真の混合
古い時代のフィルムベースのカメラでは、フィルムを「巻き戻さ」ずに2回以上写真を撮るテクニックがありました。これにより、わずかに異なる時間に撮影された2つの画像がマージされた、いわゆる二重露光を作成できました。その結果、移動したり変化したりした画像の部分がゴースト化したり、暗くなったりすることがよくありました。しかし、画像内の被写体、照明効果、さらには現像プロセスを慎重に制御することで、非常に奇妙な、あるいは「不可能な」写真を作成することが可能になりました。デジタル画像では、画像をさらに細かく制御できるため、さらに簡単です。基本的に…見ていることが信じていることかもしれませんが、カメラは嘘をつきます!たとえば、自分が2回出現する画像が欲しいとしましょう!それは簡単にできます。たとえば、ここに、この例のために特別に三脚とタイマーを使用して撮影した2つのクイック写真のサムネイルがあります。これらを直接使用します。最高品質の結果を得るために、通常は元の画像ファイルを入力として使用しますが、ここではこれらのサムネイルに二重露光テクニックを直接適用します。古いスタイルのカメラで従来のフィルムのような「二重露光」を使用した場合、結果はこれらの2つの画像の平均になり、自分自身の透き通る「ゴースト」が生成されます。これはこのテクニックのデジタルシミュレーションです…
|
![]() |
|
![]() |
|
![]() |
|
![]() |
クリーンな背景写真を使用して、変化した画像の部分をマスクアウトするために、差分画像のしきい値を設定できます。そのマスクを適切に拡張して、画像内のオブジェクトだけでなく、背景の風景に落とす可能性のある影や反射もカバーするために、さらにぼかしとしきい値を使用する必要がある場合があります。正しくするには、多少の試行錯誤が必要になる場合もあります。
|
![]() |
|
![]() |
個人の匿名性を保護する-- 写真の一部をぼかす
3枚の画像の合成マスクを使用する上記のテクニックは、他の方法でも使用できます。たとえば、画像を「ピクセル化」して、マスクを使用して効果を人の顔だけに限定することで、「身元の保護」を行うことができます。
magick zelda_tn.gif -scale 25% -scale 400% zelda_pixelate.gif magick zelda_tn.gif -gamma 0 -fill white \ -draw 'circle 65,53 50,40' zelda_face_mask.gif magick zelda_tn.gif zelda_pixelate.gif zelda_face_mask.gif \ -composite zelda_anonymity.png |
![[IM Output]](../img_photos/zelda_tn.gif)

![[IM Output]](zelda_pixelate.gif)
![[IM Output]](zelda_face_mask.gif)

![[IM Output]](zelda_anonymity.png)
|
![]() |
-scale
」演算子を1つの「-blur
」に置き換えるだけで、詳細をぼかすことができます。このマスクされた領域を置き換えるテクニックは、画像から不要なテキストやロゴを削除するためにも使用できます。詳細は穴埋めを参照してください。画像にテクスチャを追加する
ハードライトアルファ合成法、またはその他の様々なライティング合成法は、画像にテクスチャパターンを与える方法を提供します。たとえば、ここでは、中国南部昆明動物園で撮影したパゴダの写真に、粗い布地のテクスチャを追加しています。
magick tile_fabric.gif -colorspace gray -normalize \ -fill gray50 +level 35% texture_fabric.gif magick composite texture_fabric.gif pagoda_sm.jpg \ -tile -compose Hardlight photo_texture.jpg |
![[IM Output]](../images/tile_fabric.gif)

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

![[IM Output]](photo_texture.jpg)
magick composite
」コマンドを使用する必要があります。「magick
」コマンドの方が汎用性が高いですが、convertを使用してメモリ内で画像をタイル状に配置する他の多くの方法もあります。また、このようにテクスチャを追加する場合、元の画像の細かいディテールは、重ねられたテクスチャの過剰なノイズによって失われる可能性があるため、テクスチャはシンプルにするか、コントラストを低減するレベル調整などを使用して効果を適切に調整する必要があります。画像パターンをテクスチャとして使用する場合は、元の画像で変更されていない領域に完全なグレーの色を使用するように変更する必要があります。つまり、画像の平均色は約50%グレーである必要があります。この例では、ほぼすべてのタイル可能な画像でこれを行うことができる方法の1つを示していますが、この特定の方法が常にうまく機能するとは限りません。このようなテクスチャは、Webページの様々な背景パターンとして、Web全体で見つけることができます。テクスチャのように見えない場合や、カラフルな場合、または非常に明るくても暗くても構いません。ただし、調整後、非常に興味深い効果を得ることができることがわかります。これまでと同様に、適切なマスクを作成することで、画像のどの部分をテクスチャにするかを制限できます。たとえば、パゴダの写真の近くの「白」の空のマスクを作成してみましょう。
magick pagoda_sm.jpg -fuzz 10% -transparent white \ -alpha extract -negate pagoda_mask.png magick pagoda_sm.jpg photo_texture.jpg pagoda_mask.png \ -composite photo_texture_masked.jpg |
![[IM Output]](pagoda_mask.png)

![[IM Output]](photo_texture_masked.jpg)
![[IM Output]](../img_photos/shirt.jpg)
クロマキーマスク-- 特定の色領域による修正
左の写真は、IMフォーラムディスカッションのユーザーから提供されました。彼は、素敵な「ピンク」色の女の子のシャツの色を変更したいと考えていました。問題は、色が単なる「ピンク」ではなく、「ピンク」のさまざまな色合いの範囲であることです。上記のように、画像に変更を加えるには、最初に通常、対象領域の適切なマスクを生成します。ここでは、クロマキーとして知られるテクニックを使用して、特定の色をマスクとして生成します。このテクニックは、一般的に、マスクとして使用する画像内の特定の色を探します。これは、テレビや映画で広く使用されている「青」と「緑」のスクリーン効果にも使用されるテクニックです。これは基本的に、チャンネル画像の分離によって「色相」を抽出し、「色相シェード」を探します。たとえば…
|
![]() |
では、2つのチャンネルマスクを抽出して結合しましょう。色相がモジュールを使用して「ロール」された後、色相=Gray64であり、灰色の背景では飽和=黒であることに注意してください。
-morphology Smooth Square )で削除できます。完璧ではありませんが、機能します。より良い方法は、手動でマスクを編集してクリーンアップすることです。マスクは、上記の二重露光と匿名性の例で行ったように、合成マスクで使用できます。ただし、マスクを使用して既存の画像を変更する場合(画像の歪みやサイズ変更なし)、書き込み不可の領域を定義するためにマスクを使用する方が簡単です。これらはクリップマスクまたは書き込みマスクとして知られています(「-mask 」を参照)。 |
![]() |
ここでは、前のマスクの小さな欠陥をクリーンアップ(オプション)し、それを反転させて「書き込み保護」する領域を定義します。次に、このマスクを設定し、色相をシフトして「ピンク」を「ライトブルー」の色に変え、結果の画像を保存します。
|
![]() |
グリーン画面
今後の例では、「緑のスクリーン背景」のクロマキーマスクを使用します。ウィキペディアの記事クロマキーを拡張したもの。「グリーン画面」処理における実際の問題は、「カラー・スピル」で、細かい明るい色の髪(ブロンド)や半透明の領域が最悪のカラー・スピル効果を生み出します。
単純なカラー・スピル除去(カラー修正)
g(r,g,b) => (r, min(g, b), b)
a(r,b,g) => K0 * b − K1 * g + K2
背景色は既知であり、一度「アルファ」がわかれば、2つの背景を使用した背景除去に示されているテクニックを使用して、最初のカラー式よりも、存在する可能性のある「グリーン画面のハロー」を削除できます。
アーティストのチャコールスケッチ画像
チャコールスケッチ変換を使用すると、画像の簡素化されたグレースケールレンダリングを非常に簡単に生成できます。「混雑した画像」にはうまく機能しませんが、単純な画像には非常に印象的な結果を生み出すことができます。子供のための塗り絵の輪郭画像
IMユーザーフォーラムで塗り絵の生成について長い議論が行われた結果、単純な写真を子供たちが色を塗ることができるものに変えるための次のクックブックレシピが開発されました。これが、これまでで最高の結果です。ベルリンのホロコースト記念館で撮影した写真に適用しています。
magick holocaust_sm.jpg \ -edge 1 -negate -normalize \ -colorspace Gray -blur 0x.5 -contrast-stretch 0x50% \ color-in.gif # For heavily shaded pictures... # #-segment 1x1 +dither -colors 2 -edge 1 -negate -normalize \ |
![[IM Output]](../img_photos/holocaust_sm.jpg)

![[IM Output]](color-in.gif)
-edge
」を使用する前に、このタイプの画像を反転します。
magick piglet.gif -background white -flatten \ -colorspace Gray -negate -edge 1 -negate -normalize \ -threshold 50% -despeckle \ -blur 0x.5 -contrast-stretch 0x50% \ color-in_cartoon.gif |
![[IM Output]](../images/piglet.gif)

![[IM Output]](color-in_cartoon.gif)
-threshold
」を使用して、-edge
が生成しがちな個々の点を削除します。その後、画像内のエイリアシングされた線を再度滑らかにしようとします。上記は、アウトラインを見つけるための合成除算メソッドを使用するために、GIMPフォトコピーフィルターに関する議論に追加されました。
magick taj_mahal_sm.png -colorspace gray \ \( +clone -blur 0x2 \) +swap -compose divide -composite \ -linear-stretch 5%x0% photocopy.png |
![[IM Output]](../img_photos/taj_mahal_sm.png)

![[IM Output]](photocopy.png)
-linear-stretch
」操作は、画像の暗い領域の黒さを調整し、「-blur
」のシグマはシェーディングの鮮明さを定義します。鉛筆スケッチ
Photoshop (PSP) チュートリアル を使用して画像を鉛筆スケッチに変換する方法について、dognose(IMユーザーフォーラム)は、同等のImageMagickコマンドを作成しました。以下は、彼の変換をいくつかのIMコマンドに簡素化したもので、多くの画像を「アーティストの鉛筆スケッチ」形式で一括処理できます。まず、特別な「pencil.gif
」画像が必要です。これは時間がかかるため、この例ではサイズを小さくしましたが、より大きな画像全体にタイル化できる機能は維持しています。技法の詳細についてはタイル画像の修正を参照してください。これは一度だけ行えば、再利用できます。そのため、タイル効果を回避するために、自分の用途に合わせてはるかに大きなものを生成できます。理想的には、変換する画像と同じ大きさにしてください。
|
![]() |
magick pagoda_sm.jpg -colorspace gray \ \( +clone -tile pencil_tile.gif -draw "color 0,0 reset" \ +clone +swap -compose color_dodge -composite \) \ -fx 'u*.2+v*.8' sketch.gif |
![[IM Output]](../img_photos/pagoda_sm.jpg)

![[IM Output]](sketch.gif)
composite
」コマンドの「-blend
」演算子は「magick
」コマンドでは使用できないため、DIYの「-fx
」演算子を使用して同等の処理を行いました。おそらく、より良い、高速だがより複雑な方法があるでしょう。(ご提案歓迎です)これは最終版ではなく、演算子は画像内のより明るいものの鮮明な色の変化の一部をアウトライン表示するために必要なエッジ強調の側面を一部欠いています。上記を改善できますか?上記のアルゴリズムは、ImageMagickに「-sketch
」というアーティスティックな変換として組み込まれていましたが、「-resize
」による生成された「鉛筆タイル」の平滑化はありませんでした… ヴィネット除去
写真を撮影する場合(デジタルかそうでないかに関わらず)、カメラレンズは一般的に画像のエッジとコーナーを暗くします。これは「ヴィネット」と呼ばれます。「-vignette
」演算子を使用して、意図的にこのレンズ効果を偽造することがよくあります。ヴィネット変換を参照してください。Martin Herrmann 除算
」という合成メソッドで、「ソース」画像を「背景」画像で除算します。例えば、
magick nikon18-70dx_18mm_f3.5.jpg vegas_orig.jpg \ -compose Divide -composite vegas_fixed.jpg |
![[photo]](../img_photos/vegas_tn.gif)

![[photo]](../img_photos/nikon18-70dx_18mm_f3.5.gif)

![[photo]](vegas_fixed.gif)
(クリックして大きな写真を見る)
|
![]() |
- レンズからのフィルムの距離。離れるほど光の広がりが大きくなります。
- 光の角度による開口部の「円形」(レンズまたはピンホール)の面積。
- 開口部の周りのカメラ材料の配置。たとえば、レンズホルダーやピンホールの厚さ。