煽りレンズの歪曲 [考え中の問題]
Photonics West用に準備しているデモ光学系に使うカメラのドライバをしこしこ書いてるけど、その前に片付けないといけない問題が発生した。さくっと計算してさくっと終わらせる。
問題とはなにかというと、デモ光学系で物体面と像面が平行でない結像にする必要が出た。いわゆるレンズを「煽る(あおる)」ということをする。これをすれば奥行きのある平面をデフォーカスなしに結像することができる。もちろん実際にどのくらいの解像度が確保できるかはレンズの性能とFナンバに依存する。
物体面と像面が平行でない結像はScheimpflugの条件と言って、物体面と像面とレンズの間にわかりやすい簡単な関係があることがわかっている(ちなみにWikipediaでは日本語も英語も「シャインプルーフの原理 Scheimpflug Principle」となっているが、「相対性原理」や「光速度不変の原理」なんかとはまったく議論のレベルが違って、こんなものは原理でもなんでもないので僕はこう呼んでいるし、こう呼ばれるのが正しいと僕自身は思っているのでこう書くことにする。まあ、でもそれは今はどうでもいい)。
今回、僕が問題にするアプリケーションはいわゆるマシンビジョンというか、カメラを使った形状計測で、解像度を確保すると同時に歪曲収差(Distortion)を補正する必要がある。レンズを煽ろうとどうしようと当然、遠くにあるものは小さな像になるのでそれも歪曲収差と同じものとして補正する必要があるけど、煽ったらどんな歪曲になるのかよくわからなかった。
日本語WikipediaにはScheimpflugの条件がなんで成り立つのかは書いてないし、英語のWikipediaは初等的な計算方法を使っていて歪曲を計算する役には立たない。
また、若い光学屋がやるような、一般論が展開できる場面にもかかわらず、光線追跡ソフトを使って「この場合、こうなります」みたいな結論は僕はほんとうに大嫌いなので、自分で計算することにした。
ということで、簡単な一般論を射影変換の道具を使って計算してみる。
多分僕は、LaTeXより便利なツールが現れなければ、死ぬまでずっとこのやりかたで書くことになると思う。
まず最初は中学で習うレンズの公式から始める。 は、図-1にあるような、厚さ0の理想レンズからの距離aにある物体とその像のレンズからの距離bの関係を表している(距離のはかりかたはaとbで向きが逆なので注意)。fはレンズの焦点距離である。 また は横倍率と呼ばれる。光軸からhの距離にある点の像は光軸からβhの距離になる。このような結像をするレンズが理想レンズである。
これを空間座標で表してみる。図-2のように、理想レンズの光軸方向をz軸に、上方向をyの正の向きにとる。そしてレンズの中心は原点Oにあるとする。 光軸上の位置(0,0,zp)とその像の位置(0,0,z′p)を使って式-1を書くと となる。式-1のaとbは距離になっているので符号を調整する必要がある。ここで レンズによって点P=(xp,yp,zp)が点P′=(x′p,y′p,z′p)に結像されたとすると となる。横倍率は と書ける。
座標で書くと符号も含めて整合的になる。中学で教えるときに式-1ではなくて向きを符号で表す書き方で教えてほしいなあ、と年寄りの光学屋としては強調したいところである。
zpが負(レンズの左側にある)でf < −zpなどの場合、βは負になる。そのときxp、yp、zpとx′p、y′p、z′pはそれぞれ逆の符号を持つことになる。この像を実像と呼ぶ。βが正のときは虚像と呼ぶ。
式-5は、対称性はいいけど座標変換には不便なので(僕のアプリケーションでは最終的には座標をぐりぐり回したりしたい)、さらに同次座標(Wikipediaよりわかりやすいpdf)を使って書き直すと、 と書ける。 ただし、HLは である。この4元のベクトル(x,y,z,w)が同次座標である。
式-7の(xt,yt,zt,wt)は計算のための便宜的な座標で、少なくとも以下の議論では最終的に(x′p,y′p,z′p)を知ったあとは要らなくなると考えていい。
この平面の理想レンズによる結像を考える。pを成分にわけて同次座標として書くと 式-9を使って具体的に成分を計算すると 従ってpの像p′は p′の成分は有理式になったが、分母は全て同じなのでf+(s z1+t z2+z0) = 0でない限りは、式-14は平面を表している。
つまり理想レンズでは、光軸に垂直でない平面でも平面に結像されることがわかる。
ここで、pによる平面と、レンズの面すなわちz=0の平面との交線を考えてみる。
それは を満たすような(s,t)の組みを調べればいいので という直線になることはすぐわかる。またこの条件のとき、式-14を見ればわかるように像p′のz成分も0になる。そしてそれぞれの成分の分母はただのfになって式-11と式-14は一致することがわかる。
つまり、任意の平面は、その像平面と厚さ0のレンズの存在する平面(つまりそのレンズの主平面)上で交わるということになる。これまで物体面と像面は光軸に垂直な平面を考えていたが、この関係を満たすように二つの面を配置するとそれらはお互いに結像関係になる、ということである。
逆に考えれば、物体面と像面とが平行でない場合にその交線が主平面に入るようにレンズの光軸を向ければ結像関係になるということで、これを「Scheimpflug(シャインプルーフ)の条件」という。この機能を持ったレンズが「アオリ付きレンズ」として一般的に存在している。ちなみに光学用語として、日本語の「アオリ」は英語の「Tilt」と「Shift」を混乱して使ってしまっていることが多いので注意が必要である。
ここまでガタガタ計算してきたけど、実は理想レンズの結像が射影変換であることを認めれば、「Scheimpflugの条件」は自明である。数学の力はすごいのだ。パパなのだ。
長くなってしまったので、次回具体的に簡単な場合で計算して、歪曲収差を書き下すことにする。
問題とはなにかというと、デモ光学系で物体面と像面が平行でない結像にする必要が出た。いわゆるレンズを「煽る(あおる)」ということをする。これをすれば奥行きのある平面をデフォーカスなしに結像することができる。もちろん実際にどのくらいの解像度が確保できるかはレンズの性能とFナンバに依存する。
物体面と像面が平行でない結像はScheimpflugの条件と言って、物体面と像面とレンズの間にわかりやすい簡単な関係があることがわかっている(ちなみにWikipediaでは日本語も英語も「シャインプルーフの原理 Scheimpflug Principle」となっているが、「相対性原理」や「光速度不変の原理」なんかとはまったく議論のレベルが違って、こんなものは原理でもなんでもないので僕はこう呼んでいるし、こう呼ばれるのが正しいと僕自身は思っているのでこう書くことにする。まあ、でもそれは今はどうでもいい)。
今回、僕が問題にするアプリケーションはいわゆるマシンビジョンというか、カメラを使った形状計測で、解像度を確保すると同時に歪曲収差(Distortion)を補正する必要がある。レンズを煽ろうとどうしようと当然、遠くにあるものは小さな像になるのでそれも歪曲収差と同じものとして補正する必要があるけど、煽ったらどんな歪曲になるのかよくわからなかった。
日本語WikipediaにはScheimpflugの条件がなんで成り立つのかは書いてないし、英語のWikipediaは初等的な計算方法を使っていて歪曲を計算する役には立たない。
また、若い光学屋がやるような、一般論が展開できる場面にもかかわらず、光線追跡ソフトを使って「この場合、こうなります」みたいな結論は僕はほんとうに大嫌いなので、自分で計算することにした。
ということで、簡単な一般論を射影変換の道具を使って計算してみる。
0.1 最初に注意
ここではベクトルを要素で書いたとき、縦ベクトルと横ベクトルが混乱しない場合は区別して書かない。つまり と を区別せず書きやすいほうで書くことにするので注意のこと。なぜそう書くかというと、LaTeXでは横ベクトルの方が縦ベクトルよりずっと書きやすくて、マトリクスとの積では計算可能な向きが決まってしまうことが多いからである。多分僕は、LaTeXより便利なツールが現れなければ、死ぬまでずっとこのやりかたで書くことになると思う。
1 厳密な理想レンズによる結像
同次座標で理想レンズの結像を書いておく。まず最初は中学で習うレンズの公式から始める。 は、図-1にあるような、厚さ0の理想レンズからの距離aにある物体とその像のレンズからの距離bの関係を表している(距離のはかりかたはaとbで向きが逆なので注意)。fはレンズの焦点距離である。 また は横倍率と呼ばれる。光軸からhの距離にある点の像は光軸からβhの距離になる。このような結像をするレンズが理想レンズである。
これを空間座標で表してみる。図-2のように、理想レンズの光軸方向をz軸に、上方向をyの正の向きにとる。そしてレンズの中心は原点Oにあるとする。 光軸上の位置(0,0,zp)とその像の位置(0,0,z′p)を使って式-1を書くと となる。式-1のaとbは距離になっているので符号を調整する必要がある。ここで レンズによって点P=(xp,yp,zp)が点P′=(x′p,y′p,z′p)に結像されたとすると となる。横倍率は と書ける。
座標で書くと符号も含めて整合的になる。中学で教えるときに式-1ではなくて向きを符号で表す書き方で教えてほしいなあ、と年寄りの光学屋としては強調したいところである。
zpが負(レンズの左側にある)でf < −zpなどの場合、βは負になる。そのときxp、yp、zpとx′p、y′p、z′pはそれぞれ逆の符号を持つことになる。この像を実像と呼ぶ。βが正のときは虚像と呼ぶ。
式-5は、対称性はいいけど座標変換には不便なので(僕のアプリケーションでは最終的には座標をぐりぐり回したりしたい)、さらに同次座標(Wikipediaよりわかりやすいpdf)を使って書き直すと、 と書ける。 ただし、HLは である。この4元のベクトル(x,y,z,w)が同次座標である。
式-7の(xt,yt,zt,wt)は計算のための便宜的な座標で、少なくとも以下の議論では最終的に(x′p,y′p,z′p)を知ったあとは要らなくなると考えていい。
2 Scheimpflugの条件
任意の平面上の点pを と表す。ここでsとtはスカラの媒介変数であり、v1とv2とv0は空間ベクトルで、v1とv2はお互い独立だとする。つまり平面を、v0を通ってv1とv2で張られる面であると考える。この平面の理想レンズによる結像を考える。pを成分にわけて同次座標として書くと 式-9を使って具体的に成分を計算すると 従ってpの像p′は p′の成分は有理式になったが、分母は全て同じなのでf+(s z1+t z2+z0) = 0でない限りは、式-14は平面を表している。
つまり理想レンズでは、光軸に垂直でない平面でも平面に結像されることがわかる。
ここで、pによる平面と、レンズの面すなわちz=0の平面との交線を考えてみる。
それは を満たすような(s,t)の組みを調べればいいので という直線になることはすぐわかる。またこの条件のとき、式-14を見ればわかるように像p′のz成分も0になる。そしてそれぞれの成分の分母はただのfになって式-11と式-14は一致することがわかる。
つまり、任意の平面は、その像平面と厚さ0のレンズの存在する平面(つまりそのレンズの主平面)上で交わるということになる。これまで物体面と像面は光軸に垂直な平面を考えていたが、この関係を満たすように二つの面を配置するとそれらはお互いに結像関係になる、ということである。
逆に考えれば、物体面と像面とが平行でない場合にその交線が主平面に入るようにレンズの光軸を向ければ結像関係になるということで、これを「Scheimpflug(シャインプルーフ)の条件」という。この機能を持ったレンズが「アオリ付きレンズ」として一般的に存在している。ちなみに光学用語として、日本語の「アオリ」は英語の「Tilt」と「Shift」を混乱して使ってしまっていることが多いので注意が必要である。
ここまでガタガタ計算してきたけど、実は理想レンズの結像が射影変換であることを認めれば、「Scheimpflugの条件」は自明である。数学の力はすごいのだ。パパなのだ。
長くなってしまったので、次回具体的に簡単な場合で計算して、歪曲収差を書き下すことにする。
2016-01-14 22:26
nice!(0)
コメント(0)
トラックバック(0)
コメント 0