双镜头相机视差区域模型

模型说明

双镜头相机视差只产生在镜头连线方向上,所以做一个简化,在某一个平面上视差情况如图,因为遮挡物存在,镜头A和镜头B在背景面有视差区域。

![](http://ww3.sinaimg.cn/mw690/db2e1667gw1f5l3wkdkw5j209v07smya.jpg)
参数说明
\(2a\):两个镜头间距
\(b\):遮挡物边缘相对于镜头中心基线的横向偏移距离
\(l_1\):背景到相机的距离
\(l_2\):遮挡物距离相机的纵向距离
\(\alpha\):视差区域相对于镜头的视角
因为一般手机相机镜头视场角恒定。可以认为有以下关系:$\frac{视差角}{视场角}=\frac{视差区域像素数量}{总横向像素数量}$。所以计算出视差角就可以根据相机镜头的参数算出视差区域像素数目。

建模结果

在上图中建立直角坐标系,可以计算出\(\alpha\)\(l_1,l_2,a,b\)之间的数量关系。
计算结果:$$cos\alpha=\frac{\left[ l_2/l1\cdot (b-a)+2a\right]\cdot \left[ l_2/l1\cdot (b+a)\right]+l_2^2}{\sqrt{\left[ l_2/l1\cdot(b-a)+2a\right]2+l_22}\cdot \sqrt{\left[ l_2/l1\cdot(b+a)\right]2+l_22}}$$

华为P9的双镜头之间基准距离为10mm,所以测试中取\(a=0.005\)

\(视差像素数目=\alpha/\omega\cdot N_{pixel}\) 其中\(\alpha\)视差角,\(\omega\)相机横向视场角,\(N_{pixel}\)相机横向像素总数

仿真

取不同位置的遮挡物和不同位置的背景进行仿真计算。结果如图

![](http://ww3.sinaimg.cn/mw690/db2e1667gw1f5l4d5ua1ij20fk0bogm9.jpg)
上图每一条曲线代表遮挡物从中心往旁边移动时所产生的视差像素数量。 横轴:即上述公式中的$b$,一个单位代表$\frac{1}{20}\cdot\frac{l_1}{2}$ 纵轴:在背景面上产生的视差像素值。 **说明:** - 红线表示近景拍摄,遮挡物(比如杯子)距离镜头0.5m,背景距离镜头0.75m(比如桌子),杯子从视场中心往边缘移动20cm,视差像素的数目从18变16。 - 最下面的蓝线表示远景拍摄,遮挡物和背景距离相对较近,比如距离300m的建筑物和前面的一颗树。所产生的视差像素为0,表示基本没有视差。

实拍对比

看不清楚可以去原图网址[http://www.expertreviews.co.uk/mobile-phones/1404578/huawei-p9-review-the-ultimate-dual-lens-camera]看高清大图

上图是华为P9实拍图,左中右分别是:HDR拍照模式,auto彩色拍照模式,黑白拍照模式(只用黑白镜头)。
在图片最下面白墙边缘由于镜头视差的缘故,彩色图有可以看到马路。按照途中估算,背景区域为马路距离镜头约25m,遮挡物(天台白墙)横向偏移0.5m,纵向距离0.75m,带入上述模型中\(b=0.5m,l_1=0.75m,l_2=25m\),计算出视察区域约为25个像素。与图中实际产生的像素偏差基本一致,模型正确。

Matlab计算函数

function result=CalArea(a,b,w,l1,l2)
%a  表示双镜头之间的距离
%b  表示遮挡物相对双镜头相机横向偏移量
%l1 表示遮挡物相对于镜头的纵向距离
%l2 表示背景相对于镜头的距离
%alpha 即视差部分的角度
%w代表横向视场角,角度制
%双镜头相机间隔为10mm,这里a为一半
%华为P9分辨率为2976x3968
%a=0.005;
%w=60;
x1=l2/l1*(b-a)+2*a;
x2=l2/l1*(b+a);
alpha=(x1*x2+l2*l2)/(sqrt(x1^2+l2^2)*sqrt(x2^2+l2^2));
result=acosd(alpha)/w*2976;
posted @ 2016-07-07 10:49  双zju  阅读(1494)  评论(0)    收藏  举报