机器视觉系统设计:基础知识

机器视觉系统的设计
机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。
视觉系统集成包括光源,镜头,相机,相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整,成功的机器视觉系统。
在本文中,我们将讨论构成机器视觉系统集成的广泛任务的通用部分,然后重点介绍使用基本机器视觉应用程序的真实示例进行系统设计的分步过程。
从根本上说,“系统集成”是将各种不同的组件和子系统组合在一起并使它们作为单个统一系统运行的过程。不同的视觉系统实现的步骤,阶段和相关术语会相差很大。
一般来说,对于机器视觉中的整个系统集成过程,步骤可能包括:
第1部分–准备:初步分析和项目需求规范。
第2部分–设计:详细的最终技术/系统规范。
第3部分–实施:组装/构建/初始测试
第4部分–部署:交付/安装/启动和验收测试。
但是,在此讨论中,我们将仅专注于非常关键且有时很复杂的“设计”阶段,以及它如何进入“实施”阶段。这是按执行顺序进行设计的基本顺序:
-
选择相机
-
选择镜头
-
选择光源
-
采集一些图像以验证成像
-
选择计算机(如果使用智能相机则不需要)
-
开发程序(图像处理,操作员界面等)
-
将所有内容结合在一起,开始测试和优化
在开始设计之前,您需要有一个已经过全面审查的“需求规范”,它标识了系统必须执行的操作以及它将如何运行,“验收测试”文档详细说明了如何验证系统,并进行系统功能演示测试。事先应进行适当的评估,以确认建议的机器视觉设计和组件将能够满足要求的需求。
同样重要的是要认识到,在任何学科中进行整合都是团队活动。在机器视觉中,它始于客户和系统集成团队(公司内部或外部)。系统集成团队必须具备光学,照明,电子,控制,编程,机械设计和项目管理等技能,并且可能还具有其他技能,例如机器人技术,运动控制,文档和培训。
鉴于所有这些都已经准备就绪,是时候从组件选择开始着手进行系统设计了。

系统设计:组件选择和规格

相机选择
我们将使用“相机”一词来广泛地描述执行图像采集的机器视觉系统中的组件。相机的基本规格受物体的特征检测,识别,位置或测量的要求以及处理速度(以及其他一些注意事项)的驱动。根据需求,确定应用程序所需的空间分辨率,图像分辨率和帧速率。
-
空间分辨率
通过处理的最小特征的像素数或必须达到的测量精度/可重复性,或两者来确定空间分辨率。
举例来说,从规格上,您需要检测一个直径为0.3mm的小孔。从理论上讲,两个像素就足够了,但是经验告诉我们,只有两个像素是不可靠的。需要三个,四个或更多像素来覆盖小孔的特征。如果您说需要四个像素,则您的空间分辨率为0.3毫米除以四个像素,为0.075毫米/像素。
在测量应用程序中,您会使用一种算法,可以达到亚像素精度的可重复性。亚像素究竟有多小,取决于多种因素,包括图像中要测量的特征的大小(可以以更高的精度测量较大的特征),测量的特征与其背景的对比度以及相机噪声。实际可达到的子像素分辨率取决于具体应用。有实际经验表明,亚像素精度下限约为像素的十分之一。
假设您需要测量0.01mm的精度(可重复性),并且根据经验或一些实验,您认为该算法的重复精度可以做到像素的五分之一。然后,您所需的空间分辨率为0.01mm除以1/5像素,则系统所需的空间分辨率为0.05mm /像素。
如果您同时对最小特征的像素数或必须达到的测量精度/可重复性有要求,可以同时计算空间分辨率并选择较小的结果。
-
图像分辨率
所需的图像分辨率就是实现我们的计算所确定的空间分辨率所需的像素列数和行数。定义成像区域(“视场” / FOV),将FOV除以空间分辨率。例如,如果我们指定了133x133mm的视野,而空间分辨率(根据我们的计算)为.075mm /像素,那么我们的图像分辨率为133mm除以.075mm /像素,则宽度和高度均为1,733像素。
选择像素行和列计数等于或大于您计算的摄像机。在此示例中,您可能会考虑使用图像传感器像素尺寸为3.45um,分辨率为2448x2448的相机。
-
成像帧率
相机选择的最后一个基本步骤是验证候选相机是否可以达到适用于指定应用程序的图像帧速率(每秒帧数),并从选择合适的图像采集接口(“智能摄像机”不需要)。大多数基本的通用机器视觉应用程序的工件吞吐量都相对较低(每秒10-15个零件,并且通常要慢得多)。实现高成像速率应用程序的细节不在此讨论的范围内,但一定要意识到分辨率越高,成像帧率越慢。

