GitCode 开源社区 NI Vision for LabVIEW 基础(二):准备测量图像

NI Vision for LabVIEW 基础(二):准备测量图像

vision
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。

本节介绍如何建立图像系统,采集和显示图像,分析图像,以及为进一步处理准备图像。

建立图像系统

在开始获取、分析、处理图像之前,必须先建立图像系统。建立图像系统的方法取决于图像环境以及分析和处理的需要。图像系统应该产生足够高的质量以能够从图像中获取信息。

搭建图像系统的完整步骤如下。

根据给定的颗粒限制以及被检测物体的尺寸,确定设备类型。参考NI Vision概念手册中第三章,系统设置与校准

确保相机传感器足够大以满足对最低分辨率的要求。

确保镜头景深足够高以保证焦点内的所有物体都不会因为镜头而畸变。还要确保镜头的焦距满足需要。

确保光照能够提供被检测物体与背景之间有足够的对比度,一便从图像中获取信息。

将相机摆放在与被测物体垂直的位置。如果相机获取的物体的图像带有角度,就会产生透视误差。即便可以通过软件补偿这些误差,National Instruments 还是建议采用垂直的角度以获得最精确的结果。

选择一个满足需要的图像采集设备。National Instruments 提供了许多图像获取设备,例如模拟的彩色和单色设备以及数字设备。更多有关NI图像采集设备的详细信息,请访问:ni.com/vision 。

为图像采集设备配置驱动程序软件。如果拥有一台NI图像采集设备,可以通过Measurement& Automation Explorer (MAX)配置NI-IMAQ 或NI-IMAQdx驱动程序。 在桌面上双击Measurement & Automation 图标打开MAX 。详细信息参见Measurement & Automation Explorer Help

校准图像系统

建立图像系统后,可以校准系统,为像素坐标指定实际的坐标,补偿图像系统中固有的角度和非线性误差。

像机与被测物体不垂直发生透视误差。非线性失真可能来自像机镜头畸变。透视误差和镜头畸变导致出现扭曲的图像。这种失真替代了图像中的信息,但并不一定是破坏映像中的信息。

如果仅仅希望为像素坐标指定实际的坐标使用简单校准。如果需要补偿透视误差和非线性镜头扭曲使用透视和非线性扭曲校准。

创建图像

使用IMAQ Create程序建立一个引用图像。建立图像时,要制订下列图像数据类型之一:

Grayscale (U8, default)—8-位无符号

Grayscale (U16)—16-位无符号

Grayscale (I16)—16-位有符号

Grayscale (SGL)—浮点

Complex (CSG)—64-位复数

RGB (U32)—32-位 RGB

HSL (U32)—32-位HSL

RGB (U64)—64-位RGB

如果需要可以多次执行IMAQ Create建立多个图像,但所创建的每个图像都需要唯一的名称。通过分析预期的应用程序确定所需的图像个数。依据是程序的不同的处理阶段及是否需要为每个处理阶段后保持原始图像。

说明 如果打算在图像上使用滤波或颗粒分析程序,必须保证图像有合适的边沿尺寸。默认的边沿尺寸为三个像素。

当创建图像时,NI Vision建立了一个内部的图像结构以保存图像的属性,如名称和边沿尺寸。然而,此时没有为图像像素分配内存。NI Vision程序在图像尺寸修改时自动分配一定量的内存。例如,采集和重取样程序改变图像尺寸所以它们会为图像像素分配适当的内存。IMAQ Create的输出是一个图像结构的引用。 可将该引用作为输入提供给所有NI Vison函数的子程序。

开发期间,可能需要在运行时验证图像的内容。使用LabVIEW图像探针可以在运行期间察看图像的内容。要建立探针,右击图像连接线,选择Probe即可。

许多属于NI Vision库的程序都需要一个或多个图像引用。所需的图像引用的数量取决图像处理函数和希望使用图像的类型。

