ほぼ個人的な備忘録になります。
また専門家でもないので誤りも多々あるかもしれません。
先日書いたパノラマ作成の勉強の続編で、領域をオーバーラップさせながら複数の写真で広範囲撮影できたと仮定して、次のステップ。
それらを位置ズレや色・輝度の不連続なく繋ぎ合わせるには、まずレンズ固有のDistortion(歪み)やVignette(対応する和訳って「周辺光量落ち」でいい?)を修正して位置的にも輝度的にもフラットな絵にする必要がある。
特にFishEyeのような歪みの大きい画像はこれらの補正を行って直線化しないと綺麗に繋げない。
その作業をコンピュータービジョンの世界では「カメラキャリブレーション」というが、一眼の世界ではカメラとレンズが別々で、主にレンズの特性で決まるので「レンズ補正」と呼ばれているようだ。(本当に同義かどうかは確信がないが)
このあたりの補正パラメータは、本来は市松模様のボードを位置を変えて多くの枚数を撮影して計算で求める面倒なものなのだが、DistortionもVignetteもレンズ固有のものなので、PhotoShop(LR)などでは便宜を図るためにこれらの特性(以降、補正パラメータ)を記録した各レンズに対応するLensProfileというものを予め提供、もしくはその作成ツールを提供。
そのLensProfileを用いてCameraRawもしくはLightroom上でワンタッチで補正が出来るようになっている
また所望のLensProfileがない場合はAdobe Lens Profile Downloaderというツールを使えば、Web上にあるLensProfileのファイルを検索&ダウンロードできる。
…と、ここまでは多くのカメラ入門本やWeb情報でも多く書かれているし、レンズ補正そのものはカメラマンが日常的に行う作業でもあるので、そもそもここで書くまでもない事柄です。
しかしながら一歩踏み込んで、このLensProfile及びそれを用いたレンズ補正のより定量的な詳細を知りたいとさらにググってみると、どういうことかWebでの情報がほとんどなくなってしまう。
今回の趣旨は、Photoshopをいちいち介さずOpenCVを含めたプログラム上で処理を完結したいので、この情報のあまりない領域に踏み込んでみようというものです。
そこで唯一手がかりとなるのが
lensprofile_creator_cameramodel.pdf
でググって見つかるpdfのみ。(なぜかAdobeではなくM&Aしたmacromediaのサイトにある。目立たないようにひっそり置かれており、そのうち消されるかもしれない)
このpdfを熟読すれば、いくばくかの不明点は残るもののほぼLensProfileの全貌がわかるようになっている。
LensProfileには以下の3つの補正パラメータ群が含まれている。
1. Geometric Distortion Model for Rectilinear Lenses もしくは Fisheye Lenses
2. Lateral Chromatic Aberration Model
3. Vignette Model
上から半径方向・円周方向の歪み、その色収差及び周辺光量落ちの補正パラメータとなる。
1の歪みに関しては世の中にあるレンズの大半を占めるRectilinearレンズと少々構造の異なるFishEyeレンズで計算方法が異なってくるので別々に定義されている。この歪みはRGBの区別(要は色収差)は考慮されていない。
2に関しては1と全く同様の計算式でRGB各チャンネル毎に定義されている。1と2を色収差補正の要不要で使い分けるのか。実はまだよくわかっておらず、今回はパノラマ用なので色収差まで厳密になる必要もないのでこの項に関しては追求せず、RGBのすべてのチャンネルに1の補正を行っている。
3の補正は1&2の補正より先に行う必要がある。つまり、補正をかける順番は3 -> 1 or 2となる。
LensProfileはウチの環境(win7+camera raw)の場合は以下に格納されるが、環境の違いで場所は異なってくるはず。
C:\Users\All Users\Adobe\CameraRaw\LensProfiles\1.0
LensProfileはそれぞれカメラとレンズの組み合わせ毎に1ファイルになっていて、lcpの拡張子がついている。
もちろんカメラすべての組み合わせが揃っているわけではないので、おそらく適用するカメラと同じセンサーサイズのカメラのものを選べばよさそう。
lcpファイルは実質xmlファイルで、以下のようなフォーマットになっている。例としてCanon撒き餌レンズのもの。
x:xmpmeta/rdf:RDF/rdf:Description/photoshop:CameraProfiles/rdf:Seq/
の下に幾つかのrdf:liノードがぶら下がっている。
このそれぞれのrdf:liにそのレンズの異なる状態(Aperture,Focal Length,Focal Position)に対応した補正パラメータが格納されている。
補正対象とぴったり同じ状態のパラメータがあれば理想だが、そうでない場合は最も近いrdf:liを採用するのか、それともそれを何らかの計算で補間するのかの情報は見つからない。とりあえず今回は前者を採用。
それぞれのrdf:liの下に肝心の補正パラメータが格納されている。
以降何回かに分けてこれらの補正パラメータやレンズ補正の詳細を分かった範囲で書ければと思ってます。