2-1 影像处理:NI Vision小帮手
2-1-1前言
在2-1这个章节,我们要来介绍NI Vision Assistant,桌面图示如下图2-1所示,为什么要介绍它呢?因为我们可以透过它撷取影像、建立影像处理流程,进行一些基本的影像处理或实验,让我们能够快速完成影像塬型的开发,它还能帮我们计算影像处理流程所花费的时间,甚至最后还能产生程式码和Excel报表!所以我们要学习影像处理的话,怎么能够不认识它呢?接下来,让我们按下桌面上的NI Vision Assistant,进入它的世界开始进行影像处理吧!
图2-1 NI Vision Assistant桌面图示
不论我们现在使用的是NI Vision Assistant 2009还是最新的NI Vision Assistant 2013,一打开它所看到的画面应该会和下图2-2所示相同。
图2-2 NI Vision Assistant初始画面
此画面我会将其分为以下七个区块:
1:NI Vision Assistant页面切换
2:影像选择区
3:影像处理显示区
4:影像处理功能选择区
5:NI Vision Assistant文字说明
6:影像处理流程建立区
7:NI Vision Assistant Menu选单
在接下来的章节,作者我会介绍到上述区块的功能。
2-1-2 获取影像
在NI Vision Assistant内,我们有两种方式可以获取影像:
1:使用连接在电脑上的相机撷取影像
2:载入影像档
要使用相机撷取影像,首先要在图2-2的区域1进行页面的切换,选择Acquire Image将页面切换到Acquire Image页面,如下图2-3所示。
图2-3 Acquire Images Page
在图2-3的区域2中我们可以选择已连接相机的类型,来进行影像撷取,譬如我们选择第二个选项从1394相机、GigE相机或USB相机撷取影像,则我们会在区域2的地方看到如下图2-4所示的画面。
图2-4 Acquire Image (1394, GigE, or USB) Setup
首先我们要在Devices的地方选择要用来撷取画面的相机,如果还没有接上相机的话,可以在现在把它接上,然后按下Refresh List of Devices进行重新整理,就能看到新接上的相机了,选择好要使用的相机后,我们有叁种方式可以进行撷取:
1、按下Acquire Single Image 撷取单张影像,我们可以在图2-3的区域3中看到刚刚撷取的影像,若有想要对此影像进行影像处理,则按下Store Acquired Image in Browser,将该影像加入图2-3的区域4中,供未来影像处理使用。
2、按下Acquire Con
tinuousImage进行即时影像的撷取和显示, 在撷取过程中可以随时按下Store Acquired Image in Browser将该影像加入图2-3的区域4中,供未来影像处理使用。
3、按下Sequence Acquisition ,会跳出一个对话框,我们可以在对话框输入我们想要拍摄的张数,然后按下一步,接着相机就会连续拍摄我们指定张数的影像,并将该影像加入图2-3的区域4中,供未来影像处理使用。
要直接载入影像档的话,可按下位于图2-3区域5中的Open Image…按钮,浏览电脑裡的影像档,将其加入图2-3的区域4中,供未来影像处理使用。
现在我们图2-3的区域4中应该有很多影像可以供我们进行影像处理了,接下来我们从图2-3的区域1进行页面切换,把画面切到Browse Images Page,如下图2-5所示。
图2-5 Browse Images Page
我们可以透过图2-5区域2中的Thumbnail / Full-Size View Toggle[按钮切换到单张浏览画面,如下图2-6所示,在图2-6的画面中我们可以透过区域2中的按钮进行影像的连续拨放,或将画面停在我们想要进行处理的影像,然后从图2-6的区域1进行页面切换,把画面切到Process Images Page,接着就可以在该画面对选定的影像进行我们想要的影像处理。我们也可以直接双击图2-5区域2中的影像,画面会自动跳到Process Image Page。若还想要新增影像,或是移除影像,可以透过图2-5或图2-6区域2中的Open Image…和Closed Selected Image(s) 进行操作。
图2-6 Full-Size View
2-1-3 影像处理
有了影像库并选定影像后,我们的画面除了图片不太一样之外应该会如下图2-7所示,我们还可以透过图2-7区域1中的按钮,将图片库中的其他图片载入到图2-7的区域2中。
图2-7 Process Images Page
有了影像之后,接下来就来说明影像处理的部分,我们可以在NI Vision Assistant中进行影像处理流程的编排,简单地说就是把图2-7区域3中的影像处理功能,加到图2-7的区域4中,将其组成一个影像处理流程。我们先将图2-7区域3内的影像处理功能展开来,如下图2-8所示。
图2-8 NI Vision Assistant影像处理功能
NI Vision Assistant所提供的影像处理功能主要可以分为以下六个部分:
1、Image
2、Color:此区域的功能只能对彩色32位元的影像使用。
3、Grayscale:此区域的功能只能对灰阶8位元的影像使用。
4、Binary:此区域的功能只能对1位元的影像使用。
5、Machine Vision
6、Identification
大家可以看到图2-8内的影像处理功能其实还不少,这些功能同时也会出现在图2-7区域6的地方裡,在机器视觉专栏未来的章节中,作者我将会为各位介绍这些功能的使用时机和使用方法,已经等不及的朋友可以先按下图2-7区域5中的按钮Show Context Help,接着就会跳出一个Context Help的视窗,如下图2-9所示,它在我们操作NI Vision Assistant的过程中,会提供给我们最即时的说明,藉由它的帮助,大家可以先试着玩一些简单的影像处理功能,譬如Edge Detector。若有想要多加瞭解影像处理概念的朋友,可以到NI网站上输入关键字搜寻:NI Vision Concepts Help。下载最新版本的文件来阅读,作者我也是一手文件一手实作这样学习过来的,相信这份文件对大家未来在影像处理的概念上,会有很大的帮助。
图2-9 Context Help Window
接下来说明影像处理流程的建立,我们先从图2-7区域6的Help选单底下选择Solution Wizard,打开之后我们会看到如下图2-10的画面。Solution Wizard内有一些影像处理的範例,可以供我们学习参考,而我们现在先选择Automotive下面的Spark Plug Inspection範例,在按下Load Solution之前我们先来看一下这个範例的Problem Description,在问题叙述中,不但有详细描述了需求,连应该要使用的工具都告诉我们了,真的是非常贴心呢!大家说是不是啊?
图2-10 Solution Wizard
在看清楚问题叙述之后,我们就来按下Load Solution,将这个範例载入到我们Process Images的页面,如果大家都有跟上的话,我们将会看到如下图2-11的画面。
图2-11 Spark Plug Inspection Result
在图2-11的画面中我们可以看到一个已经完成的範例,因为我们要练习的关係,我们先把图中区域3的流程删除,删除的方式就是单击点选已经存在的流程,然后按下区域3内的Delete按钮,把已经存在的流程删除后,我们会看到如下图2-12的画面。
图2-12 Spark Plug Inspection
现在我们来重新处理这个需求,根据需求我们分成叁个步骤进行处理:
1、找到Spark Plug Base的两个量测点
2、找到两个Electrodes的量测点
3、根据前两个步骤找到的量测点去进行量测
首先我们要寻找Spark Plug Base的两个量测点,我们从图2-12区域2中
Machine Vision的类别下单击点选Edge Detector功能,然后我们会看到如下图2-13的画面。
图2-13 Edge Detector
在图2-13区域4的地方可以选择量测区域选取的方式,有直线、曲线或是其他方式等等,那我们在这个案例会选择直线来做处理,接着在图2-13区域1中我们想要量测的地方由左至右画一条线,如下图2-14所示。
图2-14 Draw Detected Line
线画好之后,我们发现在图2-14区域3的结果显示区,只有显示出一个点,也就是说这条线上只有找到一个由白变黑的点,而另外一个我们要找的由黑变白的点没有被标示出来,所以我们现在来调整一下图2-14区域2中的设定,将Look For的设定改为First & Last Edge,调整前后如下图2-15所示。
图2-15 Edge Detector Setup
调整完Look For的设定之后,线上由黑变白的点就会在区域1中被标记出来了,区域3也会显示出该点的详细资料,如下图2-16的画面。
图2-16 Edge Detector Result
两个点都找到后,接着按下图2-16区域2中的OK按钮,回到Process Image Page,现在该画面会如下图2-17所示。
图2-17 Spark Plug Inspection 1
第二个步骤我们要找两个Electrodes的量测点,我们一样利用前面所提到的Edge Detector进行操作,就能找到它们了,完成后,结果如下图2-18所示。
图2-18 Spark Plug Inspection 2
接下来第叁个步骤我们要开始对找到的点进行量测,单击点选Machine Vision类别下的Caliper功能,然后会看到如下图2-19的画面。
图2-19 Caliper
在图2-19的区域2中,我们需要选择我们要做的量测项目,和我们要量测的点,在本案例中,我们要选择Distance的功能,量测点的选择如下图2-20所示,选好后按下Measure,我们就会在区域3的地方看到量测结果,如图2-21所示,完成上述操作后按下OK回到Process Images Page,这个案例我们就算是完成了,现在我们所看到的画面应该会和塬本範例的结果,即图2-11的画面非常相似,在这裡恭喜大家利用NI Vision Assistant完成了一个影像处理的案例。
图2-20 Caliper Setup
图2-21 Caliper Result
完成影像处理的流程之后,我们可以利用图2-11区域4中Tools下的Batch Processing来进行批量处理,操作画面如下图2-22所示,选择我们要进行处理的影像,然后按下Run进行批量处理。我们也可以利用Tools下的Performance Meter来计算各个影像处理的流程所花费的时间,如下图2-23所示。
图2-22 BatchProcessing
图2-23 Performance Meter
2-1-4 输出结果
在完成影像处理的流程之后,接着就是要输出结果,利用图2-11区域4中Tools下的View Measurements,我们可以得到如下图2-24的一个结果报表,按下画面中的Send Data to Excel;或Save Results,我们可以得到一个Excel报表或是一个txt文字档案。
图2-24 Results Viewer
2-1-5 输出程式码
NI Vision Assistant很贴心地提供了输出程式码的功能,这个功能在图2-11区域4中Tools下可以找到,而且它可以输出叁种程式语言格式:
labviewVI, C Code, .NET Code。选择Create C Code和Create .NET Code的操作流程比较简单,就是在接下来跳出的对话框内选好程式码输出的版本和程式码储存的资料夹就可以了。选择Create LabVIEW VI则需要做较多的操作,所以我会在以下的图中为大家说明一下,在选择Create LabVIEW VI之后,我们会看到如图2-25的画面。
图2-25 LabVIEW VI Creation Wizard – Step 1
在图2-25中我们要选择要产生的程式码版本、储存路径和决定档案名称,另外还有一个可以勾选的项目,勾选该项目后所产生的程式码,会有部分平行的Code,也就是说没有前后关係的处理流程,其程式码会是平行的,在这个案例中因为我们的程式码很单纯,所以先不勾选此选项,接着按下Next后,我们会看到如图2-26的画面。
图2-26 LabVIEW VI Creation Wizard – Step 2
在图2-26的画面中我们可以选择使用当下的流程,或是已储存的Script File,所谓的Script File就是我们所储存的影像处理流程,下一节会跟各位介绍,现在我们先选择Current Script,然后按下Next,接着我们会看到如图2-27的画面。
图2-27LabVIEW VI Creation Wizard – Step 3
在图2-27的画面中我们要选择VI的影像来源,我们能选择Control Reference、影像档或是相机撷取,在本案例中我们选择Image File,到时候输出的VI在执行时就会要求我们选择影像档,接着按下Next,我们会看到如图2-27的画面。
图2-28 LabVIEW VI Creation Wizard – Step 4
在图2-28的画面中,我们要选择这个输出的VI要有那些Control和Indicator,没有选择到的Controls会以Constant的形式出现在程式码中,没有选择到的Indicator则不会接出来,在这个案例中,我们输出Caliper Results就好,最后按下Finish,VI就会自动产生并出现在我们的面前了,大家有没有觉得这个功能很棒呢!
2-1-6 储存载入Script档
前面努力了大半天,最后不要忘记把我们建立好的影像处理流程储存起来,在图2-11区域4中的File下可以找到Save Script和Save Script As进行储存,在同一个地方可以找到Open Script打开以前储存的影像处理流程。
40