分析图象的NI Vision模块不修改只需要一个图像引用输入的内容。处理图像内容的模块可能要求一个引用作为源图像和一个目标图像,或者模块有一个可选的目标图像。如果不能提供源图像,模块会修改源图像。

在应用程序的最后,利用IMAQ Dispose模块释放所创建的图像。

输入输出合并

根据模块完成的功能类型的不同,输入输出可能会产生不同的合并。可以利用这种灵活性决定要处理那个图像以及在哪里保存结果图像。如果没有膜表图像连线,那么使用源图像并传递给目的输出。

下面的图描述了NI Vision中一些模块的接线板。

图象分析

下面的连线板仅用于分析图像的模块,所以既不改变图像尺寸也不改变内容。 这种操作的例子包括颗粒分析和直方图计算。

image

图像遮罩

下面的连线板介绍了图像遮罩。

image

Image Mask 输入端表明处理和分析是依赖与另外一个图像的内容:Image Mask。仅当Image Mask中对应的像素不为空时Image中的像素才被处理。如果一个Image Mask的像素是0, 对应的Image 像素不会被改变。

说明 除了IMAQ定量模块之外,所有的NI Vision程序的图像遮罩都必须是8-bit的图像,IMAQ定量模块支持8-bit和16-bit的图像遮罩。

如果要对整幅图像进行处理或分析,就不要连接Image Mask输入端。 将同一个图象既连接到Image 的输入也连接到Image Mask 的输入,与将Image Mask 的输入端开放不连的效果是一样的,除非是Image 必须是一个8-bit的图像情况下。

图像填充

下面的连线板用于完成图像填充的程序。

image

这类操作的例子包括读取文件,从NI图像采集设备采集图像,或者将一个二维矩阵转换成图像。这类模块可能修改图像的尺寸。

图像处理

下面的连线板用于处理图像的模块。

image

这种连接器是NI Vision中最常见的。Image Src输入端接收要处理的图像。Image Dst 输入端可以接收另一个图像或者是源图象,取决于使用的目标。如果两个不同的图像连接到两个输入端,那么源Image Src 图像不被修改。如下图所示,如果Image DstImage Src 输入端接收同一个图像,或者Image Dst不连接,处理过的图像被放到源图像,而原图像数据丢失。

image

Image Dst 输入端是接收处理结果的图像。根据模块功能的不同,即可能与源图像相同,也可能不同。各个模块的介绍都包括可以连接到Image 输入端的图像类型。连接到Image Dst 的图像根据源图像调整大小。

算术与逻辑运算

下面的连线板用于在两个图像间进行算术或逻辑运算的模块。

image

目标图像需要两个源图像存在。可以在两个图像A 和B之间完成一个运算,然后把结果存放到另一个图像或者是Image Dst中,或者存放到两个源图像之一A 或B中。在后一种情况下,可以认为源数据在处理发生之后就没用了。 下面的合并在这种接线板中是可能的。

image

左面的接线板中,三个图像都不同。Image Src AImage Src B 在处理后原封不动,运算的结果存放到Image Dst中。

中间的连线板中,Image Src A 也接到了Image Dst, 所以接收到了运算的结果。在这种运算中,Image Src A 的原数据被覆盖。

右边的接线板中,Image Src B 接收运算的结果,其原数据被覆盖。

许多两个图像之间的运算要求具有相同的类型和大小。然而,算术运算可以在两个不同类型的图像间进行。

采集或读取图像
  • 创建了图像引用之后,可以通过三种途径将图像采集到图像系统中。通过图像采集系统中的相机采集图像,从计算机中存储的文件装载图像,或者将存放在二维矩阵中的数据转换为图像。采集图像、从文件装载图像或从二维矩阵转换图像的程序模块自动地为图像数据分配适当的内存空间。

