机器视觉系统设计:基础知识
机器视觉系统的设计
机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。
视觉系统集成包括光源,镜头,相机,相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整,成功的机器视觉系统。
在本文中,我们将讨论构成机器视觉系统集成的广泛任务的通用部分,然后重点介绍使用基本机器视觉应用程序的真实示例进行系统设计的分步过程。
从根本上说,“系统集成”是将各种不同的组件和子系统组合在一起并使它们作为单个统一系统运行的过程。不同的视觉系统实现的步骤,阶段和相关术语会相差很大。
一般来说,对于机器视觉中的整个系统集成过程,步骤可能包括:
第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. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明:假设每台服务器已…...

springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)
概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…...
c++ 面试题(1)-----深度优先搜索(DFS)实现
操作系统:ubuntu22.04 IDE:Visual Studio Code 编程语言:C11 题目描述 地上有一个 m 行 n 列的方格,从坐标 [0,0] 起始。一个机器人可以从某一格移动到上下左右四个格子,但不能进入行坐标和列坐标的数位之和大于 k 的格子。 例…...

1.3 VSCode安装与环境配置
进入网址Visual Studio Code - Code Editing. Redefined下载.deb文件,然后打开终端,进入下载文件夹,键入命令 sudo dpkg -i code_1.100.3-1748872405_amd64.deb 在终端键入命令code即启动vscode 需要安装插件列表 1.Chinese简化 2.ros …...
Spring Boot+Neo4j知识图谱实战:3步搭建智能关系网络!
一、引言 在数据驱动的背景下,知识图谱凭借其高效的信息组织能力,正逐步成为各行业应用的关键技术。本文聚焦 Spring Boot与Neo4j图数据库的技术结合,探讨知识图谱开发的实现细节,帮助读者掌握该技术栈在实际项目中的落地方法。 …...

涂鸦T5AI手搓语音、emoji、otto机器人从入门到实战
“🤖手搓TuyaAI语音指令 😍秒变表情包大师,让萌系Otto机器人🔥玩出智能新花样!开整!” 🤖 Otto机器人 → 直接点明主体 手搓TuyaAI语音 → 强调 自主编程/自定义 语音控制(TuyaAI…...