镜头选择
决定镜头选择的基本因素包括:镜头格式,所需的视场,成像组件从物体到图像的距离(工作距离/ WD)以及所需的光学分辨率。在我们的讨论中,我们将考虑选择“固定焦距”镜头。(其他更专业的镜头,例如“远心”镜头在许多机器视觉应用中很有用,但这将用于另一次讨论。)镜头规格的选择包含三个相关计算:光学分辨率,放大倍数(也称为PMAG)和对镜头的焦距。
-
镜头属性
镜头属性就是标明制造厂商、镜头卡口型号以及适用什么图像传感器尺寸等等
-
光学分辨率
此度量标准有助于评估镜头清晰地再现被摄景物纤微细节的能力,是评价镜头质量的一个重要参数。(这是一个很好的出发点,尽管可以使用许多其他附加措施来比较镜头。)图像传感器的目标光学分辨率为1线/(2 *像素大小,单位为mm);在我们的示例中为1 /(2 * 0.00345)大约为145lp / mm。
-
放大倍率
镜头将所需的FOV转换或“放大”,并将其“投影”到相机传感器上。通过将FOV的短边尺寸除以传感器的短边物理尺寸,可以计算出特定FOV所需的放大倍数。例如,根据上面的讨论,传感器短边尺寸为7.07mm,FOV为133mm,推导所需的放大倍数(M)为约0.053x。
最后,要获得镜头焦距(f)的估计值,可以使用供应商提供的镜头参数对照表或镜头计算器或公式。
对于我们的示例,假设工作距离(WD)约为500mm,得出焦距为25.17mm。然后,我们最终的镜头选择可能是25mm焦距,具有160线对/ mm的光学分辨率和C型卡口。

照明选择
机器视觉照明的目标是在工件及其背景之间产生对比度。有大量关于机器视觉照明技术的文献参考,以及每种技术在什么条件下都能很好地工作。

评估和最终设计

图像评估和测试
在致力于构建完整的系统之前,证明您的设计非常重要。通常,可行性测试期间,会发现设计中的缺陷,在投入更多时间和金钱之前迅速纠正设计缺陷,之后再进行更改会更加昂贵和耗时。
为了进行测试,请使用设计中的实际相机,镜头和光源。并使用多个实物样本进行成像,以代表在实际生产中将出现的变化。如果需要,使用与生产环境等效的零件外观模型,并包括预期的外观变化。
基本评估应实现以下目标:
-
确认镜头和相机在所需的WD处产生正确的FOV
-
确认成像系统(相机,镜头,照明)相对于应用程序需求,创建了高质量(对比度和特征清晰度)图像。
-
检查系统分辨率是否产生了预期的需求定义,并适合于应用程序。
-
评估基本处理(缺陷检测,测量等),以确认预期的系统功能
当然,在整个测试和评估过程中,可能有必要重新考虑组件的选择。在需要的地方,重新评估组件的选择,以找到可提供更高质量图像的组件。

电脑/处理器
如果您为相机选择了智能相机,那么您已经选择了处理器。否则,您可以选择专用处理器(集成了处理器,操作系统和机器视觉软件的专用处理器),工业PC或在某些不太苛刻的环境中可以正常工作的标准PC,确保处理器具有相机和/或其他外部设备所需的接口,以及具有以目标速率处理结果的计算能力。

系统设计:文档
设计的最后一步是对其进行记录。可以收集的有关成像设计的数据将帮助您进行故障排除和复制。

其他设计注意事项
机器视觉系统作为独立组件集成的确很少见。至少要进行机械设计才能实现;可能设计和构建完整的自动化系统。其他自动化组件也可能会起作用,包括PLC,机器人和其他设备。

