ZEMAX是广为使用的一款光学仿真软件,是进行光路设计和分析的利器;而相机标定,则是进行机器视觉任务时,拿到一款相机,对其实际参数进行确定的过程。

因此看起来,二者其实主要是针对不同的侧重点。前者主要面向相机开发,后者面向相机使用。

但是最近遇到了一个问题,不得不使用ZEMAX进行一些相机标定算法方面的验证。这期间遇到了一些问题,这里记录下来希望可以与大家分享,如有不对之处进请指正。

事情的经过是这样的:现在手头有一台特殊光路的相机,由于相机是课题组自己设计搭建,因此也有相应的ZEMAX工程文件。在理想情况下该相机与普通相机的成像模型完全一致,因此理论上可以使用张正义相机标定法进行标定。

然而,相机光路中包含一些特殊结构的光学元件,这些元件的安装与制造误差势必会为成像系统引入畸变,因此有必要为这些畸变和误差建立对应的数学模型,就类似于普通相机中的径向畸变与切向畸变模型,从而对其进行矫正。所以问题来了,怎么验证模型的可靠性呢?

仿真!

我的想法是这样的。在ZEMAX中对一些光学元件的角度进行一些微调,以此来模拟实际情况中的安装误差;接着在ZEMAX中模仿张正义标定法,在物方视场中设置类似棋盘格的视场:

令成像系统在不同的位置与角度对物面成像,记录对应的像点。如此则得到了多组物点-像点的对应关系,接着使用张正义标定法再加上自己建立的误差模型对其进行标定,以此来验证自己的误差模型是否准确可靠。

OK,但是实际操作中,比较麻烦的地方就是“令成像系统在不同的位置与角度对物面成像”。下面就进入正题,说说我是怎么达到这个目的的。

一.旋转光学系统

当光路与视场都设定好之后,此时的3D视图是这样的:

(吐槽一下,ZEMAX2017以后虽然最多可以设置超过2000个视场,但是只显示12个,如果视场中有48个视场点,需要重复设置4次才能完成所有成像)

进行相机标定的时候,我们需要在不同角度进行拍摄,因此首先想到的办法是旋转光学系统。

所以首先在物面之后添加坐标间断,设置旋转参数

然后就成了这个样子:

光线进入了成像系统,但是却没有穿过后续的元件。

这里有一个办法或许能解决这个问题:

打开系统选项中的光线瞄准,这时:

可以看到光线已经按照光轴进行了偏折,接着调整坐标间断中的偏心参数,令所有光线进入即可。

如果能顺利进行到这里的话,就已经大功告成了。但是我实际中遇到的问题是,当光路结构比较复杂的时候,在开启光线瞄准的情况下,输入倾斜角度经常会提示:

而且由于光线瞄准是软件进行迭代求解,如果一次输入大角度,同样也会提示上述错误。比如直接输入30°就会报错,但是连续输入10°、20°、30°可能就没有问题。

在我的光学结构中,即使输入很小的倾斜角度就会报错,因此上述方法无法使用

二.旋转物面

山不走来,那就走向山;既然旋转光学系统不行,那旋转物面呢?

ZEMAX中,物面可以设置为倾斜面,可以输入正切值改变物面的角度。

比如输入Y正切为2:

看起来好像不错的样子,但问题是,物面中各个视场之间的关系已经与之前不再相同了,之前我们设置视场的时候,是为每一个视场设定了一个平面坐标,但是旋转之后,虽然各个视场点仍在一个平面上,但是彼此之间的距离已经与之前不同了。

此时每个物面中的点,都成为一个三维点,x、y坐标是我们提前设置的,Z坐标为:

如果用这种方法进行相机标定,就类似于实际进行相机标定时,不同角度下拍摄不同的标定板。

但是仔细想想,张正义标定法中其实并没有限定标定板必须统一啊,拍一张换一个标定板也可以啊,只要确定标定板的尺寸和对应的像点就可以喽

于是接下来的问题转换为:三维空间平面中的三维坐标,怎么转化成该平面二维坐标?

我的做法是这样的:

根据上述方程,显然这个平面的法向量是(tanθx,tanθy,-1)。

显然(1,0,tanθx)也在该平面上,对上述两个向量进行模为1的操作后,再进行叉乘得到了第三个向量。

这三个向量组成了旋转后平面的一组正交基。对这三个向量组成的矩阵取逆,就得到了原始物面与旋转之后物面的转换关系。

将该逆矩阵与三维空间平面中的三维坐标相乘,就得到了对应的平面二维坐标(其实也是三维坐标,只是最后一个维度数值为0)。

再结合该平面每个视场对应的像点,就可以进行标定了。

值得注意的是,MATLAB中相机标定函数中的世界坐标是固定的,但是我们这里相当于每张照片都不同,因此相应的标定代码需要进行一些修改,才可以完成相机标定。

