本文翻译自Basler镜头选型白皮书

有许多方法来进行镜头选型。本文将会讨论其中的指导原则,以帮助你在项目中选择合适的镜头。我们将讨论许多镜头的基本概念,比如镜头接口、图像大小、放大率、焦距、F数和光谱范围。

镜头接口和图像大小

首先我们要区分C口和F口镜头的不同。一个C口镜头的后法兰距离是 17.526 mm,内螺纹标准是32UN2A;与之相对,F口镜头的后法兰距为 46.5 mm,使用nikon的卡扣式法兰进行固定。C口一般用于小于 1 英寸的传感器。需要注意的是这里所说的“英寸”并不是传感器的真实英寸大小,而是来自于老式电视显像管的外径大小。

图像大小 高度 宽度 对角线
1/3” 3.6 mm 4.8 mm 6.0 mm
1/2” 4.8 mm 6.4 mm 8.0 mm
2/3” 6.6 mm 8.8 mm 11.0 mm
1” 9.6 mm 12.8 mm 16.0 mm

为了防止镜头套管壁太高(C口如前所述接近20 mm)导致的图像渐晕(vignetting),镜头套管的直径必须大于图像传感器的对角线长度。比如一个Basler的1k的线阵相机传感器有10.24 mm长,2k的相机传感器有20.48 mm长,那么1k相机可以使用C口,而2k的相机则建议使用F口的镜头。对应面阵相机,在计算时以对角线长度为标准。

实际上,镜头接口的种类还有许多种,C口和F口是最常见的接口类型。除了它们之外还有V口、M42X1、M42X0.74(也叫T2)和M39X1/26”。有时,甚至会修改法兰距离,以达到短焦距。

放大率

放大率 ? = y' / y,其中y‘是图像中成像的大小,y则是实际的物体大小;物体到镜头的距离和镜头到像面的距离的比值依然是放大率值?。

焦距

