实时鱼眼校正

鱼眼校正在opencv里面有,比较复杂,主要思想是用棋盘图片首先对鱼眼校正,保存相关参数到xml中

后续校正的时候,直接用xml中保存的参数,不需要计算,过程较复杂,在速度上如果用opencl或cuda实现也满足需要;

本文介绍另外的一个方法,主要参考文献有:

http://paulbourke.net/dome/fish2/

http://paulbourke.net/dome/dualfish2sphere/


http://paulbourke.net/dome/warpplayer/


才用该方法,速度没得说,如果后面需要全景拼接,也是可以在opengl中实现的;因为两张图片的临界位置可以通过公式算出来,实现在opengl的片元着色器即可;

主要思路如下:

步骤如下:

一 opengl中创建纹理对象,纹理对象加载鱼眼图片作为纹理;

二 编写定点着色器和fragment着色器代码;

三 加载,编译,连接,Attach上面写好的代码;

四 在窗口渲染函数中,采用平行投影方式,使用上面鱼眼纹理,绘制鱼眼图片大小的矩形;

五 输出图像,显示的图形即为矫正后的图片;

六 如果不想再屏幕上显示或只在内存中处理,可以用opengl的FBO,Frame Buffer Object, 这个东西就是可以把渲染得内容向FBO中渲染,然后可读取到内存中,后续你

想干什么干什么;

 

说明:opengl在显示图片的时候,每个像素点都会利用GPU调用fragment着色器代码来计算颜色,所以鱼眼矫正的算法公式会放到fragment着色器代码中实现;由于有成千上万个GPU计算单元,所有像素的计算都是并行的,所以速度很快;


我最厚道的地方在于,虽然上面说的简略,但是我会把demo放到下边;

打字很麻烦,一段代码胜过千言万语;


下载demo

http://download.csdn.net/detail/sohu_2011/9715685


下面是结果:

第一张:是标准图

第二张:把标准图校正为左侧图

第二张:把标准图校正为右侧图


demo的代码中有说明;

如果拼接的话,把第二张和第三张图拼接;


实时鱼眼校正_第1张图片

实时鱼眼校正_第2张图片

实时鱼眼校正_第3张图片

你可能感兴趣的:(计算机视觉)