利用National Instruments 图像采集设备可以采用以下方法之一采集图像:

  • 1.使用IMAQ Snap(块照) 程序采集单幅图像。调用该程序时,将初始化图像采集设备,并采集下一个视频帧。该模块用于单一的采集程序,主要是编程方便。

2.通过抓拍连续采集图像。抓拍功能实现了在一个缓冲区上连续循环采集。抓拍功能用于采集高速图像。IMAQ Grab Setup用于启动采集,IMAQ Grab Acquire用于返回当前图像的一个拷贝,IMAQ Stop用于停止采集。 3.IMAQ Sequence用于采集固定数量的图像。IMAQ Sequence一张接一张的采集图像直到达到要求的数量。 如果只采集某些特定的图像,可以为IMAQ Sequence提供一张表,描述在采集到每帧后跳过的帧数。

说明 在完成图像采集后,必须使用IMAQ Close 或者IMAQdx Close Camera 释放分配给图像采集设备的资源。

IMAQ ReadFile用于打开并读取计算机中存储的文件数据到图像引用中。 可以读取以标准格式存储的图像,如BMP, TIFF, JPEG, JPEG2000, PNG, 和AIPD,或则制定的非标准格式。通常,软件会自动将像素转换成所传递的图像类型。

IMAQ Read Image and Vision Info用于打开图像文件所包含的附加信息, 如校准信息,用于模式匹配的模板信息,或者蒙板信息。有关模式匹配模板和蒙板的内容,参见完成机器视觉任务

也可以使用IMAQ GetFileInfo读取图像属性-图像尺寸,像素深度 ,推荐的图像类型,以及校准单位,而不用实际读取全部图像数据。

IMAQ AVI OpenIMAQ AVI Read Frame 用于打开和读取存放在计算机中的AVI文件,并传送到图像引用中。NI Vision自动将像素转换成所传递的图像类型。

说明 完成AVI读操作后,必须使用IMAQ AVI Close 释放分配给AVI文件的资源。

IMAQ ArrayToImage 用于将二维矩阵转换成图像。也可以是用IMAQ ImageToArray 将图像转换成LabVIEW 的二维矩阵。

显示图像

LabVIEW 中有两种显示图像的方法。可以利用外部现实函数模版中的外部显示程序模块在外部窗口中显示图像,也可以Vision控件模板中的Image Display 控件将图像直接显示在前面板上。

外部窗口显示

在外部窗口显示图像示,使用IMAQ WindDraw 。最多可以在16个外部窗口中显示图像。IMAQ WindSetup 用于配置每个外部窗口的外观。例如,可以决定窗口是否需要滚动条,是否可变化大小,或者是否有标题栏。也可以使用IMAQ WindMove 将尾部图像窗口定位在监视器的一个特定位置。

说明 外部图像窗口不属LabVIEW 面板。他们直接由NI Vision管理。

通过将调色板应用给窗口,可以将调色板用于显示灰度图像。IMAQ GetPalette用于获得预先定义的调色板 。例如,如果要显示二值图像(一种含有特殊像素值得图像,内容像素值为1,背景的像素值为0),可以使用预先定义的二值模版。关于调色板的内容,参见NI视觉概念手册。

说明 在程序的最后,必须使用IMAQ WindClose关闭所有打开的外部窗口。

图像显示控件

Image Display 控件用于在LabVIEW前面板中显示图像。如下图所示。在前面板上点右键并选择Vision ,可以找到Image Display 控件。

image

1 显示区域

3 关注区工具选项板

2 图像信息显示器

4 滚动条

要想显示图像,在后面板中将NI Vision模块的图像输出连接好,如下图所示。

image

Image Display控件包含以下元素:

显示区域—显示图像。

图像信息显示器—显示图像的相关信息以及当前所画的关注区的信息。

关注区工具选项板—包括绘制关注区工具、移动、缩放工具。与外部显示窗口不同,每个图像显示控件都有自己的工具集。

滚动条—允许移动显示区中的图像。

