かみのメモ

コンピュータビジョン・プログラムな話題中心の勉強メモ

焦点距離の定義と用法をまとめてみた

珍しく光学の話題です。

コンピュータビジョンの分野では、いくつかの文脈で焦点距離(focal length)という単語が登場します。 この単語は元を辿れば全て同じ定義に行き着くのですが、使われる文脈によって前提とする考え方が少し違うので混乱しやすいです。

この記事では、そんな焦点距離という単語の定義と用法についてまとめてみます。

例によって間違い等あればコメントお願いします。

スポンサーリンク

もくじ

1. 単レンズの焦点距離

まずは1枚のレンズだけに注目したときを考えてみます。

学校の理科で習うとおりですが、凸レンズや凹レンズは入ってきた光を収束または発散させる効果を持つ光学素子です。 レンズの光を収束・発散させる強さがどのくらいなのかを考えるときは、レンズに対して平行に入ってきた光に注目します。

f:id:kamino-dev:20181213104240p:plain:w400
凸レンズの焦点
f:id:kamino-dev:20181213104322p:plain:w400
凹レンズの焦点

上の図のように真ん中にレンズを設置し、図の左側から右側に向けて平行光を照射したときのことを考えます。 凸レンズの場合、レンズに対して左から平行に入ってきた光は、右側のある一点に収束します。 一方、凹レンズの場合、レンズに対して左から平行に入ってきた光は、あたかも左側のある一点から放射されたかのように発散していきます。 これらの点をレンズの焦点と呼びます。

そして、レンズの中心から焦点までの距離 {f _ {cv}, \ f _ {cc}}焦点距離と呼びます。 当然、単位はメートルなどの距離の単位となります。 焦点はレンズの左右両方に存在し、どちらの焦点距離も等しくなります。

ここまでが、最も基本的な焦点距離の定義です。

ちなみに光学の分野では、凸レンズの焦点距離を正の値、凹レンズの焦点距離を負の値として定義します。 こうすると、レンズの公式を考えるときに凸レンズと凹レンズの区別をつける必要がなくなり都合がよいのです。

補足(読み飛ばしOK)

高校理科では、よく上のようなレンズの図を描かされますが、この図では暗黙的に多くの近似がなされています。

1つ目は「幾何光学の範囲で考えた場合」という前提条件を置いていることです。 本来の光は電磁波の一種であるため、厳密には回折・干渉・偏光・分光などの波としての振る舞いを見せます。 特にレンズの場合、光の波長つまり色ごとの屈折率の違いにより、焦点距離が若干変化してしまいます。 このことはレンズの色収差として知られています。 このように光を波動と見てその振る舞いを分析する分野は波動光学(wave optics)と呼ばれます。 一方、光の波としての性質は無視し、光の進み方を単なる矢印として記述する分野は幾何光学(geometrical optics)と呼ばれます。 上の例は、あくまで幾何光学に則った考え方であるというわけです。

2つ目の近似は、幾何光学の分野で近軸近似と呼ばれるものです。 レンズの曲面は球面の一部を切り取ったような形をしているのですが、入射光と屈折光の関係を厳密に記述すると、レンズの中央から離れた場所を通った光ほど焦点距離が短くなることがわかります。 つまり「平行に入ってきた光は一点に収束する」というのはそもそも厳密には間違っているわけです。 これはレンズの球面収差と呼ばれる現象です。 球面収差を含め、レンズには5つのザイデル収差というものが存在します。 しかし、ザイデル収差を考慮しながら光学系を考えるのはなかなか面倒です。 そこで「レンズの中央付近を通る入射角が浅い光だけに注目する」という前提条件を置き、焦点距離は一定であるものと見なすことがよくあり、この考え方を近軸近似と呼んでいます。 近軸近似によって光学系を分析する分野はガウス光学と呼ばれています。 つまり上の例では「幾何光学の中のガウス光学という分野で考えれば」という前提条件が置かれているわけです。

