注册登陆后可查看附件和大图,以及购买相关内容
您需要 登录 才可以下载或查看,没有账号?注册会员
x
LabVIEW Vision范例视频讲解 71.Image Averaging图像平均 LabVIEW Vision范例视频讲解教程主要是针对NI Vision Development Module视觉开发模块中的例子进行讲解。该视频教程基于VDM2020SP1版本,兼容后期直至最新的VDM2025Q1版本,VDM这些年没有进步,函数、范例、性能、功能几乎是一模一样的。 当前版本VDM的范例共有71个,本范例介绍的是最后一个图像平均。这里是按照LabVIEW32位中文版中的范例查找器中默认方式(文件夹首字母)排序的: 范例查找器>工具包和模块>视觉>运算符>Image Averaging.vi 平均图像ImageAveraging.vi程序框图 ImageAveraging.vi的程序框图相对来说是比较简单的。使用了一个三帧的平均顺序结构。第一帧是创建图像平均缓存(采集图像)、创建平均图像临时缓存(求和图像)、罗列示例图像文件夹中所有图像并读取第一幅图像。采集的图像源是U8类型的,而要求平均值时,创建的图像类型是I16类型的。求平均肯定是涉及到加法和除法的,需要把多个图像加起来,然后再除以图像数量,而在加法运算中,如果不将图像转换为位深更大的图像,那么相加后,则可能会溢出而造成错误的值。如两幅图像的同一像素的灰度值分别是200和100,在原始图像中都表现为正常的灰色,理论上求平均后值应该是(200+100)/2=150。这时如果仍然是使用U8类型的灰度图像,那么U8图像的最大值只能255,也就是前面的(200+100)并不会等于300,而是被强制为U8数据类型的最大值255,这时再除以2,则只有128,理论上的150还是有比较明显的差距的。所以,对于这种有加法、乘法的图像运算,通常都是需要转换为更高一级位深的图像。如果有减法,要考虑差值,则需要转换为I16之类的,或是使用绝对差。减法的话,小于0的负值则被强制为0值。除法通常可以不考虑位深改变,一般很少有除以小于1的小数的,一般都是除以大于1的值,所以值只会变小。 第二帧则是求平均值的过程,先对采集的原始图像使用转换图像IMAQ Cast Image函数,将共转换为I16图像。然后进入到For循环中和图像平均临时缓冲区的图像相加(图像平均临时缓冲区的图像是之前N幅图像相加的总和)。这里的For循环是用于求所有图像的总和的过程。注意一下,这里的平均图像,是对所有图像求平均,而不是简单的两幅图像求和再平均。所以,这里是先将所有文件夹中的图像加起来求和。同时For循环也计数了累积求和了多少图像数量,这个数量就是用于在后面求平均值时作为除数的。For循环执行结束后,对求和后的图像和图像数量做除法,得到所有图像的平均值,因为这里的平均值还是I16的,所以又使用了转换图像IMAQ Cast Image函数,将其重新转换回了U8类型的灰度图像。当然,这里不转换也是可以的。I16的灰度图像在LabVIEW中可以正常映射显示。 第三帧则是释放了第一帧中创建的图像平均缓存和图像平均临时缓存,以及一个简单的错误处理。这一帧可有可无,LabVIEW中可以自动处理图像缓存,不释放也不会造成内存溢出。 平均图像范例整体来说是一个比较简单的示例,只需要注意一下求解过程中需要升位避免数据溢出错误,其他的则没有什么难度。 平均图像效果1:5幅图像 平均图像效果2:20幅图像 平均图像的效果,主要是降噪。如果图像有很大的噪声(例如说相机的增益开的很大,照明不够时),使用这种方法可以改善图像的效果。但是这种方法是在牺牲速度为前提的。采集多幅图像并求平均这个过程,和单个图像比,花费的时间肯定不是一个量级的。 71.ImageAveraging图像平均视频讲解:
|