LabVIEW 灰度图像操作与运算(基础篇—2)
完成机器视觉系统的搭建、校准并且确认其可以采集检测目标的图像后,就可以集中精力开发各种图像分析、处理以及模式识别算法。为了设计准确性和鲁棒性都较高的算法,并提高其执行速度,一般需要事先对整幅图像或部分像素进行操作,使图像尺寸或形状更适合计算机处理。某些时候还要对图像进行算术和逻辑运算,以消除噪声或提高图像的对比度。这些前期的图像操作或运算不仅会在空间域增强图像,还能极大地提高后续算法的执行速度及其有效性。
1、像素操作
像素操作(Pixel Manipulation)通常用在各种图像处理算法之前,为算法的顺利执行做准备。像素操作具体包括:读取或设置图像中的某个像素值、更改某个区域的所有像素值、逐行或逐列读取或更改像素值等。下图显示了 NI Vision 提供的像素操作函数,它们位于 LabVIEW 的视觉与运动→Vision Utilities→Pixel Manipulation 函数选板中。
函数的说明和使用可参见帮助文档:
使用 LabVIEW 更改单点像素值、行列像素值、线段所覆盖像素值以及图像填充的实际例子,加深对像素操作的理解和应用。
程序设计思路如下所示:
程序开始从文件中读入图像 Lena,此后 IMAQ SetPixelValue 将坐标为(200,200)的像素值更改为 255(白色),并用 IMAQ GetPixelValue 读取改动后的值,以确认更改成功。
IMAQ SetRowCol 可以更改图像中某一行或某一列的数据,由于设置了行参数 Row 为 FALSE,因此它将使用 Pixels (U8)数组中的值更改编号为 50 的一列数据。
程序中 Pixels (U8)数组中仅有两个元素,此时,进行替换时只有前两个像素被更改。
IMAQ GetRowCol 可以读取更改后的第 50 列像素值,以确认像素更改操作的结果。
IMAQ GetPixelLine 可以返回 (10,10)和(60,60)两点所确定的线段覆盖的像素值,这些返回的像素值被 Replace Array Subset 用含有 100 个元素的子数组替换后,再次作为 IMAQ SetPixelLine 的输入,用于更改线段所覆盖的像素值。
程序中 IMAQ Filllmage 会用黑色(像素值为 0)对图像进行填充,由于使用了图像遮罩,因此只有遮罩图像中非零像素所覆盖的部分会被填充。默认情况下,图像遮罩会被放置在使用它的图像原点,程序并未使用默认值,而是用 IMAQ SetOffset 将图像遮罩左上角移动到使用它的图像中(220,220)位置。
程序设计如下所示:
程序运行效果如下所示:
程序下载请参见:LabVIEW图像操作与运算:像素操作_labview视觉如何定位像素-其它文档类资源-CSDN下载
2、灰度图像操作
图像操作(Image Manipulation)是指对图像执行的平移(Shift/Translation)、旋转(Rotate)、缩放(Zoom)、拉直(Unwrap)等几何变换以及重新采样、对称(Symmetry)变换、提取(Extract)图像某一区域的操作等。大多数图像操作函数并不直接改变图像的像素值,而只是在空间上对它们进行重新组织或插值。
下图显示了 NI Vision 提供的图像操作函数,它们位于 LabVIEW 的视觉与运动→Vision Utilities→lmage Manipulation 函数选板中。
函数的说明和使用可参见帮助文档:
2.1、图像平移、旋转
图像平移是指将图像中所有的点都沿着水平或垂直方向移动一定的距离。若假定像素的初始坐标为(x,yo),经平移后其对应的坐标为(x,yt),图像在 x、y 方向的平移量分别为 xoffset 和 yoffset,则有:
图像旋转是指图像像素以某一点为旋转点,沿逆时针(角度为正)或顺时针(角度为负)转动一定角度。多数情况下,图像旋转操作都以图像中心点作为旋转点。和图像平移类似,旋转操作也会引起图像大小的改变。图像中部分像素可能会移动到原图范围之外,此时可以丢弃这部分像素,以保持原图的尺寸,也可以扩展图像尺寸以匹配旋转后的图像,如下图所示:
接下来使用 LabVIEW 实现图像平移和旋转,程序设计思路如下所示:
程序先在内存中为源图像和图像处理过程分配了缓冲区 Src 和 Dst,并从图像文件中读入大小为 512×512 的待处理图像 Lena。
随后使用 IMAQ Shift 进行图像平移操作时,由于 Dst 缓冲被连接至 VI 的 ImageDst 参数,因此平移操作会保持源图数据不变,而只是基于其数据将图像延水平和垂直方向均移动 80 像素的结果保存在 Dst 缓冲区中。
对于那些因平移操作变为空白的区域,根据 Replace Value 参数的值,VI 将其灰度值填充为 200。
程序中的 IMAQ Rotate 可将图像沿顺时针方向旋转 30°(-30°)。对于那些因旋转无法在源图像中找到对应值的像素,VI 使用了双线性插值方法计算其值;而对于空白区域,则使用了默认值 0 进行填充。
由于图像旋转后的尺寸会有变化,部分图像数据可能会移动到源图像尺寸之外,因此需要通过 Maintain Size 参数来选择是保持原图像尺寸不变(True),还是要保留所有图像数据(False)。
程序设计如下所示:
由程序的运行结果可以看出,当选择保持图像尺寸不变时,旋转到源图像之外的数据会被丢弃;而当选择保留所有图像数据时,旋转后的图像尺寸会比源图像尺寸大。效果如下所示:
程序下载请参见:LabVIEW图像操作与运算:图像平移旋转_labview旋转二维图片-其它文档类资源-CSDN下载
2.2、图像缩小、放大
使用 IMAQ Resample、IMAQ Expand 和 IMAQ Extract 2 实现图像缩放功能。程序设计思路如下:
程序先在内存中为源图像和图像处理过程分配了缓冲区 Src 和 Dst,并从图像文件中读入大小为 512×512 的待处理图像 Lena。
紧接着 IMAQ Resample 和 IMAQ Extract 2 分别将图像尺寸缩小至 64×64。虽然两个 VI 均将图像缩小至同样尺寸,但它们使用的方法和图像缩小后的效果却完全不同。
IMAQResample 在缩小图像时基于三次样条插值方法填充新图像中的数据,而 IMAQ Extract2 则每隔 8 行、8 列抽取数据行列。
完成图像缩小后,程序又使用 IMAQ Resample 和 IMAQ Expand 将缩小后的图像放大至 512×512。
程序设计如下所示:
程序运行效果如下所示:
程序下载请参见:LabVIEW灰度图像操作与运算:图像缩小放大-其它文档类资源-CSDN下载
2.3、图像对称变换
Nl Vision 使用 IMAQ Symmetry 实现各种类型的图像对称变换。开发人员只需根据需要选择对称变换的类型,而无须关心各种矩阵计算的细节,即可得到想要的结果。需要注意的是,主次对角线对称操作仅适用于长、宽相等的图像。
程序设计如下所示:
程序下载请参见:LabVIEW灰度图像操作与运算:图像对称变换_matlab图像对称变换-其它文档类资源-CSDN下载
2.4、3D 可视化
Nl Vision 还提供了一个以 3D 方式显示灰度图像数据的图像显示函数 IMAQ 3DView VI。它在显示图像数据时,用 OXY 平面表示像素位置坐标,而用 Z 轴表示像素,程序实现如下所示:
程序运行效果如下所示:
程序下载请参见: LabVIEW灰度图像操作与运算:3D可视化-其它文档类资源-CSDN下载
3、灰度图像运算
图像运算是指对一幅或多幅图像执行加(Add)、减(Subtract)、乘(Multiply)、除(Divide)等代数运算,与(And)、或(Or)、非(Not)、异或(Xor)等逻辑运算,两幅图像的比较(Compare)以及求模(Modulo)、求差值的绝对值(AbsoluteDifference)等操作的过程。它们不仅可用于图像采集过程中的延时比较、图像背景中的光线偏移矫正、相互连接或相互交叠图像目标的识别以及多幅图像与某一图像模型之间的对比等,还可用于图像的阈值化或遮罩处理、亮度或对比度的调节等。此外,通过对多幅相同场景的图像求平均,还能实现图像的滤波功能。
下图显示了 Nl Vision 提供的图像运算函数,它们位于 LabVIEW 的视觉与运动→lmageProcessing→Operator 函数子选板中。
函数的说明和使用可参见帮助文档:
图像运算过程遵循以下规则:
1、两幅灰度图像进行运算时,图像中的像素逐―进行点对点运算。
2、一幅灰度图像与某一常量进行运算时,图像中的所有像素均与该常量进行该运算。
3、当 RGB 彩色图像与灰度图像或某一常量进行运算时,将灰度图像或常量与 RGB 图像的每一分量进行运算。
4、两幅 RGB 图像进行运算时,对应分量进行运算。
此外,当参与运算的两幅图像类型不同时,运算后所得图像的类型将与位深度较大的图像类型保持一致。例如,类型为 U8 的灰度图像与类型为 I16 的灰度图像相加时,所得到的图像类型为 I16;当某一灰度图像减去某一常量时,所得图像的类型仍为灰度图像;U8 类型的灰度图像或常量与 RGB32 彩色图像进行运算时,得到的图像仍为 RGB32 彩色图像;RGB32 与 RGB64 图像进行运算时,将得到类型为 RGB64 的图像。
3.1、图像平均降噪
图像加法运算最常见的用途是实现图像的叠加功能。利用此功能,可以将不同图像中的目标合并到同一图像中。图像和一个常量相加可以提高图像的整体亮度。此外,利用图像相加运算可以实现图像的空间滤波功能。具体来说,可以对同一场景的多幅图像求平均,以便有效地降低加性(additive)随机噪声。对于经过长距离模拟通信方式传送的图像(如航天器传回的星际图像),这种处理必不可少。
接下来使用图像加法运算实现图像平均降噪,程序设计思路如下所示:
程序先在内存分配了 Average 和 temp 两个缓冲区。
然后枚举出保存噪声图像的文件夹中所有.png 图文件名,并将第一幅图像读入 Average 缓冲区中。
此后,For 循环逐个将其他噪声图像读入 temp 缓冲区,并与 Average 中的图像进行相加。相加的结果将替换 Average 缓冲区中的原有图像,而且其图像引用会被 shift 寄存器传递至下一次循环。在后续循环中,新读入 temp 缓冲区的图像将继续与之前 Average 缓冲区中的计算结果相加,直到所有图像都加到一起。
循环结束后,只要将 Average 缓冲区中的图像相加结果与图像总数相除,即可得到图像的平均结果。
由于图像相加过程可能出现计算结果超出原图像的数据类型范围的情况,因此在循环开始前,先将保存计算结果的 Average 缓冲区中图像的类型由 U8 转换为 I16,再在计算完成后转换为原类型。
程序实现如下所示:
运行程序并观察程序运行过程中图像的显示,不难发现经平均计算后的图像明显比原图像含有较少的噪声。
程序下载请参见:LabVIEW灰度图像操作与运算:图像平均降噪_LABVIEWVISION灰度-其它文档类资源-CSDN下载
3.2、提取夜视仪闪光故障点
图像相减运算又称为图像差分运算,常用于去除不需要的叠加性图案或检测场景的变化或运动目标。在工业环境下,如果图像背景可控,差分运算和阈值化处理结合能快速有效地建立机器视觉系统。如果将同一景物在不同时间拍摄的图像或同一景物在不同波段的图像相减,即可获得图像的差影。图像差影可用于动态监测、运动目标的检测和跟踪、图像背景的消除及目标识别等。差影技术还可以用于消除图像中不必要的叠加图像,将混合图像中重要的信息分离出来。
接下来使用图像相减运算实现提取夜视仪闪光故障点,士兵常用夜视设备在夜间进行侦察瞄准等活动,为避免出现误判,必须对设备进行稳定性试验,确保生产设备的可靠性,即正常工作环境下,输出的图像能在足够长的时间内保持稳定,且无黑斑或闪光出现。为了提取闪光点,程序在滤除两幅图像中的高频噪声后将它们相减。为了便于观察,程序还使用 IMAQ Inverse 对计算结果中的图像灰度进行了反转。
程序实现如下所示:
效果如下所示:
程序下载请参见: LabVIEW灰度图像操作与运算:提取夜视仪闪光故障点-其它文档类资源-CSDN下载
3.3、人体骨骼图像增强
图像的乘法和除法运算可用来扩展或压缩图像的灰度级,实现灰度级变换。常见的用法是图像与一个常数相乘或相除,以调整图像灰度。
乘法运算也可用来遮住或提取图像的某些部分,其典型应用是通过遮罩提取图像。提取时,对于需要保留下来的区域,掩模图像的值置为 1;而在需要被抑制掉的区域,掩模图像的值置为 0。此外,由于时域的卷积和相关运算对应于频域的乘积运算,因此乘法运算也被用作一种技巧来实现卷积或相关处理。
图像的除法运算可被看作一幅图像取反后与另一幅图像相乘的结果,它不但可用于改变图像的灰度级,还能用来检测图像间的差别。图像绝对值运算计算的是两幅图像中对应像素相减后的绝对值,而除法运算则计算对应像素的比率变化,因此也常称图像除法为“比率变换”。
接下来使用乘法运算增强人体骨骼图像,原图像中的人体骨骼很难看清,有必要将图像和一个常量相乘以扩展其灰度级,从而增强图像的亮度和对比度。程序设计思路如下所示:
程序先为图像读取分配了缓冲区 Src,并从文件 PET.tif 中读入灰度图像数据。
为了避免乘法运算过程中数据溢出,程序将读入的灰度图像类型从 U8 转换为 I16,并且分配了 I16 类型的缓冲区以保存计算结果。
IMAQ Multiply 将 I16 类型的源图像与常量 4 相乘,将其灰度级放大 4 倍。
此后再由 IMAQ Cast lmage 将计算结果转换为 U8 类型并显示在图像控件中。
程序结束前释放所有分配的缓冲区。由程序运行结果可以看出,倍乘后的图像明显比原图像易于观察。
程序实现如下所示:
效果如下所示:
版权声明: 本文为 InfoQ 作者【不脱发的程序猿】的原创文章。
原文链接:【http://xie.infoq.cn/article/d85be2b1896e5c42c0f8651b0】。文章转载请联系作者。
评论