锐单电子商城 , 一站式电子元器件采购平台!
  • 电话:400-990-0325

机器视觉系列(五)——镜头部分

时间:2022-07-13 10:00:00 接触式影像传感器

系列文章目录

机器视觉系列(1)-概述
机器视觉系列(2)-机械部件
机器视觉系列(3)-电气部分
机器视觉系列(4)-
相机部分

文章目录

  • 系列文章目录
  • 前言
  • 什么是工业镜头?
  • 二、工业镜头分类
  • 三、工业镜头的主要性能参数
  • 四、工业镜头选型步骤
  • 五、其它组件
  • 六、相机镜头校正
  • 总结
  • 参考资料


前言

延续之前的机器视觉系列文章,从应用的角度介绍工业镜头的相关整理内容。

什么是工业镜头?

工业镜头是光、机、电技术的精确结合,光学系统由多个镜头(或反射器)组成,形成正确的物理图像关系,确保正确清晰的图像,是镜头的核心;机械装置包括固定光学元件(如镜筒、镜头座、压力圈、连接环等)、镜头调节机构(如光圈调节环、调焦环等)、连接机构(如常见C接口、CS接口)等。此外,一些镜头还具有自动调光圈、自动调焦或感知光强度的电子结构。它用于聚焦相机内部的光成像,产生尖锐的图像,以获得被测物体的细节

二、工业镜头分类

按实际用途可分为FA镜头,远心镜头,M12镜头
①FA就是Factory Automation,工厂自动化,指用于工厂自动化的镜头,简称工业镜头。
②远心镜头主要是为了纠正传统工业镜头的
视差它可以在一定的物距范围内,使得到的图像放大倍数不会变化,这对于被测物体不在同一物体上是非常重要的。由于其独特的平行光路设计,远心镜头受到计算机视觉应用场合的青睐,对镜头畸变要求很高。
在这里插入图片描述
有时用于追求高精度双远心镜头比普通远心镜头具有更高的测量精度,其入射和出射光瞳均投射到无限远处,其畸变系数为普通镜头的1/20,一般小于0.1%。
在这里插入图片描述
③M12镜头是小螺纹口径镜头,整体尺寸远小于FA镜头和远心镜头,主要用于嵌入式视觉板卡相机。
在这里插入图片描述
根据焦距类型,FA镜头也可以进一步分为定焦镜头、变焦镜头、鱼眼镜头和微距镜头
①定焦镜头特指只有一个固定焦距的镜头,它只有一个焦段,或者说只有一个视野,没有变焦功能。定焦镜头的设计相对变焦镜头而言要简单得多,但一般变焦镜头在变焦过程中对成像会有所影响,而定焦镜头的优点是对焦速度快,成像质量稳定。对于使用定焦镜头的数码相机,它所拍摄的运动物体图像清晰而稳定,对焦非常准确,画面细腻,颗粒感非常轻微,测光也比较准确。
②变焦镜头通过镜头中镜头之间的相互移动,在一定范围内改变镜头的焦距,使相机不仅可以获得全景图像,还可以获得局部细节图像。通过改变焦距,获得不同宽度的视角、不同大小的图像和不同场景范围的相机镜头。变焦镜头可以通过改变焦距来改变拍摄范围,而不改变拍摄距离,因此非常有利于画面构图。
【其实变焦镜头很好用,就是价格太贵…】
③鱼眼镜头视角接近或等于180°镜头是一种极端的广角镜头。它的视角力求达到或超出人眼所能看到的范围。因此,鱼眼镜头与人们眼中真实世界的场景有很大的不同。我们在现实生活中看到的风景是规则的固定形式,鱼眼镜头产生的画面效果超出了这一类。主要用于基于现实场景制作全景图像
④微距镜头是一种特殊的微距摄影镜头,主要用于拍摄非常微妙的物体,并努力尽可能详细地呈现目标的细节。主要用于平面物体(文件、照片、绘画等)的翻拍和复制
此外还有沙姆镜头,镜头沿图像的横轴或纵轴倾斜,透视镜头和远心镜头有两种形式,在激光三角测量等需要相机倾斜拍摄目标的应用中