设计期间,可以重新安排控件元素的布局可以定制控件的外观,通过快捷菜单,或者选择控件并点击Edit?Customize Control 可以配置属性。

运行期间,可以通过属性节点定制控件的许多部分。

说明 不是所有的设计期间的功能都在运行时可用。

要想建立属性节点,在控件上右击鼠标并选择Create?Property Node。 单击属性节点就可以看到可以设置的属性。图像显示控件特有的属性出现在列表的尾部。

下面的列表介绍部分图像显示控件可用的属性:

快照模式(Snapshot Mode)—决定控件建立一个图像的拷贝还是使用图像的引用。当允许快照模式时, 如果检测图像在应用程序中后来变化了,图像显示控件仍然显示图像显示控件连接成功时所提供的图像。

允许快照模式可能会降低程序的运行速度,因为控件要为图像产生拷贝。当需要每次都要显示图像的快照是,允许该属性。 如果需要快速显示结果时,禁用该属性,例如在抓拍采集期间。快照模式属性默认是禁止的。

说明 为了使图像显示控件直接刷新图像,可以使用Refresh Image 方法。 要创建方法,右击控件,并选择 Create?Invoke Node 点击Invoke Node可以看到可用的方法。 图像显示控件特殊的方法出现在快捷菜单的底部。

调色板(Palette)—决定图像显示控件使用哪个调色板显示图像。可以为控件配置预定义调色板或自定义调色板。使用User Palette属性节点设置自定义调色板。 也可以在运行时右击图像控件改变控件的调色板或图像探针。

最大轮廓数(Maximum Contour Count)—设置图像显示控件上用户可以绘制关注区轮廓的最大数目。

图像显示控件还包括如下方法:

Get Last Event—返回最后的用户事件,从图像控件上返回鼠标移动和点击的结果。该方法与外部显示窗口中的IMAQ WindLastEvent 作用相同。

Clear ROI—清除图像显示控件中的关注区。

Refresh Image—刷新显示,以显示最新的图像。在禁用快照控件时使用该方法,但是图像显示控件只能显示图像的最后变化。

加入校准信息

如果期望将当前设置的校准信息赋给每个采集的图像,使用IMAQ Set Calibration Info模块。 该模块接受带有校准信息的源图像和需要校准的目的图像。输出图像是带有附加了校准信息的检测图像。详细内容参见校准图像一节。

说明 由于校准信息是图像的一部分,它将被传播到图像的处理和分析中。更改图像大小的函数,如几何变换,使校准信息作废。IMAQ Write File 2的实例IMAQ Write Image and Vision Info File 2 可以将图像和所有附加的校准信息保存到文件中。

分析图像

获得并显示图像后,基于以下原因可能需要分析一下图像的内容:

  1. 1.确定图像质量是否足以达到检测任务的要求
  2. 2. 获得检测处理期间需要使用的参数值

直方图和线框工具有助于分析图像的质量。

IMAQ HistographIMAQ Histogram 模块用于分析图像的整体灰度分布。使用直方图可以分析决定图像质量的两个重要指标,饱和度和对比度。如果在没有充分照明的环境下采集的图像曝光不足,那么大多数像素的密度值低,表现为峰值集中在直方图左边。如果在光照过强的环境下采集的图像曝光过度,那么大部分像素的密度值高,表现为峰值集中在直方图右边。如果图像具有合适的对比度,直方图像素集中区域会分开。利用直方图信息可以确定图像质量是否足以能将关注物体从背景中分离出来。

如果图像质量满足需要,可以使用直方图确定图像中与物体对应的像素范围。 可以在处理函数中使用这个范围,例如在颗粒分析中确定阈值范围。

如果图像质量不满足要求,应该尝试改进图像条件以获得必要的图像质量。需要重新评价及修改各项要素:照明设备与设置,镜头调节,相机工作模式,以及采集参数。如果各项设置都达到了最大可能的条件而图像质量还是不能满足要求,可以尝试采用有下节中介绍的图像处理技术来改善图像质量。