3つ目の近似は、薄レンズ近似と呼ばれるものです。 先ほど焦点距離は「収束・発散の基点からレンズの中心までの距離」と書きましたが、そもそもレンズの中心はどこなのかという問題に絡んできます。 実はこの「レンズの中心」というのは誤魔化した表現で、厳密には「最終的な入射光と屈折光を延長したときに交差する場所」です。 このような点は、レンズの主点と呼ばれます。 レンズの主点は、左側の焦点を考えるときと右側の焦点を考えるときそれぞれに定義できるのですが、レンズが厚みを持っているとこの2つの点は一致しなくなります。 また、この他にもレンズに厚みがあるといくつかの点で問題が複雑になります。 しかし、扱うのが非常に薄いレンズであると仮定した場合、こうした問題を無視した上で「焦点距離はレンズの中心から焦点までの距離である」と言うことができます。

最後に、「レンズの左右の焦点距離は等しい」と書きましたが、これも「レンズの左右に充填された媒質の屈折率が等しい」という前提条件の上で成り立ちます。

以上、余談でした。

2. カメラレンズの焦点距離

次に、カメラレンズの焦点距離について考えてみます。

単レンズに注目したときの焦点距離は、レンズが光を収束・発散させる強さの指標というニュアンスの言葉でした。 一方、カメラ界隈では、焦点距離カメラの画角・ズーム倍率を表す指標というニュアンスで用いられます。

例えば、ズームレンズを焦点距離35mmと50mmに設定して撮影すると、以下のように違いが現れます。

f:id:kamino-dev:20181213104745j:plainf:id:kamino-dev:20181213104814j:plain
焦点距離35mm/50mmで撮影した画像

では、この場合の焦点距離とは具体的に何の値なのでしょうか? その答えは無限遠にピントを合わせたときのレンズ系の焦点距離です。 これだけでは何のことかわからないので、順番に説明していきます。

ズームレンズの構造

まず前提として、一眼レフカメラなどに搭載されるズームレンズには、作動距離(カメラからピントの合っている場所までの距離)を調節するためのツマミと、画角・ズーム倍率(カメラ界隈で言うところの「焦点距離」)を変化させるツマミがあります。 これらを操作することで、ピントや画角を変化させながら写真を撮ることができます。