三、工业镜头的主要性能参数

在实际的机器视觉中,最常用的是FA这里只讨论定焦镜头。FA定焦镜头的主要参数。
焦距f:其中,镜头与焦点的距离是镜头的重要性能指标。镜头焦距的长度决定了拍摄的成像大小、视角大小、景深大小和图片的透视强度。焦距越大,成像越大。根据镜头的不同用途,焦距的大小也不同镜头焦距为5mm、8mm、12mm、16mm、25mm、35mm、50mm、75mm等。其计算公式为:
在这里插入图片描述
式中,WD工作距离(物距)。
光圈系数(相对孔径):计算公式如下:
在这里插入图片描述
相对孔径的倒数为光圈系数,光圈系数一般为F数字表示。例如,如果镜头的相对孔径为1:2,则其光圈系数为F2.这个指标将标记在相机的镜头上。常用的光圈系数是F1.4、F2.0、F2.8、F4.0、F5.6、F8.0、F11.0、F16.0、F22.等几个等级。光圈系数的标称值越大,光圈越小,单位时间内的通光量越小。为了提高镜头的可靠性,降低成本,一些视觉系统采用固定光圈设计,即当光圈不能改变时,通过调整光源强调或相机增益来调整图像亮度。
在这里插入图片描述
对照度要求不高、使用手动光圈的高清相机可考虑将光圈稍缩小一点。
在这里插入图片描述
靶面尺寸:镜头靶面尺寸是指镜头成像直径可覆盖的最大感光
芯片尺寸,主要为1/2英寸、2/3英寸、1英寸和1英寸以上。
接口:它是镜头和相机之间的连接方式用的接口包括C、CS、F、V、T2等。
像差(如畸变、场曲等),在机器视觉应用中,最关键的像差是畸变(变形率)和场景(传感器连接的参数已被严格校正)。畸变会影响测量结果,特别是在精确测量中,必须通过软件进行校准和补偿。
分辨率:它代表镜头记录物体细节的能力是指在成像平面上1mm在间距内,可分辨的黑白线对数为线对//mm”。镜头分辨率越高,成像越清晰。镜头的分辨率不能与相机的分辨率混淆。
在这里插入图片描述
一般要求像面分辨率大于1/(2)*单像元尺寸<单位取mm>)以上,单位线对/mm,镜头的最低分辨率为38线/2英寸mm,镜头的最低分辨率为50线/3英寸mm,相机的靶面越小,镜头的分辨率就越高。
数值孔径NA:它用来衡量镜头可以收集的光的角度范围。其计算公式为:
在这里插入图片描述
式中,n空气中是镜头工作介质的折射率n=1.0;a光进入镜头时的最大孔径锥角。数值孔径与分辨率和光学放大倍数成正比。换句话说,数值孔径直接决定镜头的分辨率。数值孔径越大,分辨率越高,否则分辨率越低。
视场FOV:其计算公式为:
在这里插入图片描述
式中,f为焦距;WD工作距离。
在这里插入图片描述
光学放大倍数M:其等于芯片尺寸除以视场,其计算公式为:
在这里插入图片描述
工作距离WD:即物距,指镜头最下端机械面到被测物体的距离。由于有些系统工作空间很小,因而要求镜头有较小的工作距离;但有的系统在镜头前需要安装光源或其他工作装置,因而必须有较大的工作距离保证空间。需要的工作距离越大,保持小视野的难度和成本就越高。
注意,计算景深时还会使用对焦距离,对焦距离包括工作距离、镜头长度、相机法兰距这3部分的长度
后焦距:指相机接口平面到芯片的距离。简单来说,当安装上标准镜头(标准C/CS接口镜头)时,后焦距是使被拍摄物体的成像恰好在CCD图像传感器的靶面上的距离。在对线扫描镜头或大面阵相机的镜头选型时,后焦距是一个非常重要的参数,它直接影响镜头的配置。一般工业相机在出厂时都对后焦距做了适当的调整,因此,在配接定焦镜头的应用场合,一般不需要调整工业相机的后焦距。而在有些应用场合,如出现当镜头对焦环调整到极限位置仍不能使图像清晰时,如果镜头接口正确,则需要对工业相机的后焦距进行调整。
弥散圆直径δ:用于计算镜头景深所需要的参数。不同的厂家对容许弥散圆直径有不同的定义,一般给定参数为,芯片尺寸24mm36mm对应弥散圆直径0.035mm,6cm9cm对应0.0817mm,4”5”对应0.146mm。通常情况下,肉眼分辨率为二千分之一至五千分之一。人眼在明视距离(眼睛正前方30厘米)能够分辨的最小的物体大约为0.125mm。所以,弥散圆放大在7寸照片(这是个常用尺寸)也只能是0.125mm以内,也就是图像对角线长度的1/1730左右。这个1/1730左右的容许弥散圆大小对于任何大小的底片或者CCD都适用,因为它们放大出来的7寸照片,都可以将弥散圆控制在0.125mm。所以蔡斯公司制定的标准就是弥散圆直径=1/1730底片对角线长度。实际使用中如果需要,还可进一步放宽到1/1200-1/1500。另外,因为弥散圆最根本目的是界定你是否能够看出清晰或者模糊,那么至少需要22个像素(4个像素的方块)来分辨是否清晰,即取2个像元尺寸大小,这基本上是弥散圆的极限
在这里插入图片描述
景深DOF:其是镜头的一个重要的外部参数,它表示满足图像清晰要求的远点位置与近点位置的差值,如下图:
在这里插入图片描述
前景深ΔL1、后景深ΔL2及景深ΔL的计算公式为:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在相机中可清晰成像的距离范围为:L-△L1~L+△L2。
式中,f为焦距;F为光圈系数;L为对焦距离(即工作距离*(1+1/放大倍率))。
在这里插入图片描述
对比下前景深与后景深的区别:
在这里插入图片描述
另从后景深的计算公式可以看出,很容易出现△L2<0的情况,这就引出超焦距的概念。即当镜头对焦在无穷远时,景深前界(离镜头最近清晰点)到镜头的距离称之为超焦距。就是从这个超焦距点到镜头距离的1/2处开始到无穷远,成像都是清晰的。如果超焦距是2米,则景深就是1米到无穷远。当使用超焦距时,我们希望获得尽可能大的景深。
在这里插入图片描述
超焦距的计算公式为:
在这里插入图片描述
这时的清晰成像距离为>fH/2。
例如,给定弥散圆直径为0.011mm(2pixel*5.5μm),焦距为12mm,光圈系数为2.8,工作距离为700mm,则:
L = 700 + 12 = 712mm
△L1 = 2.80.011712^2 / (12^2 + 2.80.011712) = 94.10mm
△L2 = 2.80.011712^2 / (12^2 - 2.80.011712) = 127.91mm
△L = 94.10+127.91 = 222.01mm
fH = 12 + 12^2/(2.8*0.011) = 4687.32mm
可以看到,影响景深的最主要因素是工作距离,工作距离越大景深越大。此外,光圈越大景深越小,焦距越大景深越小。
实际使用中,真实可接受弥散圆与理论计算存在一定差距,通常通过实测来进行确定
①固定光圈,保证其他测试条件相同。
②放置一个条码目标物,调节镜头至条码刚好能识别出的状态,即极限状态。再用相同的另一张条码上移到能识别出的极限高度,此段高度即为景深。
在这里插入图片描述

