LabVIEW如何估计图像的位深
LabVIEW如何估计图像的位深LabVIEW如何估计图像的位深视频号https://www.bilibili.com/video/BV1s142197Ld/LabVIEW如何估计图像的位深B站在NI视觉助手中,打开16位图像时,有一个估计图像的位深的功能,其是基于图像的值来估计的。原理上就是根据当前图像的最大值来估计图像可能的位深,例如说10位深的相机最大输出值就只能是1023,那么得到的图像的最大值如果没有超过1023,那么视觉助手就认为这个图像是10位的;而如果是12位深的相机最大输出值则是4095,如果图像中有值在1024~4095之间,那么就认为这个图像是12位的深度。在LabVIEW Vision的环境中,则没有这样的位深估计函数。要想实现这样的功能,那就只能自己写位深估计函数。当然实现起来也是非常简单的,和视觉助手中的原理一样,根据图像中的最大值做判断即可。视觉助手中基于图像的值估计位深估计位深前面板和接线端估计位深.vi程序框图估计位深函数的实现也是比较简单的,使用直方图函数得到图像中的最大值,然后根据最大值的区间范围来判断图像的位深。直方图函数直方图函数的Histogram Report中有最大值的输出得到最大值后,就可以根据最大值所在的区间范围来判断图像的位深了。Histogram Report中的Maximal Value是SGL单精度浮点形,非整数类型的数据,是不能直接用于比较是否相等的,所以这里加了一个强制转换为U16的类型,将SGL转换为U16,其实不加这个转换也是可以的,直接将SGL连接到后面的区间判断的条件结构中,会自动强制转换为整数,不过这时转换得到的数据类型是I32。这里为了规范,还是直接强制转换为了U16。之后就是区间判断了。8位深的图像值范围是0~255;10位深的图像值范围是0~1023;12位深的图像值范围是0~4095;14位深的图像值范围是0~16383;16位深的图像值范围是0~65535。这里不考虑9位、11位、13位、15位这样的奇数位的,确实是没有看到过奇数位深度的。虽然理论上也是可以有奇数位的。另外,像14、16这样的有没有必要判断,需要自行考虑,实际应用中,作者就没有看到过有哪款相机的ADC能有14位或16位的,能到12位的就已经是比较好的了,有一些差一些的图像传感器,ADC还只有10位的。当然,在视觉助手中,因为读取图像的U16或I16,总是认为图像是16位而非8位,所以其在估计位深时,即使最大值小于255,也认为是10位的,并不考虑8位,在我们这里讨论时,则将小于255的图像估计为8位。下面来看一下效果:LabVIEW如何估计图像的位深.vi程序框图最大值176估计位深是8位最大值750估计位深是10位最大值1227估计位深是12位最大值1799估计位深是12位最大值2842估计位深是12位最大值4095估计位深是12位最大值7095估计位深是14位最后的最大值7095是在最大4095的图像基础上,使用了加法,加了3000的常量后得到的。实际的12位的芯片的工业相机输出的最大值只能是4095的图像。得到了位深函数后,可以在后面使用我们前面介绍的视频,来显示RGB64位图像,或者是设置图像的位深等操作。LabVIEW如何显示RGB64彩色图像视频号在后面可以加设置位深的函数来设置不同的位深,以显示不同的效果:估计位深+设置位深要设置位深,需要将Image控件的调色板模式改为彩虹模式或其他非二值、灰度图像,同时将16位映射方式改为默认值或Most Significant Bits最高有效位,如果是使用是全动态或其他方式,则可能无法区别显示设置的位深的效果。将16位图像显示映射的转换方法改为默认值或最高有效位下面是同一幅图像设置不同位深时的彩虹调色板的显示的不同效果:设置位深为12位时效果设置位深为13位时的效果设置位深为14位时的效果设置位深为15位时的效果设置位深为16位时的效果VI版本LV2020SP1:真的是好东西呀,学习机器视觉的上呀
页:
[1]