IMAQ LineProfile 模块用于获得图像中沿着一条线的像素分布, IMAQ ROIProfile模块用于获得图像中沿着一个一维路径的像素分布。要使用线形轮廓分析图像,在图像中沿着物体的边沿画一条线,或指定一条线。 IMAQ LineProfile 用于检测沿着这条线的像素值。观察沿着这条线的像素分布情况,可以判定图像质量是否能在物体的外围提供锐利的边沿。同时可以确定图像是否有噪声,以及识别噪声的特征。

如果图像满足要求,就可以使用像素分布信息来确定一些检测函数中需要用到的参数。例如,适用来自线形轮廓的信息来确定物体周围的边沿强度。可以讲这个信息输入到IMAQ Edge Tool 2 模块中,以便查找沿着这条线的边沿。

改善图像

根据分析图像收集到的信息,可能需要改善图像的质量以便于检测。可以通过查找表、滤波器、灰度几何,以及快速弗里埃变换改善图像。

查找表

应用查找表(LUT)变换提高其它区域中损失了的包含重要信息区域的亮度。 查找表变换将源图像中的输入灰度值转换成变换后图像中的其它灰度值。NI Vision提供了四个模块可以直接或间接的江查找表用于图像。:

  1. 1、IMAQ MathLookup—用预定义的查找表替换图像的像素值。NI Vision有七个基于算数变换的预定义查找表。有关这些查找表的详细信息参见NI视觉概念手册,第五章,图像处理
  2. 2、IMAQ UserLookup—用自定义的查找表替换图像的像素值。
  3. 3、IMAQ Equalize—将灰度值平坦的分布在给定的灰度区间内。 IMAQ Equalize用于为包含较少灰度值的图像增强对比度。
  4. 4、IMAQ Inverse—反向图像的像素密度,获得图像的负片。例如,如果背景像素比物体像素还亮得话,在为图像进行自动阈值处理之前适用IMAQ Inverse。
滤波器

滤波器用于改善图像中过渡区域的锐度或者增强图像的整体信噪比。 根据需要既可以选择低通滤波,也可以选择高通滤波。

低通滤波器通过平滑图像去掉不必要的细节,去掉锐利的细节,以及平滑物体与背景之间的边沿。可以使用MAQ LowPass模块,或者使用IMAQ ConvoluteIMAQ NthOrder定义自己的低通滤波器。

高通滤波器强化细节,例如边沿,物体边缘,或裂缝。这些细节表现为密度值的强烈过渡。使用IMAQ ConvoluteIMAQ NthOrder模块可以定义自己的高通滤波器,或者使用IMAQ EdgeDetectionIMAQ CannyEdgeDetection 模块。IMAQ EdgeDetection 使用预定义的边沿检测内核查找边沿,例如Sobel, Prewitt, 和 Roberts内核。

卷积滤波

IMAQ Convolute模块使用一个预定义的低通和高通滤波器集合。每个滤波器由系数的内核定义。IMAQ GetKernel 模块用于提取预定义的内核。如果预定义的内核不能满足需要,可以适用浮点数的LabVIEW二维矩阵定义自己得滤波器。

N序滤波器

IMAQ NthOrder 根据选择的N的值,定义一个低通或高通滤波器。一个特定的N序滤波器,中值滤波器,可以滤除看起来像小黑点和白点的斑纹。详见NI视觉概念手册,第五章,图像处理

灰度几何

在需要滤掉图像的灰度特征是使用灰度几何。灰度几个有助于去掉或加强孤立特征,例如黑色背景上的亮点。在准备进行颗粒分析分割图象之前,在灰度图象上使用这种变换以增强非离散性。

灰度几何变换将一个像素与它周围的像素进行比较。这种变换在进行腐蚀运算时保留最小值,而在进行扩散运算时保留最大值。

