いろいろな設定とか

実験のパラメータはすべてsettings.hに記入

各変数、パラメータについて
cam : どのカメラを使うか
    LEFT_CAM 左のカメラ
    CENTER_CAM **のカメラ
    RIGHT_CAM 右のカメラ

f : 
焦点距離.

zoom, zoomView : 
ズーム(1倍~10倍).全てのカメラで同じ
画角(40°)から計算

fov:
画角.zoomより計算される

baseLine:
基線長の長さ.
zoom, winWidth, MAX_DISPARITYに依存

winWidth, winHeight : 
ウィンドウの大きさ

eye:
カメラの視点.基線長に依存
**のカメラは原点にあり,
左のカメラは 基線長/2 だけ左に
右のカメラは 基線長/2 だけ右に
それぞれ平行移動した所のある

FocalDepth:
カメラの焦点のあっている奥行き.
それぞれのカメラによって異なる

aperturePattern:
開口形状

apertureSize:
開口径.全てのカメラで同じ
MAX_PSF_RADIUS, zMin, zMax, winWidth, zoomに依存する

DTPParam:
Disparity To Psfsize Parameter
視差とPSFサイズを変換するパラメータ
左右のカメラで異なる
PSFSize = disparity * DTPParam[0] + DTPParam[1]




使った式

視差(d)とカメラの移動距離(s)の計算
d = W*s / ( 2 * z * tan ( fov / 2)
W : ウィンドウ幅
z : 物体までの奥行き
fov : 視野角(x軸方向)


開口径(D)の計算式
B = D ( 1 - z/ z' ) R
B : 許容錯乱円径(カメラ座標系)
z : 合焦位置までの距離
z': ぼけBまでの距離
R : 倍率 ( f / z )

カメラ座標系からウィンドウ座標系への変換
2f * tan( fov / 2) : B = WinWidth : Max PSF Size
より
B = MPS* 2f tan(fov/2) / WinWidth
よって
D = 2 * R * z * z' * tan(fov/2) / w ( z' -z )

無限遠でぼけが最大になるという仮定をおくと
z' : 無限遠 = z : D
となる


画面上での距離(z)と視差(d)の変換
ウィンドウ幅 : W
基線長 : b
視野角 : fov
とすると

d = ( W*b )/ (2*z*tan(fov/2) )


ぼけ径と奥行きの関係
GL上でのぼけ径をB
奥行きをzとする
開口径:D
ピント位置:aとすると

B = D * f *( 1/b - 1/z )

でGL座標系におけるぼけ径が求まる.
これを画面上でのPSFサイズ(p)に変換すると
p = W*D/(2* tan(fov)/2 ) * ( 1/a - 1/z )
となる


ぼけ径と視差の関係
画面上での視差(d)は
d = W*b / (2 * z * tan(fov/2) )
となる (b : 基線長)
また画面上でのPSFサイズ(p)は
p = W*D/(2*tan(fov/2)) * ( 1/a - 1/z)
となる (D:開口径, a:ピントの奥行き)

この二つを合わせると
p = (D/b) * d - ( W*D/2*tan(fov/2) ) / a
で変換できる(視差とPSFサイズは線形関係)

zoomとtmfの使い方
よく出てくる tan(fov/2)は
fov = 2.0 * atan(tmf/zoom)
に代入すると
tan(fov/2) = tmf/zoom
とできる