注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

dp: 生活的脚步,进步的点滴...

Cam、DSP、FPGA、PM、Life、More ...

 
 
 

日志

 
 

相机标定中的透镜畸变和视角变换  

2015-09-17 10:22:17|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一般的针孔相机模型如下:

三维坐标点经过透视投影变换,转换到一个图像平面坐标点。


而相机透镜还存在一定的畸变,包括横向畸变和切向畸变。

 

因此,针孔相机模型又被扩展为以下模型:


首先,世界坐标被转换为相机坐标,由X,Y,Z到x,y,z;

然后,归一化,z=1处,x,y的投影坐标x`,y`;

接下来,对投影坐标,进行畸变处理;

最后,由相机坐标转换到图像坐标。

 

在使用广角镜头或鱼眼相机时,原始图像存在畸变比较严重。

在图像识别的很多应用场景中,消除图像的畸变是图像预处理的首要问题。

通过相机标定,很容易拿到相机的内部参数,包括焦距、光心和畸变系数。


以上过程,就是透镜畸变前后图像坐标变换的公式。具体步骤如下:

1. 由图像坐标系反变换到相机坐标系中

2.  然后,校正反变换R-1,一般无校正变换的相机,默认为单位矩阵

3. 归一化,并进行相机透镜畸变处理

4. 由相机坐标转换到图像坐标。

由此,得到由针孔模型到透镜畸变畸变模型相互变换的对应关系u <--> mapx, v <--> mapy

initUndistortRectifyMap函数就是完成了以上工作。

 opencv中,remap与undistortion都是消除畸变的函数,undistortion在设置了一些参数后调用了remap函数,二者的算法实质是一样的。由目标图像的坐标,找到对应的原始图像坐标,然后将其值复制到目标图像。大致思路是如此,由于图像大小和变换,需要插值或近似的方法,如最邻近法、线性插值等

 

图像视角变换

如图像由前向视角frontview转换为俯视角birdview。

一般来讲,相机向下倾斜时,相机前向视角frontview的视角范围比较大,而俯视birdview需要的视角比较小(涉及地面的视角部分)。

 

针孔模型下,在前向视角图像中,截取涉及地面的部分,并通过透视变换,转换为俯视视角。地面的一个矩形区域,在前向视图中会大致是一个三角形或梯形的形状,而在俯视图中,仍是一个矩形图像,且能保留线性、平行性特征。

 

如下,一个前向广角视图,转换为俯视图。

前向视图:


俯视图:

 

转换方法:

首先,通过标定获取相机的外部参数,世界坐标系中相机的位置Position和倾角(相对于x,y,z坐标轴的角度),即M=R|t。并假定地面的z坐标为z=0.

然后,获取俯视图内的三维地面坐标。z=0,地面区域的实际大小与俯视图的大小成一定比例,即俯视图中一个像素的位置(u`,v`),在地面坐标上,也有对应的位置(x`, y`, 0) = (u`*spaceSolution, v`*spaceSolution, 0).spaceSolution是空间像素的大小,如一个像素的高和宽是0.05米。

然后,由上面第二块公式,通过位置变换,畸变计算,和相机参数变换,三个步骤,将每个地面位置坐标(x`,y`, 0)转换为前向视图中的坐标(u, v)。

此时,前向畸变视图像与俯视图像有一个对应关系(u,v) <--> (u`,v`)。

 

通过对应关系,每个俯视图的像素都在前向畸变视图像中有对应的位置,两者的像素值相等(使用最邻近法或线性插值等)。俯视图前方的部分边缘模糊比较严重,这是在原图中采样范围小的原因。

  评论这张
 
阅读(191)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016