缘起
使用海康彩色相机,采集到的图像数据是Bayer GR8格式的,如果在相机参数中改为其它彩色格式,那就是相机内部完成格式转化,就会导致采集帧率变慢。一般情况下这种方式是简单实用的,但如果想要追求更高的效率,就应该把这个耗时的过程拿到程序中来,让程序在进行格式转化的时候可以同时进行下一步动作。
之前用的是德国相机,在相机转换格式并没有发现影响帧率,有点好奇彩色相机为什么要采用Bayer这种格式的。查了一些资料,发现这是彩色相机的常用方式,主要是为了节约成本,提高效率。因为我们看到的图像颜色都是通过红绿蓝三色组合而成的,在没有一种直接采集颜色传感器的情况下,如果要采集一个像素点的颜色,就要用红绿蓝三种遮光镜,让相机采集三组数据,这无疑是费事费时的。而Bayer格式就是省去三分之二的遮光镜,通过一个像素一个遮光镜,RGB间隔排列的方式,采集到的图像数据。
名词解释
RGB图片格式:RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是运用最广的颜色系统之一。
Bayer图片格式:bayer格式图片是伊士曼·柯达公司科学家Bryce Bayer发明的,Bryce Bayer所发明的拜耳阵列被广泛运用数字图像。Bayer格式是相机内部的原始图片, 一般后缀名为.raw。很多软件都可以查看, 比如PS。我们相机拍照下来存储在存储卡上的.jpeg或其它格式的图片, 都是从.raw格式转化过来的。
图片的8位、16位、24位等:数据位数主要是指存储灰度值或颜色值的数据大小,比如8位,就是指用8个位来存储一个像素点的数值,按十进制也就是0-255,这也是图像上常见的灰度值大小;由此可知,16位及更高位数,就是把灰度值分得更细,也就是表达亮度和色彩更准确。
原理介绍
我们的起点是相机采集到Bayer图像数据,我们的终点是RGB的图像数据。由下图可以看出,Bayer图像数据其实是缺省状态的,也就是一个像素点只表示一种颜色,而如果要得到像素总数相同的RGB图像,就需要把缺失的颜色值补充回来。比如第一个像素点的颜色是G(绿色),那我们就要把它缺失的R(红)和B(蓝)的颜色值补回来;第二个点是颜色R的值,那就要把G和B的值补回去,……把每个像素点缺失的另外两种颜色值补回去,就得到了同像素的RGB图像。这也叫Bayer插值处理。
当然具体的插值方式有很多种(包括领域、线性、3*3等),我采用的是比较好理解的线性插值,就是用当前像素点周边的另外两种颜色值的平均值,来作为当前像素点的数值,这样就把当前像素点缺失的另外两个颜色值补回来了。如下图所示,我当前像素的数值是R值,我要知道当前的G值,就要把周边的G值加起来求平均,而要得到B值,也是用周边的值求平均,依次可以求出其它所有点。
得到了RGB图像数据之后,就可以直接转化成需要的彩色图像了。
实现方法
从原理知道,转换其实挺简单的,就是给当前像素点再添加两个平均值,而通过循环把所有像素点都处理一遍,就可以得到RGB的图像了。
我是使用labview实现的这个转化,知道原理,其它语言其实也很容易实现,甚至比我这种连线的方式更简洁些。
注意:我这里的源数据是GR 8位的图像数据,输出了RGB数据,但我的数组大小并没有变为原来的三倍,因为我把R G B这三个8位的数值拼成了一个24位的数据,相当于用一个24位的数同时分别表达了RGB的三个数值。
具体实现如下图所示:
1、通过两个for循环,遍历所有像素点,并给每个像素点添加两个颜色值;
2、根据当前像素点的位置不同,分成四种情况,可以看上面的色彩排列图理解;
3、分四种情况分别处理,其中0和3一组,1和2一组,都只是最后拼接顺序不同。
后续方向:
1、插值的效果不一定是最好的,根据不同图片和不同要求,可能要选择其它插值方式;
2、运行速度应该还有可优化的地方,这是最老实巴交的一种转化方式了。
参考文章:
海康彩色工业相机图像格式转换方法(Bayer转RGB)https://blog.csdn.net/qq_23107577/article/details/113258116
图像bayer格式及bayer插值原理介绍https://blog.csdn.net/cjie221/article/details/88932686文章来源:https://www.toymoban.com/news/detail-485762.html
图像bayer格式介绍以及bayer插值原理CFAhttps://www.cnblogs.com/qiqibaby/p/5267566.html文章来源地址https://www.toymoban.com/news/detail-485762.html
到了这里,关于Bayer到RGB,格式转换原理及具体实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!