当前位置: 首页 > 编程日记 > 正文

镜头评价指标及测试方法(二)—畸变与分辨率

一、畸变

畸变(distortion)也称为失真,是由于光阑球差的影响,不同视场的主光线通过光学系统后与高斯像面的交点高度不等于理想像高,两者之差就是畸变。因此畸变只改变轴外物点在理想面上的成像位置,使像的形状产生失真,但不影响像的清晰度。

畸变有正负之分。如图a所示,一垂直于光轴的正方形平面物体,当镜头具有正畸变时,如图b所示,称为枕型畸变;当镜头具有负畸变时,如图c所示,称为桶型畸变。

畸变通常有两种计算方法:光学畸变(Optical distortion)和TV失真(TV distortion). 如图所示,其计算方法为:

在机器视觉工程师非常关心的一个问题是:如何利用镜头畸变的参数来计算测量误差?在此举例说明。

若相机芯片为2/3’(对角线为11mm,像元尺寸为3.45um), 某镜头光学畸变率为dist=0.05%, 有y=5.5mm, 则Δy=dist*y/100=0.05%x5.5mm/100=2.75µm. 故此畸变导致像发生了2.75µm的偏移,小于一个像素。

二、分辨率

分辨率定义为:能被分辨开来的两个物点(或像点)之间的最小距离,称为镜头的物方分辨率,记为Resolution(物)(或像方分辨率,记为Resolution(像))。单位为µm。

Resolution(物) = 0.61 x Wavelength/NA=1.22 x Wavelength x Fno.

Resolution(像) = 镜头放大倍率x Resolution(物)

解像力定义为:1mm内的黑白线对数, 记为Resolving power。单位为line/mm或lp/mm.

Resolving power = 1/ Resolution(像)

提到分辨率,大部分工程师会想到相机分辨率,而忽略镜头的分辨率对最终成像效果也起到关键作用。事实上,只有镜头分辨率和相机分辨率匹配,才能得到最佳成像效果。下图直观的表示出镜头和相机匹配对成像效果的影响。

那么镜头分辨率跟相机分辨率如何才能匹配呢?我们知道,物体是成像在相机芯片上的,物方的两个点,经过镜头系统成像在相机芯片上的最小距离,只有如图c所示时才能被分辨开来。若物方两点成像在芯片上的距离如图a, 图b所示时,这两点都不能被分辨开来。因此镜头的像方分辨率=2x像元尺寸时,说明此时镜头分辨率与相机完全匹配。如相机像元尺寸为5um, 镜头放大倍率为0.5倍。则有Resolution(物)=2x5µm/0.5=20µ m时,镜头与相机完全匹配。若Resolution(物)<20µm,>20µm, 说明此时相机过好,镜头分辨率将成为系统限制。

另外,镜头的物方分辨率与产品的精度也常被工程师混淆。

精度指的是测量值与真实值之间的差异。如产品真实值为1.0mm, 要求精度为±5µm, 则说明只要测量出的值在0.995mm~1.005mm间即为合格品。在机器视觉中通常根据客户的FOV和精度要求算出相机的分辨率(如200万像素),相机一旦选定,则相机的像元尺寸(如4.65µm)也确定了。选镜头时即可根据上面的方法来选择分辨率匹配此相机的镜头,从而保证系统的精度要求。

而如果客户描述的是需要观察到物方大小为5µm的目标,则要求镜头的物方分辨率必须<10µm。

参考:
【1】https://www.dzoptics.com/blog/25-b116.html

相关文章:

优秀Java程序员应该知道的20个实用开源库

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解&#xff0c;包括JDK和第三方库。我花了很多时间学习API&#xff0c;特别是在阅读Effective Java 3rd Edition之后&#xff0c;Joshua Bloch建议如何使用现有的API进行开发&#xff0c;而不是为常用的东西写新的代…

sersync 同步

Sersync数据同步rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync&#xff0c;远程同步支持本地复制&#xff0c;或者与其他SSH、rsync主机同步。它的特性如下&#xff1a;v 可以镜像保存整个目录树和文件系统。v 可以很容易做到保持原…

python-opencv 形态学

五、形态学运算 检测边和 角点 形态学算子检测图像中的边缘和拐角&#xff08;实际用&#xff1a;Canny或Harris等算法&#xff09; 5.1 检测边缘 形态学检测边缘的原理&#xff1a;在膨胀时&#xff0c;图像中的物体会想周围“扩张”&#xff1b;腐蚀时&#xff0c;图像中的物…

