統合趣味環境

その都度、気になったことを綴ります。

歪曲収差(ディストーション)が分からない

与太話

つい先日、ようやく子午・球欠像面を計算できるようになりました。主光線が描画できたら


\begin{aligned}
-n\frac{\cos^2 i}{t} + n\frac{\cos i}{r} &= -n'\frac{\cos^2 i'}{t'} + n'\frac{\cos i'}{r}\\
\frac{n'}{s'} - \frac{n}{s} &= \frac{1}{r}(n'\cos i' - n\cos i)
\end{aligned}

のように、光線に沿ってtt'ss'を測ってやればいいわけです。

ここでtt'はタンジェンシャル(子午、メリジョナルと同義)光線についての物・像と屈折点の距離、ss'はサジタル(球欠)光線についてのそれです。そのうち、この導出を載せるかもしれません。

これが計算できた利点は、いわゆる非点収差をグラフ化できたって事です。余談だからこれ以上は踏み込まないで良かろう。

今回のお題

非点収差は解決したとして、話題は歪曲収差。歪曲収差は、四角いものが歪んで見えるレンズ欠陥のこと。つまり物体の高さによって倍率が変わってしまううんだな。こういう像上の倍率を光学屋さんは特に横倍率Mという。

  • 物体の高さが高いほど倍率が小さい方にシフトする → 樽型

  • 物体の高さが高いほど倍率が大きい方にシフトする → 糸巻型

  • 両者が混ざる複雑な形状 → 陣笠型

とかいう分類がある。で、問題はこの倍率についてなんですよ。無限遠の物体の高さってなんだ?それの倍率って?


うーん、考え方が悪い。というか定義式があるはずじゃないか。ググってみると(Zemaxのサイト*1を見ると)


Dist. = 100\times\dfrac{y _ {chief} - y _ {ref}}{y _ {ref}}

である。なるほど、実際の主光線高さy _ {chief}と近軸的に理想な光線高さy _ {ref}のズレを評価するんだな。確かに。で、y _ {ref}ってどうやって求めるの?それが知りたいんだけど。

何も解決しなかった。もうちょうい調べるか。

同サイトによると物体位置によって像位置が変わるから、それに対応したディストーション焦点距離というのを求める必要があるらしい。なにそれおいしいの?

ダメだ、別を当たろう。

文献*2によると、f\thetaレンズについては


Dist. = 100\times\dfrac{f\theta - f\tan\theta}{f\tan\theta}

で歪曲を求めるらしい。

f\thetaレンズっていうのはレジのバーコード読み取り機とかに使われるやつ。レーザーを一定の角速度で回すだけだと、バーコードの中心は遅く、端は速く掃引することになるから、レンズを噛ませてそれを回避している。

あの機械そんなすごいマシンだったのか。

まあ、そのレンズに要求されるのが「像高がf\thetaになる」という条件らしい。確かに入射角\thetaの角速度\dot{\theta}=const.を与えると、焦点距離f = const.だからバーコードの掃引速度はf\dot{\theta}になって速度一定だな。

じゃあ像高f\theta = y _ {chief}と置いていいか。おお、項の位置がZemaxのy _ {chief}にピタリ当てはまる。

これならy _ {ref}の方もy _ {ref} = f\tan\thetaと読み替えて良さそうだな。

他のサイトでも「一般的なレンズは像高がf\tan\thetaになるからf\thetaレンズは特殊」みたいなことが散見される。ほほう、何にせよ入射角\thetaによって理想像高が決定されるのね。

仮定:f\tan\thetaで理想像高が与えられる

仮にf\tan\thetaで像高が与えられるとしよう。念のため書いておくが、fはレンズ最終面から近軸像点までの距離ではなく、後側主点から近軸像点までの距離を表している。従って自分なりに仮定をまとめると

理想像高f\tan\thetaは、入射角度\thetaで主光線が与えられたとき、後側主点から入射角度\thetaで射出された場合の光線と像面の交点である。

ちょっと用語が多くなったが、この考えはある意味で正当性があるように感じる。面倒な人は次の章まで飛ばしてください。


複雑なレンズ系を等価な1枚の薄肉レンズに置き換えたとき、中学校理科レベルの考えが適用できる。つまり「レンズ中心を通る光線は屈折しない」のである。

実際のレンズ系は厚みを持つから「レンズ中心ってドコ?」となるので、中学生は混乱する。それを回避するのが主点とか節点とかいう光学系主要点の概念である。

主点(後側主点)は、薄肉レンズがそこにあると考えていい場所である。特に平行光線が軸上のある点に集光する場合、実際のレンズと同じパワーを持つ薄肉レンズを主点位置に置いたと考えれば、そこから焦点距離だけ離れたところに集光することが厳密に示せる。薄肉レンズの「平行光線は焦点を通る」条件を満たすわけである。

ただし実際のところ、一般的には「レンズ中心を通る光線は屈折しない」条件を満たすこの「レンズ中心」は主点に一致しない。主点位置に向かって入射させてもレンズ前後で屈折しちゃう場合がある。

主点は基本的に軸上だけで成立するものだと私は理解している(合ってるかは知らない)。

じゃあ角度が保存される点はどこなの?というと、それが節点である。これも近軸的な議論で位置を求められる。

ただし、物空間側と像空間側の屈折率が同じ場合主点と節点が一致する

今回初めて知った(ついでに厳密に示せた)。レンズ、難しいな。

まとめると、理想像高y _ {ref}f \tan\thetaとおく計算は主点と節点が一致した場合を考えて計算していると解釈していいだろう。この点はちょっと危うくないか?

ともかく、この考え方ではf = const.っぽい雰囲気があるし有効焦点距離で事足りる感じがある。結局ここでは、Zemaxみたいに像位置によって歪曲収差量が変わるとかを気にしてディストーション焦点距離を定義するのではなく、焦点位置の時点でどれだけずれているかを考えているんじゃないか?

いざ計算に挑戦

総じてpythonでコードを組んでいる。

適当にdistortionという配列に上記の計算結果を付け足していこう。像高は、割合を意味するheight (0.01\leq height \leq 1) とセンサー対角線長さd_sの半分をかけて求める。-uは入射角で、負号の意味は気にしなくていい(光学屋さんの流儀に則ってる)。本当は今までの\thetaも負にすべきなんだよな。

distortion.append((height[j] * d_s / 2 - f * math.tan(-u)) / (f * math.tan(-u)) * 100)

これをforで回す。計算量多くなりそうな書き方だけど許して。

光線高と入射角が共に0のときに光線追跡できないポンコツ仕様なので(計算するまでもなく光軸に一致するから手を付けていない)、あとでheightに0を追加する。

そのときの歪曲収差量は...0じゃないか?うーん分からん。

ひとまず動かしてみるか。軸ラベルは面倒だから、まだ書かない(不親切)。

f:id:positiveclimb:20210815113334p:plain
なんか歪曲収差が違うんだが。左から球面収差、非点収差、歪曲収差。

...なんかおかしいぞ。

たしかに数式上は、入射角を0に漸近させるとy _ {chief} \longrightarrow 0かつy _ {ref} \longrightarrow 0だから

 \displaystyle
\lim_{\theta \rightarrow 0} 100\times\dfrac{y _ {chief} - y _ {ref}}{y _ {ref}} = 100\times\dfrac{0-0}{0}

となるんで、なにか極限値があってもおかしくなさそう。安直に歪曲収差量は\theta = 0で0とかしちゃいかんな。

いやでも普通は0でしょ。

別の文献によると

別の文献*3によると、これも節点(nodal point)を用いた計算をしている。

文献では、節点から焦点までの距離f焦点距離p、主光線の角度をuとし、レンズ系の前後でプライムを付けている。

文献中の式(7)によると、


D _ m = \left(p' \tan u' - f \tan u \right) - \left(p \tan u - f \tan u' \right) M

物点を無限遠に飛ばすと


D _ 0 = p' \tan u' - f \tan u

なるほど、入射角uの方向を保ちながら物点を無限大にするんだな。

このD _ mとかD _ 0は今まで議論してきた式の分子に相当する。

p' \tan u'は今までのy _ {chief}に、uは入射角\thetaに相当するから、上式を書き改めると


D _ 0 = y _ {chief} - f \tan \theta

となる。

あれ、これ前のやつと一緒じゃん。

ひょっとして私が何か間違えてるだけで、式そのものは前ので合ってるのか?

問題発見

さっきの極限の話に戻ると、\theta \longrightarrow 0つまりy _ {ref} \longrightarrow 0Dist. \longrightarrow 0を要求するなら、y _ {ref} = hと置いて、

 \displaystyle
\begin{aligned}
\lim _ {h\rightarrow 0} \dfrac{y _ {chief} - h}{h} &= \lim _ {h\rightarrow 0} \dfrac{\frac{\partial}{\partial h} y _ {chief} - 1}{1}\\
&= \lim _ {h\rightarrow 0} \frac{\partial}{\partial h} y _ {chief} - 1 = 0\\
\therefore \qquad \left. \frac{\partial}{\partial h} \left[y _ {chief}\right]\right| _ {h = 0} &= 1
\end{aligned}

使っていいか分からないロピタルの定理を適用して、上の結果が得られる。

最後の式の書き方も厳密には上側極限が正しい感じがあるので合っているか分からないが、こんなもので良いだろう。

つまり、像中央部では理想像高と実際の像高が傾き1の一次の関係で近似できる必要がある。

まずこの関係をそのままグラフにしてみたんだが、もはや近似関係は誤差レベルでほぼ成立しているように見えたので失敗。条件を変えよう。

この条件によれば、縦軸にy _ {ref}、横軸にy _ {chief} - y _ {ref}を置いてプロットしたとき、傾きが±無限大になる必要がありそうだ。やってみると...

f:id:positiveclimb:20210816140506p:plain
さっきと同じレンズ系に対して、右端のグラフの軸を変更した。原点の傾きが有限値である。

うーん、やっぱり傾きが...。原因は何だ

解決

この問題は、たとえ像中心部でも実際の像高が理想像高と定数倍異なる(かつそれと一定の差があることも想定できる)ことによる。さっきのグラフでは原点を通っていたから、ひとまず一定の差がある方は無視していいだろう。

理想像高と実際の像高で比例定数≠1の比例関係にあるような欠陥とは...。

あるいは先のグラフのように、収差と理想像高が像中心部で謎の比例関係を持ってしまう欠陥とは...。

思いついたぞ。

私のプログラムでは、像高を「本当の像高」にしているんだ。

像は収差によってボケるため、最良な像の位置は近軸像点とは異なる。先に示したような非点収差に起因する最小錯乱円、あるいは球面収差に起因する火線などなどを吟味して初めて最良像面が決定される。

私のプログラムでは、そうやって決められた近軸像面とは無関係な像面上の主光線高をy _ {chief}としていたんだ!

y _ {ref}f\tan\thetaのように近軸像点に関係あるfを用いる以上、主光線高は近軸像面基準に直さねばならない

仮にこのような計算間違いをした場合、最良像面と近軸像面間の距離を\deltaとすると、像中央部では近似的にy _ {chief} - y _ {ref} = \delta\tan\thetaが成立する。従って先のグラフは縦軸がy _ {ref} = f\tan\thetaだったから、傾きf / \deltaが生じる!

さらに、\delta \longrightarrow 0だと傾きが無限大(符号は\deltaによる)に発散するから、さっきの予想と合致する!

ああ、なんということだ、ちまちまとブログにまとめ始めたのに、

こんな間違いは私にしか理解できないじゃないか...

結果と結論

修正した。それで、さっきと同様に縦軸にy _ {ref}、横軸にy _ {chief} - y _ {ref}をとるグラフを描いてみた。

f:id:positiveclimb:20210816144100p:plain
修正後の理想像高-収差グラフ(右端)。原点で傾きが発散している。

うん、大丈夫そうなので、最初のように歪曲収差をグラフ化してみよう。縦軸に理想像高、横軸にDist.(単位は[%])をプロットすると...

f:id:positiveclimb:20210816144715p:plain
左から順に球面収差とOSC、MとSの像面湾曲、歪曲収差。完璧だ。

いやぁ、素晴らしい。他のレンズ系でも完璧に描画できるのが確認できた。

つまり、

像面湾曲量Dist. [%]は


Dist. = 100\times\dfrac{y _ {chief} - y _ {ref}}{y _ {ref}} = 100\times \dfrac{y _ {chief} - f\tan\theta}{f\tan\theta}

で計算できるが、y _ {chief}は理想像面上の値で、fは物界・像界での屈折率が等しい場合に限り焦点距離長さを適用できるが、その他の場合は節点から理想像点までの距離を適用する

と結論付けられるだろう。Zemaxのディストーション焦点距離は検証できなかったが、ひとまずこれで定義式上の歪曲収差が計算できた!

めでたしめでたし、である。

*1:https://www.zemax.jp/blogs/news/tech-tips-june-2021

*2:中川治平『レンズ設計工学』

*3:Arthur A. Magill, Variation in Distortion with Magnification, Journal of Research of the National Bureau of Standards, Vol. 54, No. 3, March 1955