结论
设计阶段自然会演变为实施阶段:组装,构建和测试。这是一个反复的过程,在设计和构建阶段之间会有重叠。在集成期间,请考虑一个总体规则:测试,优化/调整,重复。希望本机器视觉集成设计的基本介绍将帮助您在下一个机器视觉项目中取得成功。
相关文章:
机器视觉系统设计:基础知识
机器视觉系统的设计 机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。 视觉系统集成包括光源,镜头,相机,相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整,成功的机器视…...
C# Blazor 学习笔记(11):路由跳转和信息传值
文章目录 前言路由跳转测试用例路由传参/路由约束想法更新:2023年8月4日 前言 Blazor对路由跳转进行了封装。 ASP.NET Core Blazor 路由和导航 NavigationManager 类 本文的主要内容就是全局的跳转 路由跳转 路由跳转就要用到NavigationManager 类。 其实最常用…...
Centos 7 安装 Python 时 zlib not available 错误解决
Centos 7 安装 Python 时 zlib not available 错误解决 报错信息, zipimport.ZipImportError: cant decompress data; zlib not available解决方法, sudo yum install -y zlib zlib-devel完结!...
python sqllite基本操作
以下是一些基本的SQLite3操作: 连接到数据库:使用sqlite3.connect()函数连接到数据库,返回一个Connection对象,我们就是通过这个对象与数据库进行交互。例如: import sqlite3 conn sqlite3.connect(example.db)创建…...
记录--基于css3写出的流光登录(注释超详细!)
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 完整效果 对基本的表单样式进行设置 这里设置了基本的表单样式,外层用了div进行包裹,重点是运用了两个i元素在后期通过css样式勾画出一条线没在聚焦文本框的时候线会过度成一个…...
【测试设计】性能测试工具选择:wrk?jmeter?locust?还是LR?
目录 前言 wrk 优点 缺点 jmeter 优点 缺点 locust 优点 缺点 总结 资料获取方法 前言 当你想做性能测试的时候,你会选择什么样的测试工具呢?是会选择wrk?jmeter?locust?还是loadrunner呢? 今…...
为什么升级JDK 11后堆外内存使用增长了?
文章首发地址 JDK 11堆外使用增长的原因 JDK 11堆外使用增长的原因可能有以下几个: G1垃圾回收器的默认设置更改: JDK 11中的G1垃圾回收器默认开启了堆外内存分配,以减少Full GC时的STW时间。因此,如果应用程序使用了G1垃圾回收…...
Vue自定义防重复点击指令(v-repeatClick)
!!!Vue防抖节流方法:VUE使用节流和防抖_vue防抖节流_停留的章小鱼的博客-CSDN博客 新建js文件directive.js: // directive.js // 防重复点击(指令实现) //使用: 在需要的按钮中加 v-repeatClick 指令即可 <el-but…...
高频高速板行业现状及市场前景
覆铜板全称为覆铜箔层压板,是由增强材料浸以树脂胶液 , 覆以铜箔 , 经热压而成的一种板状材料。覆铜板是制作印制电路板的核心材料,担负着印制电路板导电、绝缘、支撑三大功能。高频高速电路板有介电常数小且稳定、介质损耗小、传输损耗小等特点。 高频…...
【练手】自定义注解+AOP
在SpringBoot中实现自定义注解:( 声明注解的作用级别以及保留域 ) Target({ElementType.METHOD,ElementType.PARAMETER}) //注解的作用级别 Retention(RetentionPolicy.RUNTIME) //注解的保留域 public interface Log {int value() default 99; }在…...
QComboBox添加样式后,编辑栏背景一直白色问题解决方法。
一、QComboBox样式 /* 未下拉时,QComboBox的样式 */ QComboBox {border: 1px solid gray; /* 边框 */border-radius: 3px; /* 圆角 */padding: 1px 18px 1px 3px; /* 字体填衬 */color: #000;font: normal normal 15px "Microsoft YaHei";backgrou…...
vue动态绑定多个class以及带上三元运算或其他条件
在Vue中,有多种方法可以动态添加样式。下面介绍几种常用的方法: 1. 使用动态绑定的方式: 可以使用:style指令将一个对象作为值传递给它,对象的属性名表示要设置的样式属性,属性值表示要设置的样式值。例如࿱…...
Rpc原理
dubbo原理 1、RPC原理 一次完整的RPC调用流程(同步调用,异步另说)如下: 1)服务消费方(client)调用以本地调用方式调用服务; 2)client stub接收到调用后负责将方法、参数…...
yapi容器化docker部署以及mongodb容器的持久化挂载异常问题
概述 通过docker形式部署yapi,需要准备一个mongodb,然后直接在一个空文件夹里写好Dockerfile,其中通过wget下载yapi的zip包。 基本按照这篇文章:https://www.modb.pro/db/149666 来处理即可 1. 准备mongodb 把mongodb的docker…...
MyBatis-XML映射文件
XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致(EmpMapper对应EmpMpper.xml),并且将XML映射文件和Mapper接口放置在相同包下(同包同名) 在maven项目结构中所有的配置文件都在resources目录之下&…...
C++类和对象入门(下)
C类和对象入门 1. Static成员1.1 Static成员的概念2.2 Static成员的特性 2.友元2.1 友元函数2.2 友元函数的特性2.3 友元类 3. 内部类3.1 内部类的概念和特性 4. 匿名对象5. 再次理解类和对象 1. Static成员 1.1 Static成员的概念 声明为static的类成员称为类的静态成员&…...
安卓:实现复制粘贴功能
目录 一、介绍 (一)ClipboardManager介绍 1、ClipboardManager常用方法: 2、获取 ClipboardManager实例 (二)、ClipData介绍 1、创建ClipData对象: 2、获取ClipData的信息: 3、ClipData…...
jenkins pipeline项目
回到目录 将练习jenkins使用pipeline项目,结合k8s发布一个简单的springboot项目 前提:jenkins的环境和k8s环境都已经安装完成,提前准备了gitlab和一个简单的springboot项目 创建一个流水线项目 流水线中选择git,并选择gitlab的…...
机器学习笔记 - YOLO-NAS 最高效的目标检测算法之一
一、YOLO-NAS概述 YOLO(You Only Look Once)是一种对象检测算法,它使用深度神经网络模型,特别是卷积神经网络,来实时检测和分类对象。该算法首次在 2016 年由 Joseph Redmon、Santosh Divvala、Ross Girshick 和 Ali Farhadi 发表的论文《You Only Look Once: Unified, Re…...
Grafana集成prometheus(3.Grafana添加promethus数据)
添加数据库 选择Connections -> Datasources,点击Add New data source,填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…...
使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式
一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...
Linux 文件类型,目录与路径,文件与目录管理
文件类型 后面的字符表示文件类型标志 普通文件:-(纯文本文件,二进制文件,数据格式文件) 如文本文件、图片、程序文件等。 目录文件:d(directory) 用来存放其他文件或子目录。 设备…...
2025年能源电力系统与流体力学国际会议 (EPSFD 2025)
2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...
DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI
前一阵子在百度 AI 开发者大会上,看到基于小智 AI DIY 玩具的演示,感觉有点意思,想着自己也来试试。 如果只是想烧录现成的固件,乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外,还提供了基于网页版的 ESP LA…...
项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
算法:模拟
1.替换所有的问号 1576. 替换所有的问号 - 力扣(LeetCode) 遍历字符串:通过外层循环逐一检查每个字符。遇到 ? 时处理: 内层循环遍历小写字母(a 到 z)。对每个字母检查是否满足: 与…...
MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
云原生安全实战:API网关Kong的鉴权与限流详解
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 一、基础概念 1. API网关(API Gateway) API网关是微服务架构中的核心组件,负责统一管理所有API的流量入口。它像一座…...
[免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
大家好,我是java1234_小锋老师,看到一个不错的微信小程序问卷调查系统(SpringBoot后端Vue管理端)【论文源码SQL脚本】,分享下哈。 项目视频演示 【免费】微信小程序问卷调查系统(SpringBoot后端Vue管理端) Java毕业设计_哔哩哔哩_bilibili 项…...
