2013年11月10日日曜日

OpenCVでマウス操作

OpenCVでマウス操作をする場合、
setMouseCallbackを呼ぶ必要があるけど、どうも開いた画像が大きすぎるとクリックした位置が正しくとれないようだ。みなさんご注意ください。
http://stackoverflow.com/questions/15906208/position-mouse-wrong-in-opencv


周辺減光とcos4乗則

結婚式の準備とかで昔の写真を整理すると、現在のカメラの画質がすごく良くなっていることに驚く。今の写真はものすごくくっきりしていて解像感がある。
しかし、昔の写真の中には味が出ていていいものもある。写真にある程度のノイズ感は必要なのかもしれない。どのようなノイズを加えれば味があるかというのも1つの課題かもしれない。

さて、そんな写真の味のひとつに「周辺減光」なるものがある。下の写真のように四隅が暗くなっているやつだ。これは画角のある光学系では避けることができないが、現在ではデジタル処理でうまく補正されてしまって真の周辺減光を見る機会はあんまりない。

周辺減光の起こる理由は大きく2つある。
  1. 斜めから光が来ることによる減光(いわゆるcos4乗則)
  2. 光束径が画像の中心と周辺で違うことによる減光(口径食)

1は高校物理で習ったことで説明がつく。下の図のような一様な光を出す平面を撮影したと考える。大体以下の3つで説明がつく。

  • 光源から斜めに出て行く光は垂直に出て行く光よりもcosθだけエネルギーが小さくなる。
  • その光が絞りに入って行くわけだが、斜めから見ると絞りの面積も変わって見える。つまり絞りに入射する光がcosθ倍小さくなる。
  • 斜め入射では光源から絞りまでの距離1/cosθになる。絞りに入る光量は距離2乗に反比例するのでcosθの2乗倍になる。
以上の3つでcosθの4乗となるわけである。ただし、いつも4乗なわけではない。中央と周辺で結像倍率が違ったりする場合はこの限りでない。広角レンズなんかではそれぞれ光路がだいぶ違うのでそういうこともよく起きている。

2の口径食は、ボケ画像でよく現れる。ぼかした画像に絞りの形状が映るけど、中央は丸でも周辺に行くほどいびつになっていくことが開放で撮影している時にはある。これは収差補正や、センサーやマウントの制約のために周辺の光線を切るためにおきる。


では、デジタルで補正されるので、周辺光量はケチってもいいのだろうか。そこはシステムとの兼ね合いである。周辺光量を少なくすることでレンズが小さく、収差も目立たなくなることは十分に考えられる。(設計者としては周辺の光量をケチってMTFを高く見せたくする人もいるだろう…)しかし、光量が少なくなるのでダイナミックレンジは小さくなってしまうというトレードオフは発生してしまう(あまりあって欲しくないけど、デジタル補正がうまくいっているかという問題もある)。この辺は光学設計者のみならずシステムとしての思想が反映されるだろう。

2013年11月6日水曜日

Macbook airでOpenCV

MacBook AirについているカメラをOpenCV(2.4.6.1)から使おうとしたけど、どうも使えない(Pythonからは使えてC++からは使えない…)。結構同じような人も多いようだ。

OpenCV2.4.6.0ではうまいく行かないらしい。fixされたって書いてあるけど…
http://answers.opencv.org/question/16326/webcam-wont-open-since-246/

今回Pythonでうまく行った例
http://stackoverflow.com/questions/19059459/opencv-wont-capture-from-macbook-pro-isight

ということでOpenCVを2.4.5へ変更した。変更の仕方は
http://kronus9.sblo.jp/article/71268425.html
を参考にした。

2013年11月3日日曜日

Sublime Text 2 でOpenCVのBuildをする

OpenCVをhomebrewを使ってインストールして、それをSublimeText2で勉強したい。Xcodeをつかったことがまだないので。
Buildしようとしたけど、"Undefined symbols for architecture x86_64:"というエラーが出てしまう。多分、リンクがうまく行っていないようだ。PythonばかりつかっているとCのこの辺に疎くなってしまう。

SublimeTextでBiuld環境を作った人がいたので、まねしてみた。

バージョン名を変えたけど、pkg-configがないと言われたので、
/usr/local/Cellar/pkg-config/0.28/bin
に書き換えたらうまくいった。

めでたしめでたし。