四、工业镜头的选型步骤

计算短边对应的像素数 E=B/C,相机长边和短边的像素数都要大于E
②像元尺寸=产品短边尺寸B/所选相机的短边像素数;
放大倍率 =所选相机芯片短片尺寸/相机短边的视野范围
可分辨的产品精度 =像元尺寸/放大倍率(判断是否小于C)
对焦焦距 =工作距离*(1+1/放大倍率)单位mm
镜头靶面尺寸要≥相机靶面尺寸,否则将出现黑角
相机分辨率要小于2倍的镜头的解析度,即要求像面分辨率要大于1/(2*单个像元尺寸<单位取mm>)以上,单位线对/mm
另外,对于恒定光照条件的环境(一般为实验室环境),可选用固定光圈的镜头。对于光照度变化不明显的环境,常选用手动光圈镜头,即将光圈调到一个比较理想的数值后固定住。如果照度变化较大,应选用自动光圈镜头。在使用自动光圈镜头时,一般需要镜头配合摄像机的背光补偿功能来实现,采用宽动态范围的摄像头也有比较不错的效果。

五、其他组件

偏光镜,其是根据光线的偏振原理制造的镜片,用来排除和滤除光束中的直射光线,使光线能于正轨之透光轴投入眼睛视觉影像,使视野清晰自然。例如,通过使用偏光镜,可以减弱水面的反光,从而清晰的拍摄到水中的鱼。在拍摄这样的场景时,光源的投射角度与相机拍照的角度要趋近一致,并且其最大的偏折角度需介于30-40°之间。使用的时候可以通过慢慢转动滤镜前组的镜片来进行调整,力求把景物表面的反光降到最低程度。另外,偏光镜可以有效提高色彩的饱和度,提高反差,这是因为偏光镜可以吸收大气中雾气或灰尘反射出的各种方向的杂光,从而使拍摄出的影像更加纯净。
在这里插入图片描述
滤光片,其是用来选取所需辐射波段的光学器件。滤光片的一个共性,就是没有任何滤光片能让天体的成像变得更明亮,因为所有的滤光片都会吸收某些波长,从而使物体变得更暗。例如你想要拍一朵黄花,背景是蓝天、绿叶,如果按照平常拍,就不能突出“黄花”这个主题,因为黄花的形象不够突出。但是,如果在镜头前放一个黄色滤光片,阻挡一部分绿叶散射出的绿光、蓝天散射出的蓝光,而让黄花散射出的黄光大量通过,这样,黄花就显得十分明显了,突出了“黄花”这个主题。
在这里插入图片描述

