Raw数据作为图像的原始数据,其在图像处理上的天然优势是毋庸置疑的,以该数据为处理对象对图像的损失会非常小,同时其黑白影调范围较大,画面通常都十分柔和自然。 在基于OV5640的RAW2RGB实验中,我们就是通过配置摄像头输出RAW格式数据的图像数据,通过转换模块转换为RGB888格式化数据进行显示。在整个工程中对于RAW 数据的处理有几个重要的知识点:
1. raw图像数据位置的确定 将RAW数据转换为RGB888数据的方式是进行2X2矩阵运算,分别得出RGB分量的值,2X2的RAW矩阵有四种排列可能:
排列规律 每一个2X2RAW矩阵代表一个RGB像素,红色代表了RGB三种分量中的R分量,蓝色代表了B分量,绿色的平均值为G分量。根据2X2RAW矩阵的排列顺序我们就可以计算出对应点的RGB像素值。
2. 像素位置的确定 在我们知道了像素的排列规律和计算方式后,该怎么知道对应像素点的矩阵排列顺序呢?观察下图OV5640中的像素物理分布我们可以发现,每个奇数行间隔放置绿色(Gr)和红色(R)感应像素;每个偶数行间隔放置绿色(Gb)和蓝色(B)感应像素;每个奇数列间隔放置绿色和蓝色感应像素;每个偶数列间隔放置红色和绿色感应像素。根据此我们完全可以建立一个奇偶坐标,通过对应点的奇偶坐标值知道该点对应的颜色分量以及其排列顺序。
像素物理分布图 根据像素排列顺序和橡树分布,我们可以得出如下2X2RAW矩阵奇偶坐标与排列组合的关系: 像素奇偶坐标与排列规律
为了方便理解,我们这里进行几个举例说明,假设要计算RGB颜色点为: 第三行第二列:该点对应奇偶坐标为(1,0),所以其排列组合为左下角的2X2RAW矩阵像素。 第八行第七列:该点对应奇偶坐标为(0,1),所以其排列组合为右下角的2X2RAW矩阵像素。 跟据该方式得出矩阵像素后我们即可得出对应点的RGB像素值。
3. 一些思考 该计算方式虽然可行,但是会存在以下几个误差: a.进行RAW转RGB的第一帧(由于DVP_Capture会删除前十帧,因此是总像素数据的第十一帧),图像会缺少第一行的像素数据导致画面上移一格,但是由于图像帧率刷新速度较快,且一行数据在800行中占比不大,该误差不会有太大影响。 b.由于图像数据是连续的,因此下一帧的第一行图像数据是该行的RAW数据与上一帧图像最后一行的RAW数据计算得来的,而作为画面的开始与结束行,颜色差距往往较大,因而会导致每帧画面的第一行出现比较明显的线条,该线条会持续出现在后续每一帧的第一行,属于算法上的问题,将在后续进行优化。
|