CrazyBingo

【连载6.2.2.1】写在前面的话

0
阅读(1706)

万事开头难,这一步确实比较难:首先如果我们配置OV7725输出RGB565时序,那么也可以转通过RGB565扩展RGB888,再转YUV后提取Y得到灰度图像;或者也可以配置OV7725输出YUV422时序,然后各一个时钟提取Y数据得到灰度图像,然后用于图像处理。但是这样的做法有点欠缺,因为无论是RGB565还是YUV422,都是一个像素2个Byte的数据,因此帧率只能达到1半(30FPS),且需要使能时钟(隔一个时钟Y有效)采集/处理数据,时序不能兼容灰度相机,非常的麻烦。

但是,如果我们采用原始Bayer模式,采集OV7725的RAW图像,则是每一个时钟输出一个像素数据。然后我们设计算法将Bayer转换为RGB888,不仅可以保证不变的时钟/帧率的前提下,得到没个时钟24bit的深度,而且数据是连续的不会间隔。在此基础上我们做RGB转YUV提取Y,那么可以得到满帧率的灰度数据,最高60FPS,并且是8bit深度的——这才是最完美的。

申明:灰度相机(MT9V034 MT9M001 AR0144)直接输出灰度,不用care。

因此,本节中,我们将直接捕获CMOS输出的8Bit Bayer阵列的RAW数据,通过最基础的Bayer转RGB888算法,从硬件中实现功能,以便于后续的彩色图像处理的硬件加速(这完全不同于PC实现Bayer阵列的恢复,虽然Bingo的USB_VIP_Panel已经包含了软件恢复功能,但由于复杂度略高,再FPGA中只是先了粗略的功能)。

备注:工作后才发现,Bayer转RGB算法的专用名词是Demosaic,是ISP中非常重要的环节,担任着色彩恢复、分辨力提升等重要任务,同时NB的算法也是在Bayer域做的去坏点/锐化/对比度/增强等,毕竟这是最原始的数据,最不容易引入计算噪声以及误差等。