六、相机镜头校正

这里只介绍面阵相机的针孔相机模型的标定。
我接触过的相机镜头校正软件有:OpenCV、Matlab、Halcon三种,其都可以分为4个步骤:
使用待校正相机镜头拍摄多幅不同位姿的标定板图像
标定板特征点亚像素精度提取
基于针孔相机模型的解析求解
基于非线性最优化的参数精炼
步骤①三者之间没有差别。
关于拍摄用于标定的图像时的注意细节有:
<1>使用制造精度高的标定板(需要能从图案区分出标定板的长和宽)
<2>保持相机不变,拍摄不同方向的棋盘图案
<3>拍摄图像最少10张,最好能达到20张以上
<3>所拍摄图像不能是模糊的
<4>所拍摄图像不能包含相对于相机平面大于45°角的校准图案,如下图:
在这里插入图片描述
<5>在图像中标定板的大小要大于全视野的1/4并小于全视野,推荐使用2/3视野大小的标定板
<6>拍摄的所有图像整体要覆盖相机的所有视野,包括四角、四边和中间
<7>拍摄的所有图像中,校准图案在相对于相机的方向上有足够的变化
在本文实验中,我分别使用标称制造精度±0.01mm的棋盘格和圆点阵的两种标定板各拍摄了21张不同位姿的图像:
在这里插入图片描述
在这里插入图片描述
步骤④三者之间没有差别。
步骤③主要是使用的针孔相机模型的差别,OpenCV和Matlab差别很小,OpenCV的相机内参数矩阵定义为:
在这里插入图片描述
Matlab的相机内参数矩阵定义为:
在这里插入图片描述
Matlab提供了一个传感器x轴和y轴相对偏斜的自由度s,而Halcon的相机内参数矩阵使用焦距f,像元缩放sx和sy,中心点坐标cx和cy来表示,将上述参数整理后形式与OpenCV的定义相同。fx = fsx,fy = fsy,其中f为镜头焦距,单位mm;sx和sy为每个像元的实际尺寸,转换为每mm对应多少个像素,单位pixel/mm。这里使用的是Basler acA1300-30gc,其像元尺寸为3.75μm,对应的sx=sy=266.67。
而关于镜头畸变的模型定义,三者都提供多项式畸变校正模型,只是OpenCV提供的自由度最大,3个径向畸变系数k1、k2、k3和2个切向畸变系数p1、p2都可以选择性配置;Matlab的自由度略小,相比OpenCV不能配置只使用k1的多项式模型;而Halcon的自由度最低,5个系数必须全部使用。但Halcon还提供了一个只用系数kappa表示的可进行解析求解的除法畸变模型。
步骤②是后面两个步骤的基础,Matlab(在2021版之后,而我用的是2019,不能提取圆点阵)可以提取棋盘格和圆点阵两种图案的特征点亚像素坐标;OpenCV也可以提取棋盘格和圆点阵两种图案的特征点亚像素坐标(cv.findChessboardCorners+cv.cornerSubPix以及cv.findCirclesGrid);Halcon只可以提取圆点阵图案的特征点亚像素坐标。
进行3种软件的特征点亚像素提取精度实验:分别使用OpenCV提取两种图案的特征点的亚像素精度坐标,Matlab提取棋盘格、Halcon提取圆点阵。然后分别求每幅图像提取的特征点的X和Y坐标的均值(X和Y混在一起),然后将不同软件提取的特征值进行相减得:
在这里插入图片描述
在这里插入图片描述
可以看到,OpenCV的提取值X和Y坐标都比Matlab 小约1个像素;OpenCV的提取值X和Y坐标都比Halcon大约0.02个像素。
如上面所述,这是3种软件相机和标定的最大差别
基于上述特征点提取结果,先在3种软件中,分别测试使用5畸变校正系数和1畸变校正系数(Matlab为2畸变校正系数)。多系数畸变校正模型的校正结果,相比于少系数畸变校正模型的改进很小,哪一种软件二者的校正后投影特征点的平均坐标偏差都小于0.005个像素。因此,在整理对比实验数据时只列出使用少系数畸变校正模型的标定结果。
在这里插入图片描述
可以看到最终投影平均误差最小的是:使用OpenCV算法+圆点阵+OpenCV提取特征点的算法。
这个结果可能跟很多博文中的比较结果都不一样,但这个结论其实不重要,主要是因为:使用的标定板、相机、镜头、拍摄标定图像时的相对位置、使用的图像数量都会对这个结论产生影响。
先排除能排除的影响:使用的图像数量。这里以OpenCV算法+圆点阵+OpenCV提取特征点的算法为例,分别使用图像数量从13-21张,来绘制投影平均误差的变化
在这里插入图片描述
从上图可以看出:基本上超过20张图像,其平均误差就已经收敛,不会再有明显的下降改进;从13-21张的变化过程中,最大误差波动也才0.003个像素,对于上述所有算法,其对于最终平均误差指标的影响都小于0.003/0.049100%≈6%。所以可以确定,使用图像数量基本上不影响上述指标波动。
上面也说过,校正算法本身的影响很小,从上表数据也可以得到验证。
而对于剩下的使用的标定板、相机、镜头、拍摄标定图像时的相对位置这几个影响因素,我们是没有办法进行对比实验的。再加上在标定算法的最后一步,都会有一个非线性的精炼过程,其是数值最优的(严格依赖于数据),但不一定是真实的。也就是说,这个步骤会导致即使使用的标定板、相机、镜头全部相同,仅是由于使用了不同的标定图像,就会造成最终的平均误差的波动,所以我们也没有必要太过关注于平均误差的绝对值。
但在实际使用中,我们还是需要从上述各种算法中选择一种,来获得最优的相机镜头校正结果,所以还是需要对上述算法进行量化比较。这里我以如下准则来进行评价:由于我们知道相机和镜头属于工业制品,且大品牌的高质量产品是有严格的品控的(其会在出厂前进行抽检和全检),所以我们一般用到的相机和镜头,通过合理的安装和使用,其相机和镜头应该是非常接近同轴对心的,所以其相机参数cx和cy应该非常接近图像的中点(这是由制造保证的,完全不依赖于算法),那么相机标定的cx和cy参数如果越接近图像的中点,那么其就应该越接近相机和镜头的真实情况
通过上述准则,我们就可以确定如何选择相机标定算法了。这里的图像中心是640和480,所以依然是使用OpenCV算法+圆点阵+OpenCV提取特征点的算法最佳。从算法层面分析,这主要归功于使用边缘轮廓+矩估计所提取的圆点阵的特征点坐标,具有最好的透视变换还原性
另外,在Janne Heikkila and Olli Silven的 《A Four-step Camera Calibration Procedure with Implicit Image Correction》中,其说明相机标定算法能达到的理论精度为<0.01pixel,但由于在实际操作中存在各种无法消除的误差,会导致真实误差要远大于理论精度。所以如果我们的最终标定误差<0.01乘以10=0.1个像素,都是完全可以接收的好的结果。还要将上述标定误差从像素换算到实际长度单位(这里是25/42
0.049≈0.03mm),其应该大于标定板的制造误差(这里是0.01mm),否则即使投影平均误差再低,也是没有意义的
基于以上分析,在实际进行相机镜头标定时,为追求高精度,应在完全模拟真实使用的场景下(即相机光圈、焦距、镜头、工作距离、曝光时间都尽可能接近真实使用值),然后使用圆点阵标定板,按照上述标定用图像注意事项,采集超过20张标定图像,最后进行亚像素级的相机镜头标定。这样获得的结果不一定是真实的,但由于其高度的数据相似性,会使其在实际使用中,获得更小的标定后校正误差。

