当前位置: 首页 > news >正文

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

图片

机器视觉系统的设计

机器视觉系统集成是将各种不同的组件和子系统组合在一起并使它们充当单个统一系统的过程。

视觉系统集成包括光源,镜头,相机,相机接口和图像处理软件等等。您可能想知道如何设计和实现一个完整,成功的机器视觉系统。

在本文中,我们将讨论构成机器视觉系统集成的广泛任务的通用部分,然后重点介绍使用基本机器视觉应用程序的真实示例进行系统设计的分步过程。

从根本上说,“系统集成”是将各种不同的组件和子系统组合在一起并使它们作为单个统一系统运行的过程。不同的视觉系统实现的步骤,阶段和相关术语会相差很大。

一般来说,对于机器视觉中的整个系统集成过程,步骤可能包括:

第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)

&#xff01;&#xff01;&#xff01;Vue防抖节流方法&#xff1a;VUE使用节流和防抖_vue防抖节流_停留的章小鱼的博客-CSDN博客 新建js文件directive.js: // directive.js // 防重复点击(指令实现) //使用&#xff1a; 在需要的按钮中加 v-repeatClick 指令即可 <el-but…...

高频高速板行业现状及市场前景

覆铜板全称为覆铜箔层压板&#xff0c;是由增强材料浸以树脂胶液 , 覆以铜箔 , 经热压而成的一种板状材料。覆铜板是制作印制电路板的核心材料&#xff0c;担负着印制电路板导电、绝缘、支撑三大功能。高频高速电路板有介电常数小且稳定、介质损耗小、传输损耗小等特点。 高频…...

【练手】自定义注解+AOP

在SpringBoot中实现自定义注解&#xff1a;( 声明注解的作用级别以及保留域 ) Target({ElementType.METHOD,ElementType.PARAMETER}) //注解的作用级别 Retention(RetentionPolicy.RUNTIME) //注解的保留域 public interface Log {int value() default 99; }在…...

QComboBox添加样式后,编辑栏背景一直白色问题解决方法。

一、QComboBox样式 /* 未下拉时&#xff0c;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中&#xff0c;有多种方法可以动态添加样式。下面介绍几种常用的方法&#xff1a; 1. 使用动态绑定的方式&#xff1a; 可以使用:style指令将一个对象作为值传递给它&#xff0c;对象的属性名表示要设置的样式属性&#xff0c;属性值表示要设置的样式值。例如&#xff1…...

Rpc原理

dubbo原理 1、RPC原理 一次完整的RPC调用流程&#xff08;同步调用&#xff0c;异步另说&#xff09;如下&#xff1a; 1&#xff09;服务消费方&#xff08;client&#xff09;调用以本地调用方式调用服务&#xff1b; 2&#xff09;client stub接收到调用后负责将方法、参数…...

yapi容器化docker部署以及mongodb容器的持久化挂载异常问题

概述 通过docker形式部署yapi&#xff0c;需要准备一个mongodb&#xff0c;然后直接在一个空文件夹里写好Dockerfile&#xff0c;其中通过wget下载yapi的zip包。 基本按照这篇文章&#xff1a;https://www.modb.pro/db/149666 来处理即可 1. 准备mongodb 把mongodb的docker…...

MyBatis-XML映射文件

XML映射文件 规范 XML映射文件的名称与Mapper接口名称一致&#xff08;EmpMapper对应EmpMpper.xml&#xff09;&#xff0c;并且将XML映射文件和Mapper接口放置在相同包下&#xff08;同包同名&#xff09; ​​​ 在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的类成员称为类的静态成员&…...

安卓:实现复制粘贴功能

目录 一、介绍 &#xff08;一&#xff09;ClipboardManager介绍 1、ClipboardManager常用方法&#xff1a; 2、获取 ClipboardManager实例 &#xff08;二&#xff09;、ClipData介绍 1、创建ClipData对象&#xff1a; 2、获取ClipData的信息&#xff1a; 3、ClipData…...

jenkins pipeline项目

回到目录 将练习jenkins使用pipeline项目&#xff0c;结合k8s发布一个简单的springboot项目 前提&#xff1a;jenkins的环境和k8s环境都已经安装完成&#xff0c;提前准备了gitlab和一个简单的springboot项目 创建一个流水线项目 流水线中选择git&#xff0c;并选择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&#xff0c;点击Add New data source&#xff0c;填写Promitheus Server Url,点击 save & test完成配置 添加DashBorad 选择prometheus数据库选择code填入对应的查询公式(监控公式参考Prometheus监控公式)修改面板名称Ti…...

【网络】每天掌握一个Linux命令 - iftop

在Linux系统中&#xff0c;iftop是网络管理的得力助手&#xff0c;能实时监控网络流量、连接情况等&#xff0c;帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

自然语言处理——循环神经网络

自然语言处理——循环神经网络 循环神经网络应用到基于机器学习的自然语言处理任务序列到类别同步的序列到序列模式异步的序列到序列模式 参数学习和长程依赖问题基于门控的循环神经网络门控循环单元&#xff08;GRU&#xff09;长短期记忆神经网络&#xff08;LSTM&#xff09…...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

2025季度云服务器排行榜

在全球云服务器市场&#xff0c;各厂商的排名和地位并非一成不变&#xff0c;而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势&#xff0c;对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析&#xff1a; 一、全球“三巨头”…...

【Go语言基础【13】】函数、闭包、方法

文章目录 零、概述一、函数基础1、函数基础概念2、参数传递机制3、返回值特性3.1. 多返回值3.2. 命名返回值3.3. 错误处理 二、函数类型与高阶函数1. 函数类型定义2. 高阶函数&#xff08;函数作为参数、返回值&#xff09; 三、匿名函数与闭包1. 匿名函数&#xff08;Lambda函…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案

在大数据时代&#xff0c;海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构&#xff0c;在处理大规模数据抓取任务时展现出强大的能力。然而&#xff0c;随着业务规模的不断扩大和数据抓取需求的日益复杂&#xff0c;传统…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

系统掌握PyTorch:图解张量、Autograd、DataLoader、nn.Module与实战模型

本文较长&#xff0c;建议点赞收藏&#xff0c;以免遗失。更多AI大模型应用开发学习视频及资料&#xff0c;尽在聚客AI学院。 本文通过代码驱动的方式&#xff0c;系统讲解PyTorch核心概念和实战技巧&#xff0c;涵盖张量操作、自动微分、数据加载、模型构建和训练全流程&#…...