この機能をどのように実現しているかという話ですが、ズームレンズの中には複数枚のレンズが格納されており、これらのレンズを前後に動かしてレンズ間の距離を変化させることで、作動距離やズーム率が変化するように設計されています。 (Wikipediaのズーム機構のgifが分かりやすいです。実際はもう少し複雑な系を使いますが…:https://ja.wikipedia.org/wiki/%E5%86%99%E7%9C%9F%E3%83%AC%E3%83%B3%E3%82%BA#/media/File:Zoom_prinzip.gif

単レンズへの近似

複数枚のレンズで構成されたレンズ系は、ガウス光学的には1枚の仮想レンズに見立てることができます。 つまり、カメラの光学系は次の図のように簡略化することができます。 ちなみに、本来ならばレンズの厚みを考慮しなければならないのですが、話を簡単にするために厚みのないレンズに近似しています。

f:id:kamino-dev:20181213105049p:plain:w400
カメラの模式図

ズームレンズ内の複数枚のレンズの位置関係を変化させると、この仮想レンズの位置や焦点距離が変化します。

では、ピントのツマミとズームのツマミを操作するとこの図に何が起こるのかを考えてみます。

ピント調節機構

「ピントが合っている」とは、被写体から出た光がレンズを通ったあとに撮像素子上でもう一度収束する(結像する)状態を指します。 逆にピントが合っていないときは、被写体から出た光が撮像素子上にまばらに散らばるため、ボケた画像になります。

ズームレンズのピントのツマミは、仮想レンズの位置を変化させずに仮想レンズの焦点距離だけが変化するように設計されています。 こうすることで、画角はそのままに作動距離(ピントが合っている場所までの距離)を変化させて、近くのものにピントを合わせたり、遠くのものにピントを合わせたりすることができます。

f:id:kamino-dev:20181213105141p:plain:w400
ピント調節

ズーム調節機構

一方、ズームのツマミは、仮想レンズの作動距離が変化しないようにしつつレンズと撮像素子の距離を変化させます。 つまり、被写体にピントを合わせたまま画角だけが変わるよう、焦点距離およびレンズ-撮像素子間の距離が連動して伸縮する設計になっています。

f:id:kamino-dev:20181213105233p:plain:w400
ズーム調節

上の図から、レンズ-撮像素子間の距離 {f'} が変化することで画角 {\theta} が変化していることが読み取れます。 {f'}無限遠より手前にある点からの光が収束する場所までの距離なので焦点距離ではないことに注意してください。 手前にピントを合わせた状態では、仮想レンズの焦点距離{f'} より短くなっています。

さて、ここで注目したいのは、無限遠にピントを合わせたとき、つまり被写体からの光がレンズに対して平行に入り、それが撮像素子上に収束する場合です。

f:id:kamino-dev:20181213105555p:plain:w400
無限遠にピントを合わせた様子

前の節の説明を思い出してほしいのですが、このときのレンズ-撮像素子間の距離は、レンズの焦点距離の定義そのものです。 つまり、無限遠にピントを合わせた状態という条件の下では、レンズ-撮像素子間の距離はレンズの焦点距離と等しくなります。 そして、無限遠にピントを合わせているとき、レンズ系の焦点距離が長くなるほど画角は小さくなる(=ズーム倍率が上がる)という関係があるのです。

こうした事情から、無限遠にピントを合わせたときのレンズ系全体の)焦点距離(=レンズ系の後側主点から撮像素子までの距離)がズーム性能を表す指標として採用されています。 もう少し良い言葉選びはなかったのかという感じですが、そういうお約束らしいです。

3. ピンホールカメラ焦点距離

次に、ピンホールカメラ焦点距離について考えてみます。 ピンホールカメラは、レンズの代わりにごく小さい穴を空け、そこを通過してきた光を撮像素子で計測するという、初歩的なカメラモデルのひとつです。

f:id:kamino-dev:20181213105659p:plain:w400
ピンホールカメラの模式図

では、ピンホールカメラ焦点距離とはどこを指すのでしょう?

ピンホールカメラはその原理上、どのような奥行きにでもピントが合います(正確には、どのような奥行きにある物体もボケずに撮影できます)。 つまり、無限遠にも常にピントが合っていると言えます。

前の節で説明したようにカメラの焦点距離は焦点を無限遠に合わせたときのレンズから撮像素子までの距離を指す言葉でした。 ということで、ピンホールカメラでは穴から撮像素子までの距離のことを焦点距離と呼びます。

なんだか回りくどいですし、どこにでもピントが合うのに焦点距離が決まっているというのも変な感じがしますが、こういうお約束になっています。

4. カメラの内部パラメータとしての焦点距離

最後に、コンピュータビジョンの分野で使われるカメラモデルにおける焦点距離を紹介します。

コンピュータビジョンの分野では、画像を分析することで写っている物体の大きさや位置を計算するという作業がよく行われます。 この計算をするためには、カメラから見てどの方向にあるものが画像上にどう映り込むのかを知っておく必要があります。

ここでよく用いられるのが、先ほどのピンホールカメラモデルです。 ピンホールカメラの穴を原点にした座標系を考えると、座標 {(X,Y,Z)} にあるものがカメラ画像上の点 {(u, v)} に映り込む、という関係は以下の式で記述できます。

 w \begin{bmatrix}u \\ v \\ 1\end{bmatrix} = \begin{bmatrix}f _ x & 0 & c _ x \\ 0 & f _ y & c _ y \\ 0 & 0 & 1\end{bmatrix}\begin{bmatrix}X \\ Y \\ Z\end{bmatrix}

※ 追記:より詳細なカメラモデルの解説をこちらの記事に書いたので興味があれば読んでみてください→OpenCV calibrateCamera関数のプロになる - かみのメモ

上の式において、パラメータ {f_x, \ f_y}焦点距離と呼びます。 これらはカメラの画角を表すパラメータであり、単位はピクセルです。

というのも、前の節の図を見ての通り、画角は撮像素子のサイズとレンズ-撮像素子間の距離を使って描かれる三角形の頂点の角度に相当します。 つまり、本質的にはこの2つの比率がわかれば画角が計算できるわけです。

ピンホールカメラモデルを考えるとき、撮像素子のサイズは未知ですが画像の縦幅・横幅が何ピクセルであるかはわかります。 そこで、画角から計算される焦点距離を画像平面のサイズとの対比でピクセル換算で表現したときのパラメータが {f_x, \ f_y} であるというわけです。


以上、焦点距離の定義と用法をまとめてみました。

参考文献