机器视觉系列 —— 影像处理:NI Vision VIs

上传人:ldj****22 文档编号:35837446 上传时间:2018-03-21 格式:PDF 页数:8 大小:721.43KB
返回 下载 相关 举报
机器视觉系列 —— 影像处理:NI Vision VIs_第1页
第1页 / 共8页
机器视觉系列 —— 影像处理:NI Vision VIs_第2页
第2页 / 共8页
机器视觉系列 —— 影像处理:NI Vision VIs_第3页
第3页 / 共8页
机器视觉系列 —— 影像处理:NI Vision VIs_第4页
第4页 / 共8页
机器视觉系列 —— 影像处理:NI Vision VIs_第5页
第5页 / 共8页
点击查看更多>>
资源描述

《机器视觉系列 —— 影像处理:NI Vision VIs》由会员分享,可在线阅读,更多相关《机器视觉系列 —— 影像处理:NI Vision VIs(8页珍藏版)》请在金锄头文库上搜索。

1、电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛机器视觉系列机器视觉系列 影像处理:影像处理:NI Vision VIs电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛前言 在 2-2 这个章节要来介绍如何使用 NI Vision API 来完成影像处理任务,从获取影像开始到 得到我们要的结果,我们都能利用 NI Vision API 来完成,那 NI Vision API 在哪裡呢?首先 我们要打开 LabVIEW,然后开启一个新的 Block Diagram,如果我们在安装 LabV

2、IEW 的时 候有安装到 NI Vision Development Module,那我们就能在 Block Diagram 的 Function 选单 中找到一个 Vision and Motion 的类别,在这个类别裡面就会有我们要使用的 NI Vision API, 如下图 2-29 所示:图 2-29 NI Vision API在图 2-29 中,作者我未来会介绍到的部分,同时也是我们平常比较常会使用到的部分有: NI-IMAQdx、 Vision Utilities、 Image Processing 和 Machine Vision。 从 LabVIEW Context Help

3、视窗的说明内,我们可以约略得知这些类别下的 function 所提供的功能: 1. NI-IMAQdx:建立撷取影像的系统。 2. Vision Utilities:建立影像、操作影像。 3. Image Processing:分析、过滤、处理影像。 4. Machine Vision:透过影像进行量测。通常一个影像处理程式的撰写大致可以简略分为以下步骤: 1. 创建影像记忆体空间 2. 获得影像,并将其放入步骤 1 创建的记忆体空间 3. 进行需要的影像处理 4. 标示、输出影像处理的结果 5. 释放影像记忆体空间在接下来的章节, 作者我会带领大家完成一个简单的影像处理程式, 从创建影像暂存

4、记忆体 开始,到获得影像、处理影像,再到最终得到我们要的结果,各位準备好了吗?快快打开 LabVIEW,我们现在就开始吧!2-2-2 ImageBuffer 要处理影像之前,首先要获得影像,而在获得影像之前,我们需要先创建一个记忆体空间来电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛暂存我们即将获得的影像,而这个用来暂存影像的记忆体空间我们可以称唿它为 Image Buffer。那要如何创建这个记忆体空间呢?大家还记得第一章(下)的图 1-37 吗?没错! 图中这个 IMAQ Create 的 function 就是拿来创建影像暂存的记忆

5、体空间用的,透过这个 function 我们可以去定义这个记忆体空间要储存的影像类型,预设是灰阶(unsigned byte), 同时作者这边会建议要给这个记忆体空间一个有意义的名字,不要用预设的 untitled,这样 在使用到很多 Image Buffer 的时候程式的可读性会比较高;而它隔壁的好邻居 IMAQ Dispose 这个 function 则是用来释放这个记忆体空间用的,大家在使用完这个影像暂存的记 忆体空间后,务必要养成将它释放的好习惯,否则若哪天一不小心,就有可能会遇到记忆体 不足 LabVIEW 当掉或是异常关闭的状况喔。图 1-37 IMAQ Create 与 Disp

6、ose 元件2-2-3 获得影像 程式中要使用的影像,其来源有两种,一为用相机撷取,二为载入现存在电脑中的影像档。 首先来帮大家复习一下, 在 1-2-2 节中, 我们曾经提及如何使用 NI Vision API 中的 Low Level Function 操作相机来进行取像,还记得下面的图 1-39 吗?图 1-39 Low Level 取像元件程式码电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛步骤说明: 1. 指定开启相机名称,从IMAQ Session中选择对应的相机名称 2. 设定相机取像模式为连续,Image Buffer 设

7、为3 3. 开始取像 4. 任何由外部取得的影像,都需透过 IMAQ 建立一组记忆体空间来储存,由于取像来源是 彩色相机,每一张彩色(RGB)影像需要 3*8bit 的空间来储存,所以Image Type要选 择RGB U32 5. 进入 While 迴圈后,会不断将影像覆盖到记忆体区内,此时将影像接到 Display Image 即可在人机介面观察到影像,直到按下Stop或 Error 产生时才会跳出迴圈 6. 停止取像 7. 解除相机设定 8. 结束指定名称的相机作业 9. 清空储存影像的记忆体空间如果是要载入电脑裡的图档来进行处理的话,我们会需要用到下图 2-30 中的 IMAQ Loa