计算镜头的像方焦距(通常也是物方焦距)有许多方法。如果已知放大率 ? 和物距 a ,那么焦距为 \(f' = \frac{a}{1 + \frac{1}{\beta}}\) 或者 \(f'=\frac{a}{1 + \frac{y}{y'}}\) 。利用基本的成像公式,还能得到一个计算焦距的式子\(f'=\frac{1}{\frac{1}{a} + \frac{1}{a'}}\)。

需要注意的是标称的焦距并不是真实的镜头焦距(比如一个35 mm的镜头,可能实际焦距为33.78 mm)。焦距会直接影响视场大小,利用公式 \(y=y'*(\frac{a}{f'} - 1)\),并将y’用图像大小代替,就可以计算出视场的大小。

F数和衍射极限

F数描述能够通过镜头的光的总量的大小,它的计算公式是 \(F = \frac{f'}{d}\) ,式中f'是焦距,d是光阑的直径,通常光阑大小近似等于镜片的大小。

F数的常见值是22, 16, 11, 8, 5.6,4,2.8,2和1.4,它们是以sqrt(2)的倍数减小,也意味着通光量以2的倍数减小。F数越小,通光量越大,但是畸变也会随之增大。当F数在4,5.6,8时,往往得到最佳质量的图像。低F数导致由于畸变而模糊的图像(球差、象散、场曲、慧差、畸变和色差),而高F值,又会出现由于衍射造成的模糊。衍射极限通常以艾里斑的直径来表示:D_Airy = 2.44 * λ * F,式中λ是平均波长。从数值上看,可见光的衍射极限数值大致等于F数,单位是微米。衍射极限限制了可采用的传感器像元大小。现代图像传感器的像元越来越小,5微米大小的像元,还能够适配大部分光学系统的衍射极限,但随着像元的减小,对分辨率的实际提升已经十分有限了,因为即便传感器的分辨率做得再高,镜头达到衍射极限后,已经无法提供更高的分辨率的图像给传感器了。对于Bayer模式的彩色相机,通常的可见光颜色极限在2.5微米,毕竟Bayer模式相机的像元输出是通过在一个2x2区域内进行插值得到的,因此实际的感光单元还是5x5微米的区域。

光谱范围

Basler相机的光谱范围覆盖400到1000纳米,稍大于人类视觉的感光频谱(约400到800纳米)。彩色相机通常会有一个Bayer模式的滤镜覆盖在传感器前面,如前所述这会导致实际分辨率为实际像元个数除以2。通常蓝色通道的感光频谱范围是400到500纳米,绿色通道为500到600纳米,红色则是大于600纳米的波段。但是大于700nm的近红外波段会在穿透所有三个色彩通道的滤镜,导致颜色偏移(比如绿色会呈现发黄和发橙)。因此需要一个切断红外光谱的滤镜,对于C接口的相机,需要在传感器前端加上一个这种滤镜。此外,有些镜头在设计时,就已经考虑了可见光波段的矫正,将红外波段的光谱已经进行了削弱。

镜头的选择

镜头(或镜头组)的设计,一般是开始于设定一套具体参数的,这些参数包括:放大率、视场、F数、光谱范围、图像尺寸、像差以及成本。

如果可能,尽量避免使用变焦透镜。首先,变焦透镜的设计相对定焦透镜,会在参数指标上做更多的折中和妥协;其次,变焦透镜会有小型马达驱动变焦,电机驱动的位置精度会差于固定成像位置的定焦镜头。

自动光圈通常也是不建议使用的,可以通过调节曝光时间来调节通光量。因为光圈大小,直接影响着景深和艾里斑大小,针对特定应用,这些关系清晰度的参数应该保持固定。景深(DOF)可以使用下式大致计算:\(DOF = \pm PixelSize * F\)

接下来是放大率。常规镜头的放大率在1:infinity到1:10之间,这是由系统的整体光学长度所限制的。通常可以在镜头和镜头接口之间增加一个套管来改变镜头到传感器的距离(约为像距),从而改变镜头工作的最终放大率。但是这种方式通常会造成图像的模糊,因为镜头在设计时是针对固定的放大率和光学距离来进行优化的。

为了图像质量,不要使用镜头套管来改变像距。

机器视觉应用中的镜头放大率在1:20到1:2之间。

常见微距镜头(Macro)的放大率在1:4到1:1之间,微距镜头又叫放大镜头,表明它的像大于或接近物体的尺寸。如果想达到1:1到4:1的放大率,可以考虑倒装微距镜头来实现,这种方式需要的工作距离也是可以接受的。

要得到大于5的放大率,就需要考虑显微透镜了。通常的显微透镜最大能够支持2/3"的芯片。10倍的放大率还是可以达到的,但是20倍的放大率,则存在有两个限制。首先其工作距离十分小。如果可能,通过亮光进行反射或投射照明。其次,一个传感器像元如果是6.7微米,对应物体大小为0.34微米(340纳米),已经小于可见光波段的波长。这种情况,需要一个极大的光圈,也就是极小的F数,同时也意味着非常小的景深(百分之几毫米),这使得物体和像面的安置精度无法得到保障,尤其是线阵传感器尽量避免在显微应用中使用。

远心镜头有两个优势:首先,图像没有透视变形;其次,景深相对较大。远心镜头的大小要和被成像的物体一样大,如此大的镜头尺寸,也使得远心镜头一般都比较昂贵。

BASLER 镜头选型白皮书的更多相关文章

  1. 计算机电子书 2018 BiliDrive 备份

    下载方式 根据你的操作系统下载不同的 BiliDrive 二进制. 执行: bilidrive download <link> 链接 文档 链接 Webpack 中文指南.epub (40 ...

  2. Syncfusion的社区许可及免费电子书和白皮书

    今晚由于要忙于其他事情,就简单的给大家推荐一个第三方组件库.特别注明:这是我义务为这家公司打广告.毕竟我从他们公司收获了很多知识. Syncfusion是一家微软生态下的第三方组件/控件供应商,算是后 ...

  3. Basler和Matrox的配置及调试

    说明: 本系列博文是我自己研究生课题,采用做一步记录一步,在论文答辩结束或者机器设计结束之后才会附上源代码! 自从装好相机和设计好机械结构之后就没有继续进行下一步,这段时间花了三四天继续上次任务进行, ...

  4. 淘宝网-接口测试白皮书V0.1

    <软件自动化测试开发> 出版了 淘宝(中国)软件有限公司 接口测试白皮书   V0.1 淘宝网平台测试组(qa.taobao.com) 淘宝网-接口测试白皮书 2 目录 1  接口测试的背 ...

  5. 快速web开发中的前后端框架选型最佳实践

    这个最佳实践是我目前人在做的一个站点,主要功能: oauth登录 发布文章(我称为"片段"),片段可以自定义一些和内容有关的指标,如“文中人物:12”.支持自定义排版.插图.建立相 ...

  6. TypeScript 强类型 JavaScript – Rafy Web 框架选型

    今天看到了 AngularJs 2.0 版本将基于 TypeScript 构建 的消息.与同事们对 TypeScript 展开了讨论.本文记录一些个人的想法. 理想的 JavaScript 开发模式 ...

  7. Swif - 可选型

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 13.0px Menlo; color: #4dbf56 } p.p2 { margin: 0.0px 0. ...

  8. 移动端IM系统的协议选型:UDP还是TCP?

    1.前言 对于有过网络编程经验的开发者来说,使用何种数据传输层协议来实现数据的通信,是个非常基础的问题,它涉及到你的第一行代码该如何编写. 从PC时代的IM开始,IM开发者就在为数据传输协议的选型争论 ...

  9. #数据技术选型#即席查询Shib+Presto,集群任务调度HUE+Oozie

    郑昀 创建于2014/10/30 最后更新于2014/10/31   一)选型:Shib+Presto 应用场景:即席查询(Ad-hoc Query) 1.1.即席查询的目标 使用者是产品/运营/销售 ...

随机推荐

  1. 安装windows7、windows8.1提示无法创建新的分区

    有时候用原版系统镜像安装windows系统时,会提示“windows无法安装到这个磁盘.选中的磁盘采用GPT分区形式”,导致安装失败,下面就来讲解一下如何解决. 1.在系统提示无法安装的那一步,按住“ ...

  2. docker-proxy 实现容器代理访问

    可实现多个容器web主机对外提供访问 运行代理容器 nginx-proxy docker run -d -p 80:80 -v /var/run/docker.sock:/tmp/docker.soc ...

  3. [Javascript] MetaProgramming: function name

    Each function should have a 'name' property. It can be anonymous, empty, the same as function name, ...

  4. SharePoint 2013 error The given assembly name or codebase System.ServiceModel.dll was invalid

    笔者近期在 SharePoint 2013 的环境中遇到一个奇怪的问题,前一天 SharePoint 2013 站点还是好好的.可是突然站点就报page can't display 500 错误: T ...

  5. innodb_space工具解析 MYSQL 页图解

  6. 使用map端连接结合分布式缓存机制实现Join算法

    前面我们介绍了MapReduce中的Join算法,我们提到了可以通过map端连接或reduce端连接实现join算法,在文章中,我们只给出了reduce端连接的例子,下面我们说说使用map端连接结合分 ...

  7. NodeJs读取源代码使用的字符集

    今天用NodeJs写了个简单的客户端/服务器程序,并让客户端向服务器发送汉字.当在Windows上执行客户端时,发现服务器端打印的接收到的数据是乱码.后来发现Windows上的客户端文件的储存编码方案 ...

  8. PHP5常量

    用函数 define()设置常量 define函数有3个参数 1.必选,常量的名称,标识符 2.必选,常量的值 3.可选,默认不设置,常量名称大小写敏感.如果设置true,常量名称不区分大小写! 下面 ...

  9. System Operations on AWS - Lab 2 - Configuring VPC

    建立包含Public和Private子网的VPC,建立Internet Gateway,建立Public和Private子网的路由表,创建NAT和Bastion EC2实例 1. 配置你的私有虚拟云 ...

  10. js获取元素transform参数得出的个人理解

    之前写页面的时候有试过想用js获取某些元素的translate的数值什么的,但是translate又是transform的子样式(勉强说说),理所当然就是先获取transform样式,再读里面的值. ...