【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)

https://vjudge.net/problem/HihoCoder-1082 暴力 #include <iostream> #include <cstring>using namespace std;char s[205];int main() {int i;while(gets(s)){i 0;int len strlen(s);while(i<len){if((s[i]m||s[i]M)&&(s[i1]a||s[i1]A)&&am…

java 多维数组转化为字符串

int[][] a {{1,2,3},{4,5,7}};System.out.println(Arrays.deepToString(a)); Arrays.deepToString()此方法是为了将多维数组转换为字符串而设计的。 三维二维都可以解决;转载于:https://www.cnblogs.com/lishuaiqi/p/10428612.html

python-opencv 轮廓检测

轮廓检测 图像处理中经常用到轮廓检测,OpenCV-python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 import cv2img cv2.imread(D:\\test\\contour.jpg) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY)…

JavaDate类

在JDK1.0中&#xff0c;Date类是唯一的一个代表时间的类&#xff0c;但是由于Date类不便于实现国际化&#xff0c;所以从JDK1.1版本开始&#xff0c;推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前系统时间Date d new Date();Sy…

Jupyter Notebook使用教程

1、启动 在终端中输入以下命令&#xff1a; jupyter notebook --allow-root执行命令之后&#xff0c;在终端中将会显示一系列notebook的服务器信息&#xff0c;同时浏览器将会自动启动Jupyter Notebook。 启动过程中终端显示内容如下&#xff1a; $ jupyter notebook [I 08…

一次性理清JavaScript变量等高难度面试问题

主要是解决JavaScript中比较难懂的部分&#xff0c;当然了&#xff0c;这部分经常在面试题中露面&#xff0c;这篇文章主要是讲解解题思路&#xff0c;对新手会有很大帮助&#xff08;如果你仔细看的话&#xff09;。书籍方面&#xff0c;我看的是《你不知道的javascript》,精髓…

yolov3(一:模型训练)

第一部分&#xff1a;训练已有的voc datasets 搞清楚该算法的模型训练流程 Darknet是Joseph维护的开源的神经网络框架&#xff0c;使用C语言编写&#xff1a;https://pjreddie.com/darknet/yolo/ Darknet快速&#xff0c;易于安装&#xff0c;同时支持CPU和GPU计算&#xff1…

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&…

【Python】SyntaxError: unexpected EOF while parsing

找到错误的地方是 少打了半个括号 emmm 1、可能是语法问题&#xff0c;需要自己检查代码 2、可能是用python2.7来运行python3.0的代码不兼容

华为云家庭视频监控帮你一起守护家

设想一下&#xff1f;离开家了突然想起家里空调没关怎么办&#xff1f;家里没人有陌生人入侵了怎么办&#xff1f;不在家家里老人出事了怎么办&#xff1f; 不用愁&#xff0c;总有办法解决的&#xff0c;这些日常生活中极容易遇到的事情&#xff0c;没有分身术的时候&#xff…

SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm

matlab 编译loransac&#xff0c;lapack mex ranH.c时一直链接错误。 原来mex在编译多个文件时要把所有的C文件都列出来。命令如下&#xff1a; mex loransacH.mex.c ranH.c utools.c Htools.c lapwrap.c matutl.c rtools.c -ID:\lapack\headers\lapack -LD:\lapack - lcbia.l…

【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)

http://codeforces.com/contest/1136/problem/C 第一个矩阵可否通过转置&#xff0c;变换成第二个矩阵&#xff0c;可以的话输出“YES”&#xff0c;不可以的话&#xff0c;输出“NO” 转置之后&#xff0c;对角线元素是不变的 用map&#xff0c;或者vector 都可以 #includ…

linux基础篇-02,linux时间管理date hwclock cal 简述

################################################时间管理1&#xff0c;date:系统时钟查看当前系统时间[rootJameszhan etc]# date2016年 11月 14日 星期一 20:16:37 CST################################################设定系统时间 2016年 07月 20日 星期三 10:30:00 CST…

Spark shuffle调优

Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区&#xff0c;从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就…

多传感器融合之滤波(一)——卡尔曼滤波(KF)推导

c参考资料&#xff1a;https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 卡尔曼滤波本质上是一个数据融合算法&#xff0c;将具有同样测量目的、来自不同传感器、(可能) 具有不同单位 (unit) 的数据融合在一起&#xff0c;得到一个更精确的目的测量值。 卡尔…

