完成机器视觉系统的搭建、校准并且确认其可以采集检测目标的图像后,就可以集中精力开发各种图像分析、处理以及模式识别算法。为了设计准确性和鲁棒性都较高的算法,并提高其执行速度,一般需要事先对整幅图像或部分像素进行操作,使图像尺寸或形状更适合计算机处理。某些时候还要对图像进行算术和逻辑运算,以消除噪声或提高图像的对比度。这些前期的图像操作或运算不仅会在空间域增强图像,还能极大地提高后续算法的执行速度及其有效性。
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)位置。
程序设计如下所示:
程序运行效果如下所示:
程序下载请参见:https://download.csdn.net/download/m0_38106923/18397695
2、灰度图像操作
图像操作(Image Manipulation)是指对图像执行的平移(Shift/Translation)、旋转(Rotate)、缩放(Zoom)、拉直(Unwrap)等几何变换以及重新采样、对称