zemax设置 像方远心_ZEMAX相机标定非常不完全指南相关推荐

  1. zemax设置 像方远心_像方远心光学系统具有以下特征

    像方远心光学系统具有以下特征 更多相关问题 作为货币政策中介指标,利率指标的缺陷是 下列哪个选项不是霍金的著作? <时间简史>|<大设计>|<果壳中的宇宙>|< ...

  2. zemax设置 像方远心_[入门] [ZEMAX] [成像] 手把手教程:一个双高斯类镜头

    今天,我们来手把手做一个入门成像设计练习:一个双高斯物镜 设计指标如下图所示 好,我们开始吧 从指标中我们看到视场角为6.5°,所以我们可以从ZEMAX中的sample中选择比较接近的5°的双高斯镜头 ...

  3. zemax设置 像方远心_在zemax光学设计软件布局图中显示光瞳

    概述 在OpticStudio的序列模式中,您可以在不影响其他面的情况下使用虚拟面 (dummy surface)和求解类型:拾取 (pickup)在透镜数据编辑器 (LDE)及布局图 (Layout ...

  4. 远心F-theta镜ZEMAX设计

    1 引言 对于光学系统,其理想成像下的物像关系如图1-1所示, 图1-1 理想光学系统物像关系 像高h' 与入射角θ 的关系满足: 式中  h' --理想像高(mm): f' --系统的等效焦距(mm ...

  5. 远心镜头技术及其选型介绍

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自:新机器视觉 一.远心镜头原理简介及选型: 1)远心镜头原 ...

  6. 镜头视场角计算工具_再谈远心镜头的设计及其独特的性能

    1.远心镜头的设计与对比镜头可以分为非远心和远心:远心镜头也可以分为物方远心.像方远心和双远心.相关概念的简单说明:孔径光阑在物空间的像称为入射光瞳.同样,孔径光阑被其后面的光学零件成在像空间的像,称 ...

  7. 远心光学成像系统原理详解

    目录 1 预备知识 1.1 光阑的概念 1.2 孔径光阑.入射光瞳.出射光瞳 1.3 主光线 1.4 光学系统的景深 1.5 远心光学系统 2 远心镜头详解 2.1 远心镜头分类 2.2 远心镜头的特 ...

  8. 远心镜头的原理及选型

    转自:http://blog.csdn.net/liyuanbhu/article/details/53957501 1.原理介绍 远心镜头(Telecentric lens),是为纠正传统镜头视差而 ...

  9. 远心镜头的特点及应用知识

    远心是指镜头成像的一种原理特性,远心光学镜头可以分为三类:物方远心镜头.像方远心镜头和物像双侧远心镜头. 物方远心的原理是系统的孔径光拦(相机里面的光圈)被它前面的透镜成像在无穷远,因而主光线平行于光 ...

最新文章

  1. 轉換--中文简繁体转换JS 代码
  2. 第五章5.1 strace
  3. 组合问题 contest4
  4. C++class类(I)
  5. 将虚拟机的版本改为1.6的方法
  6. 【Python】多线程的使用,通过传参接收返回值
  7. 诺基亚e7刷linux,当之无愧的机皇 诺基亚E7-00十大细节解析
  8. 计算机中华五岳说课稿,关于说课稿集合6篇
  9. 115套精品简历.zip
  10. ajax实现JSONP跨域
  11. lenovo计算机无法启动,联想台式电脑不能启动开机
  12. OSPF协议总结5(六种LSA)
  13. mysql where in()
  14. 2015Astar百度之星初赛 1001 超级赛亚ACMer
  15. 初识c语言加操作系统
  16. hdmi怎么支持2k分辨率_HDMI版本小科普及毕亚兹HDMI高清线体验
  17. python中unicode函数的包_Python unicodeutil包_程序模块 - PyPI - Python中文网
  18. vb.net 如何文件指定打印机打印文件_大规模使用FDM 3D打印机的三大挑战
  19. 注意力机制--CBAM的研究
  20. linux发广告软件下载,ADPower广告管理系统(Linux手动安装)

热门文章

  1. C++ 运算符重载规则
  2. Tomcat端口号的修改
  3. 量化信噪比 非均匀量化_达尔优EM910牧马人轻量化游戏鼠标拆解评测
  4. weex监听android返回键,weex使用手册
  5. idea 分支管理插件_Git的分支管理常用命令
  6. jquery对文本赋值和取值_jQuery对表单元素的取值和赋值操作代码
  7. 8年测试经验,用例设计竟然不知道状态图法?
  8. 【Liunx服务器】阿里云服务器下部署多个tomcat服务
  9. Pycharm怎么改背景颜色(超详细)
  10. 【Linux 命令】- find 命令