【HDU】1284 钱币兑换问题 (想一想)

http://acm.hdu.edu.cn/showproblem.php?pid1284 除以三&#xff0c;看最多能放多少个三分的硬币&#xff0c;加一表示全部都是一分的硬币着一种情况。之后用一个循环看一下&#xff0c;有多少种情况 因为确定了有几个三分&#xff0c;有几个两分&#xff0c;一分的也就自然…

抓取网页的脚本 【修复】

之前张耀老师的网页脚本由于51cto升级&#xff0c;课程列表页面改用javascript失效了笔者发现视频课程页面右边的列表都为静态化后的视频课程地址&#xff0c;遂将老师初始版本的脚本进行了修改&#xff0c;在对视频课程页面使用时结果正常&#xff0c;遂将及修改后的脚本和部分…

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别? 实例规格 共享计算型 和 通用型(原独享), 如果同样是2核4G 或者4核8G ; 性能上有什么差异/差距大吗? 内存型比通用性性能好些&#xff0c;而且CPU和内存配比&#xff1a; 通用型为1&#xff1a;2&…

yolov3(二:车牌识别)

0.按照&#xff1a;https://blog.csdn.net/Darlingqiang/article/details/103889245步骤训练自己的模型 1.下载[data.zip]&#xff1a;链接: https://pan.baidu.com/s/1NahLmB5YajUJT_Gk1OgN7A 提取码: 8888 2.进入data/voc目录下运行voc_label.bat重新生成2019_train.txt, 201…

[转]CSS hack大全详解

转自&#xff1a;CSS hack大全&详解 1、什么是CSS hack?CSS hack是通过在CSS样式中加入一些特殊的符号&#xff0c;让不同的浏览器识别不同的符号&#xff08;什么样的浏览器识别什么样的符号是有标准的&#xff0c;CSS hack就是让你记住这个标准&#xff09;&#xff0c;…

【Python】打印魔方阵

1.将“1”放在第一行&#xff0c;中间一列&#xff1b; 2.从2开始至N*N各数按如下规律&#xff1a; 每一个数存放的行比上一个数的行减1&#xff1b; 每一个数存放的列比上一个数的列加1&#xff1b; 3.当一个数行为1&#xff0c;下一个数行为N; 4.当一个数列数为N,下一个…

读书笔记:《图解HTTP》第三章 HTTP报文

原文地址博客积累地址 HTTP报文的作用 HTTP报文时是HTTP进行请求和响应时用来交换信息的&#xff0c;可以理解它为搬东西的包裹&#xff0c;来搬运交换的信息报文流 HTTP报文在HTTP应用程序&#xff08;客户端、服务器、代理&#xff09;之间发送数据块&#xff0c;这些数据块以…

在Web.config或App.config中的添加自定义配置

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持。最近看到一些项目中还在自定义xml文件做程序的配置&#xff0c;所以忍不住写一篇用系统自定义配置的随笔了。 如果你已经对自定义配置了如指掌&#xff0c;请忽略这篇文章…

yolov3(三:算法框架解析)

应用见&#xff1a; https://blog.csdn.net/Darlingqiang/article/details/103889245 https://blog.csdn.net/Darlingqiang/article/details/104040582 首先通过一些简单的应用实现去理解yolov3的网络框架&#xff0c;接着让我们开始对yolov3的网络框架解析之旅。 首先&…

【牛客】简单排序 (STL)

https://ac.nowcoder.com/acm/contest/547/F 首先将一系列数存入到数组中&#xff0c;然后利用set的upper_bound返回第一个大于他的函数&#xff0c;如果存在这样的&#xff0c;就把大于他的那个数删除&#xff0c;加入这个新的数&#xff0c;否则就表示序列中没有大于他的数&…

python基础04

python基础04 python2在编译安装时&#xff0c;可以通过参数 -----enable----unicodeucs2 或 -----enable--unicodeucs4 分别用于指定使用2个字节&#xff0c;4个字节表示一个Unicode字符。python3无法进行选择&#xff0c;默认使用usc4. 查看当前python中表示Unicode字符串时占…

【Java】字符串(一)

目录 一、创建字符串 二、连接字符串 连接多个字符串 连接其他数据类型 三、获取字符串的信息 获取字符串的长度 字符串查找 获取指定索引位置的字符 四、字符串操作 获取子字符串 去除空格 字符串的替换 判断字符串是否相等 按字典顺序比较两个字符串 字母大小…