详见NI视觉概念手册,第五章,图像处理

IMAQ GrayMorphology 模块用于实现以下七种变换:

  1. Erosion(侵蚀)—减少被低密度邻居包围的像素的亮度。邻近像素是通过结构化元素定义的。详见NI视觉概念手册,第九章,二值几何
  2. Dilation(扩散)—增加被高密度邻居包围的像素亮度。一个扩散必然有一个对应的侵蚀效果。
  3. Opening(开放)—去除暗区和光滑边框中的孤立的亮点。
  4. Closing(闭合)—去除亮区和光滑边框中的孤立的暗点。
  5. Proper-opening(适当开放)—去除暗区中的孤立亮点,平滑区域的边缘。
  6. Proper-closing(适当闭合)—去除亮区中孤立的暗点,平滑区域边缘。
  7. Auto-median(自动中值)—产生很少细节的简单颗粒。
快速傅里叶变换

快速傅里叶变换(FFT)用于将图象变换到复频域。一幅图像中,细节和锐利的边沿是与颗粒频率从中到高在很短的距离内明显的导致灰度级别变化有关。缓慢变化的模式与较低的颗粒频率有关。

一幅图像可能有外部噪声,例如数值化过程中导致的周期性条纹。在复频域,周期图案被简化成一个高颗粒频率的有限集合。另外,图象系统设置可能导致视场亮度的不均匀,会在要分析的信息上面产生轻微的漂移。在复频域,这种轻微的漂移表现为图象平均密度旁边的一个低频有限集。成为直流(DC)成分。

利用工作在复频域的算法可以从图象中孤立或去除这些不期望的频率。完成以下步骤,就可以获得去掉不期望的图案么日保留整体特征的图像。

1. 使用IMAQ FFT模块将图像从空域转换到复频域。该模块计算图像的FFT,结果形成了代表图像的频率信息的复数图像。

2. 使用低通或高通频域滤波器在频域改善图像。IMAQ ComplexAttenuateIMAQ ComplexTruncateSpecify 用于指定使用哪种滤波器。低通滤波器平滑图像中的噪声、细节、纹理,以及锐利的边沿。高通滤波器强化图像中的细节、纹理和锐利的边沿,但也强化噪声。

  1. Lowpass attenuation(低通衰减)—衰减量是与频率信息呈正比。在低频段,只有很小的衰减,随着频率的增加,衰减也增加。该运算保留所有零频率的信息。零频率信息对应于图像的直流成份或者说是空域图像的平均密度。
  2. Highpass attenuation(高通衰减)—衰减量与频率信息成反比。高频段,只有很小的衰减,随着频率的降低,衰减增加。 零频率成份被完全剔除。
  3. Lowpass truncation(低通截断)—高于理想截止频率的成份被去除,低于的保持不变。
  4. Highpass truncation(高通截断)—高于理想截止频率的成份保持不变,低于得被去除。

要将图像变换会空余,使用IMAQ InverseFFT模块。

高级运算

IMAQ ImageToComplexPlaneIMAQ ComplexPlaneToImage 模块用于任意访问、处理、以及更新振幅、相位、和复数图像的虚部。也可以通过IMAQ ComplexImageToArray 将复数图像变换为矩阵,或者使用IMAQ ArrayToComplexImage 进行反变换。

转载于:https://blog.51cto.com/guosir/307501

GitHub 加速计划 / vi / vision
15.85 K
6.89 K
下载
pytorch/vision: 一个基于 PyTorch 的计算机视觉库,提供了各种计算机视觉算法和工具,适合用于实现计算机视觉应用程序。
最近提交(Master分支:2 个月前 )
868a3b42 7 天前
e9a32135 16 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐

  • 浏览量 833
  • 收藏 0
  • 0

所有评论(0)

查看更多评论 
已为社区贡献2条内容