煽りレンズの歪曲 - その2 [考え中の問題]
前回、レンズの式から同次座標を使ってScheimpflugの条件を導いた。Scheimpflugの条件とは平面の物体面と平面の像面を延長した面が交わる直線を、レンズの主平面(の延長)が含むようにレンズの姿勢を調整すれば結像関係を満たす、というものでる。つまりScheimpflugの条件を満たすとレンズから距離が違っていても平面上にあればフォーカスずれはおこらないようにできる。
今日はほんのちょっと簡単化して、歪曲収差を計算する。これで僕の目標は達成されたことになる。
今日はほんのちょっと簡単化して、歪曲収差を計算する。これで僕の目標は達成されたことになる。
煽りレンズの歪曲 [考え中の問題]
Photonics West用に準備しているデモ光学系に使うカメラのドライバをしこしこ書いてるけど、その前に片付けないといけない問題が発生した。さくっと計算してさくっと終わらせる。
問題とはなにかというと、デモ光学系で物体面と像面が平行でない結像にする必要が出た。いわゆるレンズを「煽る(あおる)」ということをする。これをすれば奥行きのある平面をデフォーカスなしに結像することができる。もちろん実際にどのくらいの解像度が確保できるかはレンズの性能とFナンバに依存する。
物体面と像面が平行でない結像はScheimpflugの条件と言って、物体面と像面とレンズの間にわかりやすい簡単な関係があることがわかっている(ちなみにWikipediaでは日本語も英語も「シャインプルーフの原理 Scheimpflug Principle」となっているが、「相対性原理」や「光速度不変の原理」なんかとはまったく議論のレベルが違って、こんなものは原理でもなんでもないので僕はこう呼んでいるし、こう呼ばれるのが正しいと僕自身は思っているのでこう書くことにする。まあ、でもそれは今はどうでもいい)。
今回、僕が問題にするアプリケーションはいわゆるマシンビジョンというか、カメラを使った形状計測で、解像度を確保すると同時に歪曲収差(Distortion)を補正する必要がある。レンズを煽ろうとどうしようと当然、遠くにあるものは小さな像になるのでそれも歪曲収差と同じものとして補正する必要があるけど、煽ったらどんな歪曲になるのかよくわからなかった。
日本語WikipediaにはScheimpflugの条件がなんで成り立つのかは書いてないし、英語のWikipediaは初等的な計算方法を使っていて歪曲を計算する役には立たない。
また、若い光学屋がやるような、一般論が展開できる場面にもかかわらず、光線追跡ソフトを使って「この場合、こうなります」みたいな結論は僕はほんとうに大嫌いなので、自分で計算することにした。
ということで、簡単な一般論を射影変換の道具を使って計算してみる。
問題とはなにかというと、デモ光学系で物体面と像面が平行でない結像にする必要が出た。いわゆるレンズを「煽る(あおる)」ということをする。これをすれば奥行きのある平面をデフォーカスなしに結像することができる。もちろん実際にどのくらいの解像度が確保できるかはレンズの性能とFナンバに依存する。
物体面と像面が平行でない結像はScheimpflugの条件と言って、物体面と像面とレンズの間にわかりやすい簡単な関係があることがわかっている(ちなみにWikipediaでは日本語も英語も「シャインプルーフの原理 Scheimpflug Principle」となっているが、「相対性原理」や「光速度不変の原理」なんかとはまったく議論のレベルが違って、こんなものは原理でもなんでもないので僕はこう呼んでいるし、こう呼ばれるのが正しいと僕自身は思っているのでこう書くことにする。まあ、でもそれは今はどうでもいい)。
今回、僕が問題にするアプリケーションはいわゆるマシンビジョンというか、カメラを使った形状計測で、解像度を確保すると同時に歪曲収差(Distortion)を補正する必要がある。レンズを煽ろうとどうしようと当然、遠くにあるものは小さな像になるのでそれも歪曲収差と同じものとして補正する必要があるけど、煽ったらどんな歪曲になるのかよくわからなかった。
日本語WikipediaにはScheimpflugの条件がなんで成り立つのかは書いてないし、英語のWikipediaは初等的な計算方法を使っていて歪曲を計算する役には立たない。
また、若い光学屋がやるような、一般論が展開できる場面にもかかわらず、光線追跡ソフトを使って「この場合、こうなります」みたいな結論は僕はほんとうに大嫌いなので、自分で計算することにした。
ということで、簡単な一般論を射影変換の道具を使って計算してみる。
楽譜アーカイブアプリ - その28 PDFへの変換 [考え中の問題]
しばらく進めなかったら案の定、何をやってたのかすっかり忘れた。
とりあえず一段落していたので、まだ良かった。切りのいいところでのページフォールトはスタックがあまり高くならずに済むという典型的な例。
なんのこっちゃ。さて、Mac OS XでマルチページのPDFをどうやれば簡単に作れるか、という問題について考える。
とりあえず一段落していたので、まだ良かった。切りのいいところでのページフォールトはスタックがあまり高くならずに済むという典型的な例。
なんのこっちゃ。さて、Mac OS XでマルチページのPDFをどうやれば簡単に作れるか、という問題について考える。
CFRunLoopSourceの使い方その9 [考え中の問題]
前回作ったCFRunLoopSourceのCラッパを実際に動かしてみる。Core Foundation ToolのXCodeプロジェクトを作って、さっきのrunLoopKickerのコードを読み込む。
CFRunLoopSourceの使い方その7 [考え中の問題]
昨日はCFRunLoopSourceの作り方を見た。まあ、Core Foundationのオブジェクトを作るやり方と基本的には同じ。ただひとつ、performコールバックをちゃんと設定する、ということが重要。
今日はその使い方について。
今日はその使い方について。
CFRunLoopSourceの使い方その6 [考え中の問題]
機能はスレッド制御のためのメカニズムのうちMacOS X独自の追加であるCFRunLoopとCFRunLoopSourceというのがある、ということだけを見た。今日はCFRunLoopSourceの生成とCFRunLoopへの組み込みをおさらいする。