LabVIEW VISION相机RAW数据获取与读写文件
我们知道,在单反相机中,相机可以输出RAW格式的原始图像数据文件。就是未经处理过的原始数据。而在LabVIEW & NI VISION环境中,我们也可以将工业相机中的图像,保存为JPEG、PNG、BMP、TIF等图像格式,但是在NI VISION中,并不能直接保存RAW格式的文件。要想将工业相机的RAW数据保存下来,并能再读出来显示,则需要通过LabVIEW编程,经过一些方法才可以实现。
LabVIEW VISION RAW数据获取与读写文件
LabVIEW VISION环境中,获取相机的RAW数据,关键一点是需要使用视觉采集软件中的IMAQdx Get Image Data函数:
IMAQdx Get Image Data
通过该函数,将获取到相机的Raw数据。然后再对该数据进行一定的处理,则可以将其显示为直观的图像。
使用该函数获取Raw数据非常简单,只需要直接调用即可,在前面使用Open、Configure等函数,然后调用该函数即可获得数据。重点是获取数据后,如何将其显示为直观的图像。因为不同的工业相机、图像的位数、颜色都是不一样的,所以最后输出的Image Data Array是不同的。这也是为什么各大单反厂家的Raw格式也不兼容的原因。RAW并不是一种标准格式,而是原始的数据。
采用二进制格式保存的RAW数据文件
上面的图像RAW数据,为500万像素的彩色相机文件大小,数据为原始的RG拜尔模式的8位图像。
读取RAW文件显示为图像
RAW模式实时采集图像
RAW模式与Grab模式同时采集图像
Raw模式与Grab模式,在有些图像类型中的效果是一样的,但是在某些图像效果中,则是有差别的。在8位时,差别不大;在16位时,则有一定的差别。这要看具体的图像类型:
U8灰度图像效果上差不多
U16灰度图像上效果有差别
I16灰度图像上效果有差别
在U8的图像上,RAW模式与GRAB模式效果上差不多。但是在U16/I16的效果上,则有差别。U16/I16灰度图中,RAW模式的对比度更高,锐度更好。但是低燥更明显:
16位模式图中RAW模式低燥明显
16位模式图中RAW模式低燥明显
这个问题,是不是在Grab函数中有优化,还是其它的如12位AD取值位数有关,没有深入研究。
从上面的彩色图像效果中看到,工业相机支持拜尔模式,这时输出的RAW参数,则是以拜尔模式为准的,例子使用的是大恒图像MER-504-10GC网线相机,使用的是RG模式的拜耳模式。
而如果相机不支持拜耳模式,而直接输出编码后的RGB值,则输出的RAW数据又是另外一种方式:
笔记本内置摄像头的RAW模式与GRAB模式
摄像头直接输出了编码后的RGB值作为RAW数据,而不是编码前的拜耳值。所以这种摄像头,获取RAW数据并没有什么太多的强化作用。这里需要注意一下,看上面的像素值与RAW值,在RAW值中,一个像素的RAW值包含了BGRA,即蓝色、绿色、红色、阿尔法透明通道等四个通道的值。而Grab与RAW模式的RGB值略有不同,因为是两次分别采集后的效果图,有差别是正常的。
所以,在从上面的分析可以发现,8位灰度图像、编码后的RGB32位彩色图像,RAW模式与GRAB模式没有区别。使用RAW格式,没有什么调整空间。但是在16位图以及拜尔模式的彩色图像中,则RAW格式会有一定的调整空间。例如16位的灰度图,可以取0-7位的值作为新的8位灰度图,也可以取1-8位的灰度值作为原始数据,即LSB取值不同时,得到的效果也是不同的。如果忽略掉低位的值,则低噪影响会更小一些。而拜尔模式,则可以再调整图像的RGB增益,也就是白平衡值,来获得不一样的值,也可以调整拜耳算法,以获得更佳的图像效果。单反相机,应该是获得了其中的拜尔值,才会在后面提供了可调整的空间。