8、d Image Dialog 和 IMAQ ReadFile 这两个 function,範例程式码如下图 2-31 所示。图 2-30 Load Image function图 2-31 Load Image from Image File 範例程式码电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛现在我们成功地将影像载入程式中了,在接下来的章节中,我们将使用 NI Vision API 来处 理之前在 2-1 中有练习过的範例:Spark Plug Inspection。2-2-4 使用 NI Vision API 完成 Spark Pl

9、ug Inspection 範例 还记得 Spark Plug Inspection 这个範例要做什么吗? 1. 量测 Spark Plug Base 的宽度 2. 量测 Electrodes 的间距在撰写程式码之前我们先简单规划一下需要撰写的功能和步骤: 1. 创建一个灰阶的 Image Buffer 2. 将 Spark Plug 的影像档载入步骤 1 所创建的记忆体空间 3. 使用 NI Vision API 的 function 去找到 Spark Plug Base 的两个量测点 4. 使用 NI Vision API 的 function 去找到 Electrodes 的两个量测点

10、 5. 使用 NI Vision API 的 function 进行点和点之间的距离量测 6. 得到量测结果后释放记忆体空间首先麻烦大家先完成之前图 2-31 的程式码,因为图 2-31 的程式码其实就是上述的步骤 1 和步骤 2,大家应该早就发现了吧?完成图 2-31 的程式码之后, 我们要在 NI Vision API 内选择适合的 function 来完成步骤 3 和 步骤 4,基本上我们现在要做的事情就是找点,所以我们要找的 function 毫无疑问地会在 Machine Vision 这个类别底下,那所谓的找点其实就是要 Find Edge,因此我们接着点选 Caliper 这个子

11、类别,然后就会看到我们要找的 Edge Tool 了,详细位置如下图 2-32 所示。图 2-32 Find Edge Tools在图 2-32 中我们可以看到能够用来在一条线上 Find Edge 的 function 有两个:IMAQ Simple Edge Tool和 IMAQ Advanced Edge Tool,基本上这两者都可电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛以达到我们的目的,但是在使用方式上有些不同,IMAQ Simple Edge Tool的座标设定是使用 Pixel Coordinates,在边界筛选的 Th

12、reshold Parameters 设定上也比较简略,而IMAQ Advanced Edge Tool的座标设定是使用 ROI,在边界筛选的 Edge Options 设定上则需要比较精确的设定, 那在这个範例中我们选择使用IMAQ Simple Edge Tool来达成我们的目的,在未来的章节会再跟各位详细介绍 ROI 和 Edge Options 中各个参数所代表的意义。那么我们现在把 IMAQ Simple Edge Tool加入程式码改写,完成之后我们的程式码应该会如下图 2-33 所示。图 2-33 Simple Find Edge Code电子发烧友网论坛出品电子发烧友网论坛出品

13、 PowerPower byby 电子发烧友论坛电子发烧友论坛图 2-33 中, Threshold Parameters 设定的部分在大多数的应用上都是要因应图的实际表现, 去设定我们认为最适合的值, 在这个案例中使用预设的设定就可以达成我们的需求, 所以保 持预设的设定;在 Pixel Coordinates 设定的部分,因为我们是要量测物体的宽度,所以必须 画一条横跨量测物的线,Start Point 座标和 End Point 座标是用 Array 传入;Process 的部分 因为我们画的是横跨量测物的线,所以要找的是第一点和最终点,因此最后输出的 Edges Coordinates

14、 Array 中会有两个点;Sub-Pixel Accuracy 设定为 True 时,function 内部的运算 会将边界点附近像点的值也纳入计算,故输出结果会有小数位,提供更加精确的结果。利用IMAQ Simple Edge Tool找到点之后, 接着我们要在NI Vision API内选择适合的function 来完成步骤 5,量测点与点之间的距离,既然是要进行量测,不用怀疑,我们要的 function 一定也是在 Machine Vision 这个类别底下,现在有没有看到一个 Analytic Geometry 的子类 别, 一看就觉得跟我们要找的 function 有关係, 再往下

15、找, 果不其然就看到了一个 IMAQ PointDistances的 function,详细位置如下图 2-34 所示。图 2-34 IMAQ Point Distances Tool找到它之后马上把它加入程式中,然后我们就会看到如下图 2-35 的程式码。图 2-35 Inspect Point Distances Tools电子发烧友网论坛出品电子发烧友网论坛出品 PowerPower byby 电子发烧友论坛电子发烧友论坛IMAQ Point Distances这个 function 它可以一次量测多个点之间的距离,所以我们会看到它的输出 Distances 是一个 array,在这个案

16、例中因为我们只有传入两个点,所以 array 中只会有一个 element,直接将它取出就是我们要的结果了。取出结果之后,大家千万不要忘记我们最后还有一个步骤就是要释放影像暂存记忆体的空间,作者我刚才也差点忘记了!让我们加入 IMAQ Dispose这个 function 来完成释放记忆体的动作, 我们可以选择接上我们要释放的 Image Buffer 或是在 All Images? ( No) 这个接点上接上 True, 释放之前创建的所有 Image Buffer, 最后完成的程式码会如下图 2-36 所示。图 2-36 Spark Plug Inspection Code恭喜大家,我们成功利用 NI Vision API 完成了一个简单的案例啰!执行这一支程式所需要 的图片 Sparkplug1.j

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号