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

70ddc0464fb32eebbfe9ec6ec132803d.png

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

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

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

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

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

仿真!

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

7604ff217f7f6cfa9676770496b88d1b.png

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

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

一.旋转光学系统

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

dae7bb958f3f4ea38882585638214f2c.png

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

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

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

58cb1138c1aead84b37d8a759f717254.png

然后就成了这个样子:

6cdc7243203ee641801e6e4c74de4f3b.png

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

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

b4ec9f00fab400f2fbdda5d266361fe6.png

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

b5f69361eae269fcdc886ec34d6ae681.png

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

c3f57f9aec4c0045f638f4604836f0a8.png

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

fdbf078365473a02f69c7319ef1d133b.png

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

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

二.旋转物面

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

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

2ee4615359fcd90d195935abfce2dd8c.png

比如输入Y正切为2:

b62bc9dfa878ea250c7bebd369c6e409.png

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

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

7a1a3966d4dad520fcf7321ab666fd1d.png

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

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

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

我的做法是这样的:

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

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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574434.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

activiti 生命周期_一文让你读懂什么是Activiti工作流

Activiti工作流学习经验总结(一)什么是工作流?工作流指通过计算机对业务流程进行自动化管理,实现多个参与者按照预定义的流程去自动执行业务流程。什么是Activiti?Activiti 是一个开源架构的工作流引擎,基于bpmn2.0 标准进行流程定…

关于hkcmd.exe造成的和Eclipse之间热键冲突

可能是自己新买的笔记本比较强大,显卡也比较牛叉.当使用一些常用的Eclipse快捷键的时候Eclipse本身没有反应,反而显示器有了反应. 经常用的Eclispse中的快捷键CtrlAlt↑ 和CtrlAlt↓ 造成显示器内容的上翻转和下翻转 解决方式: 下载Windows Hot Key Explore 软件 在安装启动后…

中对曲线进行斜率提取_Au中的EQ处理方法——图形均衡器和参数均衡器

之前的文章详细讲过使用Cubase进行EQ处理,其实如果只是要对录音进行混音修音的话,使用Au也可以,Adobe Audition作为音乐录制及后期软件,具有很强大的后期功能,而且也可以添加插件,是修音混音非常好的工具。…

2 数据源配置_Spring, MyBatis 多数据源的配置和管理

作者:digdeep出处:https://www.cnblogs.com/digdeep/p/4512368.html热门推荐vuewebsocketSpringboot实现的即时通信开源项目springboot炸翔版CMS开源系统同一个项目有时会涉及到多个数据库,也就是多数据源。多数据源又可以分为两种情况&#…

(九十)使用多个storyboard+代码实现控制器的分开管理

使用单个storyboard会使得项目难与管理,使用纯代码又会过于麻烦,因此如果能将二者结合起来,并且使用多个storyboard,会使得项目简单简单、方便许多。 下面以一个简单的视图关系为例,介绍多个storyboard的用法。 ①有pa…

吗 支持windows_M1能否原生支持Windows 苹果把问题抛给了微软

关于苹果M1处理器近期已经有了非常多的报道,人们对其出色的性能表现以及较低的功耗还是充满了期待。那么最后一个也是最重要的一个问题,基于苹果M1处理器的电脑能原生支持微软Windows吗?毕竟很多人买回苹果MacBook第一件事就是安装Windows 10…

4怎么放大字体_win8.1系统如何放大所有字体?

电脑安装上[color#070c0 !important]win8.1正式版系统,发现桌面的字体和网页的字体比较小,看起来比较吃力,从而影响操作。一般win8.1系统字体都默认设置好的,不过用户可以进行放大,那么win8.1系统怎么放大所有字体&…

进程 zabbix_Zabbix监控在windows的进程(非进程数)

场景介绍:小Z同学最近遇到个项目需求,需求是用zabbix监控运行在windows的进程。然鹅,当小Z同学在网上搜了一大堆,发现基本上都是使用官方的proc.num(***.exe)键值拿到进程数量,很显然,这并不符合客户实际的…

phpcms文件所需权限

转载于:https://www.cnblogs.com/zhongheng/p/4684087.html

python mysql 时间比较大小_python时间函数与mysql时间函数转换

时间相关操作,时间有三种表示方式:时间戳 1970年1月1日之后的秒,即:time.time()格式化的字符串 2014-11-11 11:11, 即:time.strftime(%Y-%m-%d)结构化时间 元组包含了&#x…

mysql npe问题_MySQL为Null会导致5个问题,个个致命!

本文转载自微信公众号「Java中文社群」,作者磊哥。转载本文请联系Java中文社群公众号。正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示:“兵马未动粮草先行”,看完了相关的配置之后&#xff0c…

数据结构导论(一)

导读:在看书前,我对这本书的内容,是 这么想的:数据结构,那大概就是关于数据和结构的东西。而讲到数据,估计会说到数据类型,数据定义,数据存储等方面。然后在结构方面,就不…

基于java的汽车维修保养智能预约系统论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步

Mysql互为主从问题--日志同步数据不同步我搭建的是mysql互为主从 复制两台机器的mysql环境完全相同第一部分测试:B为master A为slave的同步测试在B上创建表lian,并插入数据mysql> create table lian (a int,b char(10));mysql> insert into lian (…

UVALive 4764 dp

DES: 这是一个新的游戏。给你一套牌、编号从1到100000.正常来说。你手中的牌和这次翻的牌是一样的,就会加一分。但是。如果是999的话。加三分。所以问你最大的分是多少。 貌似是简单的DP吧。(DP菜鸟...再简单我也不会...T_T...)于是...我看懂…

mysql数据库事务命令_MySql学习18----数据库事务---命令使用(02)

本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作。下一篇会讲述如何使用JDBC进行数据库的事务操作。事务是指数据库中的一组逻辑操作,这个操作的特点就是在该组逻辑中,所有的操作要么全部成功,要么全部失…

sequelize连接mysql_Sequelize没有连接mysql

文件config / config.json{"development": {"username": "root","password": null,"database": "example","host": "example.sqlite","dialect": "sqlite"},"stage…

SQL SERVER 2014 各个版本支持的功能

转自:https://technet.microsoft.com/library/cc645993 转换箱规模限制 功能名称EnterpriseBusiness IntelligenceStandardWebExpress with Advanced ServicesExpress with ToolsExpress单个实例使用的最大计算能力(SQL Server 数据库引擎)1操…

Android无法生成R文件的终极解决办法

R文件如果在clean项目(Project—>Clean)和 Fix Project Properties(如下图): 如果在第一步无法解决的的时候,那可能原因就是资源文件调用的错误,比如资源文件命名不规范,多余的资…

java awt 教程_JAVA教程 第五讲 AWT图形用户界面设计

5.1 用AWT生成图形化用户界面抽象窗口工具包AWT (Abstract Window Toolkit) 是 API为Java 程序提供的建立图形用户界面GUI (Graphics User Interface)工具集,AWT可用于Java的applet和applications中。它支持图形用户界面编程的功能包括: 用户界面组件&am…