ImageMagick 使用例 -- レンズ補正
- 基本的な手法
- Hugin によるレンズパラメータセットの決定
- 点集合の定義
-
レンズ歪みの補正(PDF) 写真を撮影すると、生成される画像は実際にはレンズ効果と球面遠近効果の両方によって歪みます。写真を利用しようとする場合、一般にこれらの効果を補正する必要があり、本節で扱うのはまさにその点です。このページの大部分は Wolfgang Hugemann 氏が寄稿したものです。
レンズ補正の概要
魚眼レンズや低価格の広角レンズ(あるいは短焦点距離に設定したズームレンズ)は、典型的に顕著な樽型歪みを生じます。しかしこの歪みは、デジタル写真に適切なアルゴリズム変換を適用することで、大部分を補正できます。Panorama Tools が導入し PTlens で使われている、最もよく使われるレンズ補正アルゴリズムの一つは、ImageMagick でも 樽型補正歪み法(Barrel Correction Distortion Method) として提供されています。この問題への取り組みでは、歪みは4つの変換パラメータ a, b, c, d によって制御され、特定のレンズ(あるいは特定の焦点距離に設定したズームカメラ)が生じる歪みを補正するために、これらを賢明に選ぶ必要があります。これらのパラメータの適切な値は、試行錯誤ではまず見つけられません。以下では、さまざまなオペレーティングシステム向けに提供されている Panorama Tools 用のフリーなグラフィカルユーザーインターフェイス Hugin を使って、このモデルのレンズ補正パラメータを効果的に決定する方法を説明します。レンズ補正の細部を扱いたくない場合は、このページの残りを飛ばして、(大規模なレンズデータベースを利用して)膨大な数のデジタルカメラとレンズに対する高度なレンズ補正を手頃な価格で提供する PTlens を購入してもよいでしょう。今日では、一部のデジタルカメラ(Nikon P7000 など)は内部の画像処理ステップにレンズ補正を組み込んでさえいます。この機能を持たないカメラで撮影した写真については、ImageMagick によって、より大きな画像処理スクリプトの一ステップとしてレンズ補正を統合できます。以下の文章は、論文 レンズ歪みの補正(PDF)(事故再現への応用を扱う)の要約版です。ここでの説明は、より実践的なアプローチで、適切なレンズ補正パラメータを入手する方法に重点を置いています。
非拡大の制約
樽型歪み で説明したように、樽型歪みは次の数式で定義されます。
R = ( a * r^3 + b * r^2 + c * r + d ) * r
ここで r はデジタル写真の幾何学的な画像中心までの距離、R は元画像における等価半径です。この種の写像では常にそうであるように、上の式は一種の「色のルックアップ関数」、すなわち半径 r のピクセルの色をどこから探すかを定義します。半径 r と R は画像の短辺の半分(すなわち通常は画像の高さ)で正規化されており、画像の上辺と下辺の中点で r = R = 1 となります。デジタル写真を補正する際には、非拡大の制約に注意を払うべきです。
a + b + c + d = 1
これは明らかに r = 1 のときに R = 1 を与えます。Panorama Tools はパラメータ d を他のパラメータから次式で計算します。
d = 1 - a - b - c
これにより自由なモデルパラメータは3つ残り、パラメータ d は通常省略されます。ImageMagick は d が省略された場合、非拡大の制約により自動的に計算します。したがって、レンズ補正のための典型的な ImageMagick コマンドラインは次のようになります。
magick input.jpg -distort barrel '0.06335 -0.18432 -0.13008' output.jpg
d の計算は ImageMagick に任せます。ここで述べている Panorama Tools のレンズ補正法は、レンズの光軸と画像の中心が一致することを前提としていますが、これは(製造公差のため)実際には厳密には成り立ちません。さらに、口ひげ型歪み(mustache distortion) のような効果も無視しています。それにもかかわらず、実際には驚くほど精密に機能するようです。
曲線(a = 0.05, b = -0.25, c = 0.05)が示すように、この関係は典型的には 0 から 1.5(アスペクト比 3:2)の範囲で用いられ、点 (0,0) と (1,1) を通り、r > 1 では逓減的でなければなりません。
既製のパラメータセット
PTlens の現在のレンズデータベースは、プログラムの「核」であり、暗号化されていて PTlens 自身でしか読み取れません。しかし 2006 年 2 月まで、PTlens のデータベースは XML 形式、すなわち容易に編集できるテキスト形式でコード化されていました。この 2006 年版の PTlens の XML データベースは現在も(合法的に)Hugin の SourceForge ウェブサイト で入手でき、多くの古いカメラ機種のデータを提供しています。PTlens のデータベースが暗号化された際、Hugin の作者たちは代替としてフリーな XML コード化レンズデータベースを確立しようとしました。このデータベースは LensFun と呼ばれ、ダウンロードできます。完全なプログラミングインターフェイスが付属しますが、基本的に必要なのは XML ファイル内のお使いのカメラの情報だけです。例として、かつて人気のあった Nikon Coolpix 995 のレンズ補正パラメータは、ディレクトリ \data\db にあるファイル compact-nikon.xml にあります。このファイルはテキストエディタや XML ビューアで調べられます。
<lens>
<maker>Nikon</maker>
<model>Standard</model>
<mount>nikon995</mount>
<cropfactor>4.843</cropfactor>
<calibration>
<distortion model="ptlens" focal="8.2" a="0" b="-0.019966" c="0" />
<distortion model="ptlens" focal="10.1" a="0" b="-0.010931" c="0" />
<distortion model="ptlens" focal="13.6" a="0" b="-0.002049" c="0" />
<distortion model="ptlens" focal="18.4" a="0" b="0.003845" c="0" />
<distortion model="ptlens" focal="23.4" a="0" b="0.006884" c="0" />
<distortion model="ptlens" focal="28.3" a="0" b="0.008666" c="0" />
<distortion model="ptlens" focal="31" a="0" b="0.009298" c="0" />
</calibration>
</lens>
カメラの技術データシートから読み取れるように、Nikon Coolpix 995 のズーム範囲は 8.2 – 31.0 mm で、35 mm フィルムカメラでの 38 – 152 mm に相当します。これにより 152 / 31 = 4.90 のクロップファクターが得られ、これは XML ファイルに記載された 4.843 におおよそ対応します。樽型歪みによる補正の係数は、6つの焦点距離、すなわち 8.2 mm, 10.1 mm, 13.6 mm, 18.4 mm, 23.4 mm, 28.3 mm, 31.0 mm について与えられています。係数 a と c は、このレンズについては 0 に設定されており、すなわち歪みは二次の項 b のみで記述されます。多くのレンズは a と c のパラメータにも値を持つことに注意してください。それらも同様の方法で補間する必要があります。最短焦点距離に設定した Nikon Coolpix 995 で撮影した写真 DSCN0001.jpg がある場合、この写真は ImageMagick で次のように補正できます。
magick DSCN0001.jpg -distort barrel '0.0 -0.019966 0.0' DSCN0001_pt.jpg
(ファイル名拡張子 _pt は PTlens が補正済み画像を示すために用いるものです。)提供された6つの焦点距離については、補正係数 b は XML ファイルから読み取れます。それ以外の焦点距離については、隣接する2つの焦点距離の間を補間することで適切な値を決定できます。代替として、焦点距離 f への b の依存関係は、次の多項式で近似できます。
b = 0.000005142 * f^3 - 0.000380839 * f^2 + 0.009606325 * f - 0.075316854
したがって、(EXIF 情報から読み取った)焦点距離を用いて、まず第一ステップでレンズ補正パラメータ b を計算し、次に第二ステップで、この値を b パラメータとして用いてレンズ補正(すなわち樽型歪み)を実行します。Windows の節では、上記の方程式を用いた VBScript の例 を示しており、そこでは焦点距離が magick identify を介して Nikon Coolpix 995 の写真から抽出されています。
ゼロからのキャリブレーション
基本的な手法
レンズパラメータを決定する際、すべてのプログラムは同じ考え方に依拠しています。理想的な遠近写像は、現実世界の直線を画像内の直線へ写すべきだ、という考え方です。したがって、現実世界の点の集合 P0, P1, ..., Pn が直線上にあることが分かっている場合、それらの像 p0, p1, ..., pn もまた直線上に乗らねばなりません。この規則からのいかなる逸脱も、レンズ歪みに帰せられるべきです。直線を定義する2つのパラメータ(例えば傾きと y 軸切片)を決定するには、2つの点が必要です。追加で与えられる各点は、レンズ補正パラメータを決定するための別の方程式を提供します。したがって、もし関数的手法に自由パラメータが b の1つだけ(上記の Nikon Coolpix 995 のように)であれば、求めるレンズ補正パラメータ b を決定するために、現実世界の直線とその像の上に少なくとも3つの点を提供する必要があります。より具体的に言うと、歪みモデルはパラメータ b のみを用いるので、補正後の画像の座標 X1, Y1 はデジタル写真の座標から次のように計算できます。
r = s * sqrt(x1^2 + y1^2)
X1 = [(1-b) + b r^2] * x1
Y1 = [(1-b) + b r^2] * y1
Y1 = k1 * X1 + k2
これは、同じ直線上に提供された各点について1つの方程式をもたらします。
[(1-b) + b r^2] * y1 = k1 * [(1-b) + b r^2] * x1 + k2
with: r = s * sqrt(x1^2 + y1^2)
したがって、3つの現実世界の点とそれに対応する像の点があれば、直線とレンズ歪みを記述するパラメータ k1, k2, b を決定するのに十分です。実際には、現実世界の点の座標が分かっていることはまれであり、そのため求めるパラメータを決定するには3点よりも多くの点が必要です。ほとんどのキャリブレーションソフトウェアは、直線の長方形グリッド(しばしばチェッカーボード)を用いて方程式の集合を生成し、非線形最小二乗フィッティングによって写像パラメータを計算します。一部のプログラムは、しばしば事前定義されたテンプレートを使って制御点の集合を自前で生成します。他のプログラムは、ユーザーにキャリブレーション画像から制御点を選択することを要求します。
Hugin によるレンズパラメータセットの決定
以下では、Hugin を使ってレンズ補正パラメータの集合を決定する方法を示します。Hugin のウェブサイトには既製の「Simple Lens Calibration Tutorial」もありますが、本稿執筆時点(2014年)では、後で多数の補正に使える信頼性の高いパラメータを提供するには単純すぎるようです。まず、適切なテストパターンを入手する必要があります。基本的に、約 10 × 7 の正方形からなるチェッカーボードパターンを ISO 216 A3 などに印刷したもので十分で、よく用いられます。ただし低価格のズームレンズ(いわゆる バリフォーカルレンズ)は、キャリブレーション中は無限遠フォーカスに設定すべきです。近距離フォーカスでは、その真の焦点距離が EXIF に埋め込まれた値と大きく異なる場合があるためです。固定焦点レンズについてはチェッカーボードのテストパターンを使ってもよく、これは特に魚眼レンズをキャリブレーションする際に推奨されます。魚眼レンズはその画角を覆うに足る大きさの現実世界の物体を見つけるのが難しい場合があるためです。したがって、特にズームレンズ/ズームカメラをキャリブレーションする際は、PTlens のウェブサイト で提案されているように、むしろ現代的な建物の写真を撮るべきです。そこに示された指示に従ってください。写真は遠近歪みを示すことがあります。
Hugin を起動し、最初のタブの「Add images ...」ボタンをクリックしてキャリブレーション画像を開きます。(Hugin のインターフェイスのスクリーンショットは hugin.sourceforge.net を参照してください。)タブの下部で「Optimise」を「Custom parameters」に設定します(これにより「Optimiser」という新しいタブが追加されます。そうしないとこのタブは現れません)。「Stitcher」タブで「Projection」を「Rectilinear」に設定します。「Control Points」タブでは、テスト写真が2回表示され、両方の版の写真でこれらの点グループを選ぶことで、同じ直線上にある点の集合を定義できます。
ただし、両方の版でまったく同じ点を選び、両画像で点が同一になるようにはしないでください。これはオプティマイザを誤導して安易な道、すなわち一対一対応のパラメータを決定する道へ進ませてしまいます。代わりに、画像の両方の版で同じ線上の異なる点を選ぶべきです。テスト目的では、そのような点集合をいくつか定義できます。最良なのは、直線がより歪んでいる画像の端の近くです。Hugin でこのような点集合を定義するのはかなり手間のかかる作業だと分かるでしょう(これが lensfun データベースがこれほど小さい理由の一つかもしれません)。
次に「Optimiser」タブに切り替え、ctrl キーを押しながら左クリックして最適化するパラメータを選びます。(タブ上部のヒントを参照。)「Yaw(y)」「Pitch (p)」とレンズパラメータ「a」「b」「c」を最適化することをお勧めします。水平画角「Hfov (f)」は、テスト画像の EXIF データから、FocalLengthIn35mmFilm エントリ f を用いて計算されます。
Hfov = 2 × arctan (18 mm / f)
ここで 18 mm は 35 mm ネガ(36 × 24 mm)の幅の半分です。次に「Optimize now!」ボタンを押します。結果として得られるパラメータ「a」「b」「c」は、広角レンズでは 0.01 を、魚眼レンズでは 0.1 を下回るはずです。値がより大きい場合、最適化はおそらく失敗しています。その場合は「Control Points」タブの点集合を確認してください。制御点がおそらく順序が乱れているか、対応する線と正しく関連付けられていません。オプティマイザは、提供された開始集合(数学的に言えば開始ベクトル)にも敏感なようで、すべてのパラメータを 0 に設定するのは誤った選択かもしれません。開始ベクトルは、「Optimiser」タブの値をダブルクリックするか、タブページ右下のチェックボックス「Edit script before optimising」を有効にすることで編集できます。これにより最適化の前にテキストボックスが表示され、Hugin プロジェクトファイルの該当セクションを編集できます。オプティマイザを再起動する前に、開始ベクトル a, b, c を a0.0 b0.0 c0.0(または他の適切な値)に戻してください。経験上、特に魚眼レンズでは「a」を何らかの正の値に設定すると役立つことがあります。固定レンズを備えたカメラでは、このキャリブレーションを一度だけ行います。ズームレンズを備えたカメラでは、約5つの異なる焦点距離でキャリブレーションすることで、焦点距離の全範囲をカバーする必要があります。そのようなパラメータ集合を決定したら、ImageMagick で次のようにテストしてみてください。
magick calibration_image.jpg -distort barrel '_a b c_ ' flat.jpg
値 _a b c_ を、いま決定した値で置き換えます。出力画像の線は完全に真っ直ぐであるはずで、そうでなければ最適化は失敗しており、異なる開始ベクトルまたは修正した制御点集合で実行し直す必要があります。
点集合の定義
本格的なキャリブレーションのためには、Hugin プロジェクトファイルを手作業で編集し、点座標と点集合を別の手段で定義することをお勧めします。プロジェクトファイルは拡張子 PTO のプレーンテキストファイルで、単純なテキストエディタで開いて点リストを供給できます。# control points セクション内の1行は次のようになります。
c n0 N0 x175.0 y87.8 X1533.3 Y62.6 t3
ここで x, y はソース画像(タブの左画像)のピクセル座標、X, Y はターゲット画像(タブの右画像)のピクセル座標です。この特殊な場合、これらは実際には同じ画像の2つの版です。(通常はパノラマ内で隣り合う2つの異なる画像になります。)冒頭の c n0 N0 は標準コードで、末尾の t3 は関連付けられた直線の番号付けで、インデックス3から始まります。上の例から読み取れるように、ピクセル座標は小数部を持つことがあります。もちろん x, y と X, Y は同じ直線上に乗らなければなりません。ただし同一であってはなりません。この場合オプティマイザが動作を拒否するためです(上記参照)。これを保証する最も簡単な方法は、両方の画像で同じ点を使い、ただしターゲット座標は逆順にすることです。例えば、左画像では p1, p2, p3, p4 を、右画像では P4, P3, P2, P1 を使います。ソース画像のピクセル座標は点選択ツールで決定します。任意の画像ビューア、特にそのようなデータを保存できるものを使えます。プラットフォーム非依存のツールとしては Fiji があります。私は(Windows 環境で作業しており)WinMorph のポリラインを使いました。点を選ぶ際には事前定義された方針に従うべきです。例えば、(おおよそ)水平な各線で同じ数の点を選び、左から右へ進みます(すなわち、テレビのブラウン管の電子ビームのように、画像全体でジグザグの線をたどる)。このような方針は、ターゲット点座標の順序付けを単純にします。ソースとターゲットの点座標を定義するテキストファイルの行は、手作業またはソフトウェアツールによって作成できます。(私はこの作業を Excel VBA サブルーチンで行っています。)準備ができたら、点リストを PTO ファイルの対応するセクションにコピーし、保存して Hugin で再度開きます。結果は次のようになるはずです。
キャリブレーション画像と対応する Hugin プロジェクトの両方を含む既製の例が、ZIP ファイル olympus_c2500l.zip で提供されています。 カメラが生成したサムネイルからの逆算一方が樽型に歪み、他方がすでに補正済みという、画像のペアをすでに持っている場合がいくつかあります。この補正は他のレンズ補正ソフトウェアで行われたものかもしれず、それは補正パラメータを教えてくれません。さらに、現代の多くのカメラ(2019年)は、JPEG 画像に対してレンズ補正を内部的に実行することを提供しています。ただしこの機能は通常 RAW 画像には適用されません。(まあ、RAW ですから。)それにもかかわらず、RAW 画像にはカメラによってすでに補正が適用された JPEG プレビューが含まれています。ImageMagick は dcraw を用いて RAW 画像を読み取れます。したがって、レンズ補正なしで RAW 画像を magick で JPEG に変換し、その結果を内部補正済みの JPEG サムネイルと比較できます。そのような画像ペアの場合、補正パラメータは直接的に計算できます。両画像で対応する点のペアを選ぶことで、r と R の関係を直接確立できます。 ![[RAW Image]](../static/img/lens/raw_marks.jpg)
RAW 画像(樽型に歪んでいる) ![]()
補正済みサムネイル(逆算する対象) |
---|---
上の例で示すように、どの点のペアを選ぶかは自由です。これらは直線に従う必要も、幾何学的パターン上に乗る必要さえもありません。r と R の対応する値で表を埋め、それから回帰曲線を計算するだけです。例えば スプレッドシート の図を用います。
![[Calabration]](../static/img/lens/calibration_points.gif)
キャリブレーション点 | ![[Regression]](../static/img/lens/regression_curve.gif)
回帰(スケール調整済み)
---|---
よって ImageMagick のコマンドラインは次のとおりです。
magick barrel.jpg -distort barrel '0.0099 -0.0678 0.0014 1.0511' flat.jpg
同じコマンドを DNG カメラフォーマット画像「barrel.dng」に直接適用することもできます。
レンズ補正の例
キャンプモビル
左のキャンプモビルの元写真は、撮影者の背後が急な傾斜のため空間が限られており、夕暮れ時にかなり近い距離から撮らざるを得ませんでした。(乏しい照明条件が、後処理での強い明るさ補正に由来する青みを説明します。)元写真は顕著な樽型歪みを示しており、特に画像上部近くの水平の帯と建造物の奥の角で目立ちます。この撮影に使われた Nikon Coolpix 995 は PTlens のデータベースにあるため、中央に見られるように歪みは容易に補正できました。右の画像は、2枚の写真のグレースケール版の差分を示しており、2枚の減算に続いて反転、極端なクリッピング、そしてガンマ補正を施して計算したものです。ここでも補正の効果は、上部の水平の帯で最もよく示されます。白い円(差分ゼロを示す)は非拡大の制約に由来します。すなわち、画像の短辺に等しい直径の円上の点は変化しないまま残ります。
GoPro の平坦化
GoPro カメラのレンズは顕著な樽型歪みを生じ、これはそのブランド性の一部のようです。例えば、GoPro Hero 3+ silver edition は焦点距離 2.77 mm 固定の魚眼レンズを持ち、これは感光領域全体を使う場合、35 mm フィルムでの焦点距離 16 mm に相当します。GoPro Hero 3+ には3つの写真モードがあります。
- 1000万画素 = 3680 × 2760 ピクセル 広角(35 mm フィルムで 16 mm)
- 700万画素 = 3072 × 2304 ピクセル 広角(35 mm フィルムで 16 mm)
- 500万画素 = 2624 × 1968 ピクセル 中画角(35 mm フィルムで 23 mm)
GoPro Hero 3+ は 1/2.3" センサーを備えており、クロップファクターは 5.64 です。(これにより 35 mm フィルムで 15.62 mm のみの焦点距離が得られ、EXIF 情報が提供する 16 mm はおそらく丸めによるものです。)最初の2つのモードは感光領域全体を使うようで、解像度の低下は明らかにサブサンプリングによって達成されています。したがって歪みパラメータは同じであり、これは実際に証明できます。500万画素モードは明らかに感光領域の一部のみを使っており、これは 3680 / 2624 × 16 ≈ 23 だからです。レンズパラメータは次のように決定できます。
- 広角:
- a = 0.06335
- b = -0.18432
- c = -0.13009
- 中画角:
- a = 0.01359
- b = -0.06034
- c = -0.10618
理論上、第2モードのパラメータは第1モードから導出できます。半径 ri と Ri はスケール係数 κ = 3680 / 2624 = 1.402 で結ばれており、これにより次が得られます。
- a2 = a1 / κ³
- b2 = b1 / κ²
- c2 = c1 / κ
独立した最適化から得られた上記のパラメータは、これらの理論値とあまり違いません。同様に、各種ビデオモードのパラメータも、最適化によって、あるいはそのモードが使うセンサー領域の部分から導出できます。ビデオの場合、水平画角は EXIF データから導出できません。それは、使われている感光領域から計算するか、(管理された条件下で映像を撮影することで)ビデオ自体から決定するか、あるいは他のパラメータと一緒に推定する、すなわち最適化で自由パラメータとして残すこともできます。HD ビデオ(1920 × 1080)のパラメータは次のとおりです。 * a = 0.030530 * b = -0.124312 * c = -0.038543
これらのパラメータは ImageMagick でのフレーム単位の補正に使えます。代替として、これらは AVIsynth プラグイン DeBarrel によってビデオ全体を「平坦化」するのにも使えます。これも Panorama Tools のレンズ補正モデルを用いています。
2台のキーボード(el_supremo 氏による)
私が撮影した2台のキーボードの写真には、焦点距離 17 mm で撮ったため、非常に明白な樽型歪みがあります。
この種の歪みは、例えば Canon の Digital Photo Professional で補正できます(私は Canon 50D カメラを持っています)。他の一眼レフカメラのメーカーも通常、自社のレンズ用にこの種の補正を行うソフトウェアを提供していますが、私は上記の例がこの写真でどれほどうまく機能するか見てみたかったのです。最初のステップは LensFun のウェブサイト に行き、最新版のカメラデータベースをダウンロードすることです。パッケージを解凍し(winzip は Windows で .tar.gz ファイルを解凍できます)、「lensfun/data/db」ディレクトリでお使いのカメラメーカーに対応するファイルを探します。私の場合は「slr-canon.xml」を見ました。これは任意のテキストエディタで編集できます。そして、私が使っている特定のレンズ、この場合は「EF-S 17-85mm」の情報を見つけます。そのレンズの情報は次のようになっています。
<lens>
<maker>Canon</maker>
<model>Canon EF-S 17-85mm f/4-5.6 IS USM</model>
<mount>Canon EF-S</mount>
<cropfactor>1.6</cropfactor>
<calibration>
<distortion model="ptlens" focal="17" a="0.021181" b="-0.055581" c="0" />
<distortion model="ptlens" focal="20" a="0.019344" b="-0.043786" c="0" />
<distortion model="ptlens" focal="22" a="0.015491" b="-0.026682" c="0" />
<distortion model="ptlens" focal="28" a="0.008084" b="-0.007472" c="0" />
<distortion model="ptlens" focal="30" a="0.005522" b="-0.001763" c="0" />
<distortion model="ptlens" focal="35" a="0.003149" b="0.002207" c="0" />
<distortion model="ptlens" focal="44" a="0" b="0.008269" c="0" />
<distortion model="ptlens" focal="53" a="0" b="0.008792" c="0" />
<distortion model="ptlens" focal="61" a="0" b="0.00738" c="0" />
<distortion model="ptlens" focal="72" a="0" b="0.006226" c="0" />
<distortion model="ptlens" focal="78" a="0" b="0.007095" c="0" />
<distortion model="ptlens" focal="85" a="0" b="0.007288" c="0" />
</calibration>
</lens>
キャリブレーションのエントリは、17mm から 85mm までの焦点距離の範囲について歪み値を与えています。必要な焦点距離がこれらの値の2つの間にある場合、最も近いものを選ぶか、値を補間することができます。私が補正している写真は 17mm で撮ったので、キャリブレーション情報の最初の行の情報が必要です。それは次の値を与えます。a="0.021181" b="-0.055581" c="0" これらはレンズ歪みを補正するために使われる3つのパラメータです。ただし IM の一部の古いバージョンでは、樽型歪み補正は第4のパラメータ d を必要とします。幸い、d の値はこの単純な式を使って他の3つから簡単に計算できます。d = 1-a-b-c つまり、d="1.0344" です。 |
IM は、歪み引数として提供されなければ「d」の値を自動的に算出しますが、一部の古いバージョンの IM はこれを行いませんでした。 |
|---|---|
| これにより、レンズ歪みを補正する実際の 樽型歪み は次のようになります… |
magick keyboards.jpg \
-distort barrel "0.021181 -0.055581 0" \
keyboards_ptlens.jpg
| もちろん、JPEG の非可逆圧縮のため、画像の処理を完全に終えるまでは JPEG に保存すべきではありません。
---|---
元の写真では、歪みは特に譜面台の下部と上のキーボードに沿って明白です。これらの歪みは出力写真ではほぼ完全に消えています。この結果を Canon のソフトウェアで得られたものと視覚的に比較すると、本質的に同じ結果を示します。El-Supremo
![[IM Output]](../static/img/img_photos/building_1.gif)
![[IM Output]](../static/img/img_photos/building_2.gif)
![[IM Output]](../static/img/img_photos/hugin.jpg)
![[IM Output]](../static/img/img_photos/campmobile.jpg)
![[IM Output]](../static/img/img_photos/campmobile_pt.jpg)
![[IM Output]](../static/img/img_photos/campmobile_comp.jpg)
![[IM Output]](../static/img/img_photos/keyboards.jpg)
![[IM Output]](../static/img/lens/keyboards_ptlens.jpg)