附上使用OpenCV+圆点阵校正的Python代码如下:

dirs = "D:\circles"fns = os.listdir(dirs)fns = [os.path.join(dirs,k) for k in fns]CHECKERBOARD = (7,7)objpoints = []imgpoints = []objp = np.zeros((1, CHECKERBOARD[0] * CHECKERBOARD[1], 3), np.float32)objp[0,:,:2] = np.mgrid[0:CHECKERBOARD[0], 0:CHECKERBOARD[1]].T.reshape(-1, 2)objp = objp * 25 # 得到真实世界坐标for fname in fns:    img = cv2.imread(fname)    gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)    ret, corners = cv2.findCirclesGrid(gray, CHECKERBOARD) # 直接得到浮点数    if ret == True:        objpoints.append(objp)        imgpoints.append(corners)flag = cv2.CALIB_ZERO_TANGENT_DIST | cv2.CALIB_FIX_K2 | cv2.CALIB_FIX_K3 # 只使用k1畸变系数ret, mtx, dist, rvecs, tvecs = cv2.calibrateCamera(objpoints, imgpoints, gray.shape[::-1], None, None, flags=flag)

总结

以上就是关于工业镜头要讲的内容,欢迎大家对本文章进行补充和指正。

参考资料

《Halcon机器视觉算法原理与编程实战》,北京大学出版社
《机器视觉算法与应用》,清华大学出版社
《海康机器视觉认证工程师官方资料》
《Handbook of Machine and Computer Vision——The Guide for Developers and Users》,Alexander Hornberg,Wiley
OpenCV官方文档,https://opencv.org/
Matlab官方文档,https://ww2.mathworks.cn/help/vision/ug/evaluating-the-accuracy-of-single-camera-calibration.html
Halcon官方文档,https://www.mvtec.com/doc/halcon/12/en/calibrate_cameras.html
https://learnopencv.com/understanding-lens-distortion/

相关文章