什么是机器视觉?有人能解释一下吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了什么是机器视觉?有人能解释一下吗?相关的知识,希望对你有一定的参考价值。
机器视觉,就是用机器代替人眼来做测量和判断。机器视觉系统是指通过机器视觉产品(即图像摄取装置,分 CMOS 和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统,根据像素分布和亮度、颜色等信息,转变成数字化信号;图像系统对这些信号进行各种运算来抽取目标的特征,进而根据判别的结果来控制现场的设备动作。
日弘智能视觉系统组成部分:
1.照明光源2.镜头3.工业摄像机4.图像采集/处理卡5.图像处理系统6.其它外部设备
一、相机篇
工业相机又俗称摄像机,相比于传统的民用相机(摄像机)而言,它具有高的图像稳定性、高传输能力和高抗干扰能力等,目前市面上工业相机大多是基于CCD(Charge
Coupled Device)或CMOS(Complementary Metal Oxide Semiconductor)芯片的相机。
其中,CCD是目前机器视觉最为常用的图像传感器。它集光电转换及电荷存贮、电荷转移、信号读取于一体,是典型的固体成像器件。
CCD的突出特点是以电荷作为信号,而不同于其它器件是以电流或者电压为信号。这类成像器件通过光电转换形成电荷包,而后在驱动脉冲的作用下转移、放大输出图像信号。
典型的CCD相机由光学镜头、时序及同步信号发生器、垂直驱动器、模拟/数字信号处理电路组成。CCD作为一种功能器件,与真空管相比,具有无灼伤、无滞后、低电压工作、低功耗等优点。
CMOS图像传感器的开发则最早出现在20世纪70 年代初,90 年代初期,随着超大规模集成电路 (VLSI)
制造工艺技术的发展,CMOS图像传感器得到迅速发展。
CMOS图像传感器将光敏元阵列、图像信号放大器、信号读取电路、模数转换电路、图像信号处理器及控制器集成在一块芯片上,还具有局部像素的编程随机访问的优点。
目前,CMOS图像传感器以其良好的集成性、低功耗、高速传输和宽动态范围等特点在高分辨率和高速场合得到了广泛的应用。
分类:
任何东西一定有它自己的分类标准,工业相机也不例外。
按照芯片类型可以分为CCD相机、CMOS相机;
按照传感器的结构特性可以分为线阵相机、面阵相机;
按照扫描方式可以分为隔行扫描相机、逐行扫描相机;
按照分辨率大小可以分为普通分辨率相机、高分辨率相机;
按照输出信号方式可以分为模拟相机、数字相机;
按照输出色彩可以分为单色(黑白)相机、彩色相机;
按照输出信号速度可以分为普通速度相机、高速相机;
按照响应频率范围可以分为可见光(普通)相机、红外相机、紫外相机等。
区别:
1、性能稳定可靠易于安装,相机结构紧凑结实不易损坏,连续工作时间长,可在较差的环境下使用,一般的数码相机是做不到这些的。例如:让民用数码相机一天工作24小时或连续工作几天肯定会受不了的。
2、快门时间非常短,可以抓拍高速运动的物体。例如,把名片贴在电风扇扇叶上,以最大速度旋转,设置合适的快门时间,用工业相机抓拍一张图像,仍能够清晰辨别名片上的字体。用普通的相机来抓拍,是不可能达到同样效果的。
3、图像传感器是逐行扫描的,而普通的相机的图像传感器是隔行扫描的,
逐行扫描的图像传感器生产工艺比较复杂,成品率低,出货量少,世界上只有少数公司能够提供这类产品,例如Dalsa、Sony,而且价格昂贵。
4、帧率远远高于普通相机。工业相机每秒可以拍摄十幅到几百幅图片,而普通相机只能拍摄2-3幅图像,相差较大。
5、输出是裸数据(raw data),其光谱范围也往往比较宽,比较适合进行高质量的图像处理算法,例如机器视觉(Machine
Vision)应用。而普通相机拍摄的图片,其光谱范围只适合人眼视觉,并且经过了mjpeg压缩,图像质量较差,不利于分析处理。
6、相对普通相机(DSC)来说价格较贵。
如何选择:
1、根据应用的不同分别选用CCD或CMOS相机CCD工业相机主要应用在运动物体的图像提取,如贴片机机器视觉,当然随着CMOS技术的发展,许多贴片机也在选用CMOS工业相机。用在视觉自动检查的方案或行业中一般用CCD工业相机比较多。CMOS工业相机由成本低,功耗低也应用越来越广泛。
2、分辨率的选择首先考虑待观察或待测量物体的精度,根据精度选择分辨率。相机像素精度=单方向视野范围大小/相机单方向分辨率。则相机单方向分辨率=单方向视野范围大小/理论精度。若单视野为5mm长,理论精度为0.02mm,则单方向分辨率=5/0.02=250。然而为增加系统稳定性,不会只用一个像素单位对应一个测量/观察精度值,一般可以选择倍数4或更高。这样该相机需求单方向分辨率为1000,选用130万像素已经足够。
其次看工业相机的输出,若是体式观察或机器软件分析识别
,分辨率高是有帮助的;若是VGA输出或USB输出,在显示器上观察,则还依赖于显示器的分辨率,工业相机的分辨率再高,显示器分辨率不够,也是没有意义的;利用存储卡或拍照功能,工业相机的分辨率高也是有帮助的。
3、与镜头的匹配传感器芯片尺寸需要小于或等于镜头尺寸,C或CS安装座也要匹配(或者增加转接口)。
4、相机帧数选择当被测物体有运动要求时,要选择帧数高的工业相机。但一般来说分辨率越高,帧数越低。
二、镜头篇
镜头的基本功能就是实现光束变换(调制),在机器视觉系统中,镜头的主要作用是将成像目标在图像传感器的光敏面上。镜头的质量直影响到机器视觉系统的整体性能,合理地选择和安装镜头,是机器视觉系统设计的重要环节。
基础知识:
1、镜头匹配
大家如何选择合适镜头,镜头选配时需要选择与摄像机接口和CCD的尺寸相匹配的镜头。镜头C和CS的接口方式占主流。小型的安防用的CS接口摄像机得到普及、FA行业则大部分是C接口的摄像机与镜头的组合。对应的CCD尺寸、市场上一般根据用途使用2/3寸到1/3寸的产品。
2、互换性
C接口镜头可以与C接口摄像机、CS接口摄像机互用;CS接口镜头不可以应用在C接口摄像机,只可以应用在CS接口摄像机。
3、KERARE
摄像机如果使用配备小CCD尺寸的镜头,那么周边没有摄取到图像的部分呈现出黑色,我们称其为KERARE。
4、镜头的作用:
将折射率不同的各种硝材通过研磨,加工成高精度的曲面、把这些镜头进行组合,就是设计镜头。从伽利略时代开始使用的普遍技术是其基本原理。为得到更清晰的图像,一直在研究开发试制新的硝材和非球面镜片。
三、光源篇
LED光源、卤素灯(光纤光源)、高频荧光灯。目前LED光源最常用,主要有如下几个特点:
可制成各种形状、尺寸及各种照射角度;
可根据需要制成各种颜色,并可以随时调节亮度;
通过散热装置,散热效果更好,光亮度更稳定;
使用寿命长;
反应快捷,可在10微秒或更短的时间内达到最大亮度;
电源带有外触发,可以通过计算机控制,起动速度快,可以用作频闪灯;
运行成本低、寿命长的LED,会在综合成本和性能方面体现出更大的优势;
可根据客户的需要,进行特殊设计。
LED光源按形状通常可分为以下几类:
1、环形光源环形光源提供不同照射角度、不同颜色组合,更能突出物体的三维信息;高密度LED阵列,高亮度;多种紧凑设计,节省安装空间;解决对角照射阴影问题;可选配漫射板导光,光线均匀扩散。应用领域:PCB基板检测,IC元件检测,显微镜照明,液晶校正,塑胶容器检测,集成电路印字检查。
2、背光源用高密度LED阵列面提供高强度背光照明,能突出物体。的外形轮廓特征,尤其适合作为显微镜的载物台。红白两用背光源、红蓝多用背光源,能调配出不同颜色,满足不同被测物多色要求。应用领域:机械零件尺寸的测量,电子元件、IC的外型检测,胶片污点检测,透明物体划痕检测等。
3、条形光源条形光源是较大方形结构被测物的首选光源;颜色可根据需求搭配,自由组合;照射角度与安装随意可调。应用领域:金属表面检查,图像扫描,表面裂缝检测,LCD面板检测等。
4、同轴光源同轴光源可以消除物体表面不平整引起的阴影,从而减少干扰;部分采用分光镜设计,减少光损失,提高成像清晰度,均匀照射物体表面。应用领域:系列光源最适宜用于反射度极高的物体,如金属、玻璃、胶片、晶片等表面的划伤检测,芯片和硅晶片的破损检测,Mark点定位,包装条码识别。
5、AOI专用光源不同角度的三色光照明,照射凸显焊锡三维信息;外加漫射板导光,减少反光;不同角度组合;应用领域:用于电路板焊锡检测。
6、球积分光源具有积分效果的半球面内壁,均匀反射从底部360度发射出的光线,使整个图像的照度十分均匀。应用领域:合于曲面,表面凹凸,弧形表面检测,或金属、玻璃表面反光较强的物体表面检测。
7、线形光源超高亮度,采用柱面透镜聚光,适用于各种流水线连续检测场合。应用领域:阵相机照明专用,AOI专用。
8、点光源大功率LED,体积小,发光强度高;光纤卤素灯的替代品,尤其适合作为镜头的同轴光源等;高效散热装置,大大提高光源的使用寿命。应用领域:适合远心镜头使用,用于芯片检测,Mark点定位,晶片及液晶玻璃底基校正。
9、组合条形光源四边配置条形光,每边照明独立可控;可根据被测物要求调整所需照明角度,适用性广。应用案例:CB基板检测,IC元件检测,焊锡检查,Mark点定位,显微镜照明,包装条码照明,球形物体照明等。
10、对位光源对位速度快;视场大;精度高;体积小,便于检测集成;亮度高,可选配辅助环形光源。应用领域:VA系列光源是全自动电路板印刷机对位的专用光源。
四、光源的选型
1、前提信息
(1)检测内容外观检查、OCR、尺寸测定、定位
(2)对象物
想看什么?(异物、伤痕、缺损、标识、形状等)
表面状态(镜面、糙面、曲面、平面)
立体?平面?
材质、表面颜色
视野范围?
动态还是静态(相机快门速度)
(3)限制条件
工作距离(镜头下端到被测物表面距离)
设置条件(照明的大小、照明下端到被测物表面的距离、反射型or透射型)
周围环境(温度、外乱光)
相机的种类,面阵or线阵
2、简单的预备知识:
(1).因材质和厚度不同、对光的透过特性(透明度)各异。(2).光根拠其波长之长短、对物质的穿透能力(穿透率)各异。(3).光的波长越长、对物质的透过力越强,光的波长越短、在物质表面的拡散率越大。(4).透射照明、即是使光线透射对象物、并观察其透过光之照明手法。
3、光源:
稳定均匀的光源极其重要
目的:将被测物与背景尽量明顕区分
摄取图像时、最重要之处是如何鲜明地获得:被测物与背景的浓淡差
目前、在图像处理领域中最广范的技术手法是:二值化(白黒)处理为了能够突出特征点,将特征图像突出出来,在打光手法上,常用的包括有明视野与暗视野。
明视野:用直射光来观察对象物整体(散乱光呈黒色)
暗视野:用散乱光来观察对象物整体(直射光呈白色)具体的光源选取方法还在于试验的实践经验。 参考技术A 机器视觉是人工智能正在快速发展的一个分支。简单说来,机器视觉是用机器模拟人的视觉功能,即通过机器视觉产品(图像摄取装置,分CMOS和CCD两种)将被摄取目标转换成图像信号,传送给专用的图像处理系统进行各种运算处理来提取信息并加以理解,最终用于实际识别、检测、测量和控制的技术。 参考技术B 机器视觉的定义是指机器视觉就是使用光学非接触式感应设备自动接收并解释真实场景的图像以获得信息控制机器或流程。像华汉伟业的机器视觉就是为了流程控制或检测所制造的产品而从数字图像中自动提取信息,另外,机器视觉系统还能够进行物品测量,比如手机焊缝表面缺陷检测、面板灰尘检测、电芯外观缺陷检测,引导机器人在制造组装过程中将元件对位,等等。 还不明白自己百度下。本回答被提问者采纳 参考技术C 简单说来,机器视觉就是用机器代替人眼来做测量和判断。 参考技术D 机器视觉系统由什么组成?
视觉系统会包含硬件部分和软件部分。
硬件部分一般包括:工业相机(CCD 或 COMS相机)、镜头、光源。
软件部分一般包括:核心算法、图像识别及处理软件等。
这样的视觉系统基本可实现前述的测量、定位等功能。
有人可以解释一下“指数技巧”吗?
【中文标题】有人可以解释一下“指数技巧”吗?【英文标题】:Can someone please explain the "indices trick"? 【发布时间】:2015-10-06 10:34:47 【问题描述】:我注意到在漂亮打印元组的上下文中提到了“索引技巧”。听起来很有趣,所以我关注了the link。
好吧,那并不顺利。我理解这个问题,但真的无法理解发生了什么。为什么我们甚至需要任何东西的索引?那里定义的不同功能对我们有何帮助?什么是“裸”?等等
有人可以为参数包和可变元组方面的专家提供该内容的详细介绍吗?
【问题讨论】:
【参考方案1】:问题是:我们有一个std::tuple<T1, T2, ...>
,我们有一些函数f
可以调用每个元素,其中f
返回一个int
,我们希望将这些结果存储在一个数组中.
让我们从一个具体的案例开始:
template <typename T> int f(T ) return sizeof(T);
std::tuple<int, char, double> tup42, 'x', 3.14;
std::array<int, 3> arr f(std::get<0>(tup)),
f(std::get<1>(tup)),
f(std::get<2>(tup)) );
除了写出所有这些get
s 之外,充其量是不方便和多余的,最坏的情况是容易出错。
首先我们需要包含std::index_sequence
和std::make_index_sequence
的实用程序标头:
#include <utility>
现在,假设我们有一个类型 index_sequence<0, 1, 2>
。我们可以使用它来将该数组初始化折叠为可变参数包扩展:
template <typename Tuple, size_t... Indices>
std::array<int, sizeof...(Indices)>
call_f_detail(Tuple& tuple, std::index_sequence<Indices...> )
return f(std::get<Indices>(tuple))... ;
这是因为在函数中,f(std::get<Indices>(tuple))...
被扩展为 f(std::get<0>(tuple)), f(std::get<1>(tuple)), f(std::get<2>(tuple))
。这正是我们想要的。
问题的最后一个细节就是生成特定的索引序列。 C++14 实际上给了我们这样一个名为make_index_sequence
的实用程序
template <typename Tuple>
std::array<int, std::tuple_size<Tuple>::value>
call_f(Tuple& tuple)
return call_f_detail(tuple,
// make the sequence type sequence<0, 1, 2, ..., N-1>
std::make_index_sequence<std::tuple_size<Tuple>::value>
);
而您链接的文章只是解释了如何实现这样的元功能。
Bare
可能类似于来自Luc Danton's answer:
template<typename T>
using Bare = typename std::remove_cv<typename std::remove_reference<T>::type>::type;
【讨论】:
Bare
似乎类似于remove_reference_t
。请注意,OP 链接页面上的代码通过转发引用获取元组,因此Tuple
可以是引用类型,而tuple_size
不适用于引用类型。 (从技术上讲,不需要remove_cv
。tuple_size
应该可以在 cv-qualified tuple
s 上正常工作。)
很好的答案,像往常一样。我在this answer 中找到了Bare
的可能定义,它似乎类似于decay_t
。
在call_f_detail的定义中,你的意思不是f(std::get<Indices>(tuple)...)
而不是f(std::get<Indices>(tuple))...
吗?
另外,还有一个更重要的问题——为什么我们需要灵活地“支持”任何索引序列?索引 不是包含不必要的冗余吗?
@einpoklum 不,我没有。包扩展通过将表达式置于...
的左侧来工作,因此第一个表达式应为f(std::get<0>(tuple), std::get<1>(tuple), ...)
而不是f(std::get<0>(tuple)), f(std::get<1>(tuple)), ...
。我们想对每个元素单独调用f
,而不是对所有元素一起调用。请参阅 my answer here 了解扩展不同的包表达式以上是关于什么是机器视觉?有人能解释一下吗?的主要内容,如果未能解决你的问题,请参考以下文章