Demosaic算法实战编码分享,demosaic

Demosaic算法将bayer pattern的图像转换成RGB图像,是整个ISP imaging pipeline的核心,由于成本、面积、制造等限制,CMOS/CCD在成像时,感光面阵列前通常会有CFA(color filter array),如下图所示。CFA过滤不同频段的光,然后Sensor输出的RAW数据包含了3个通道的信息。由于人眼对绿色(大约550nm波长)光更敏感,因此CFA阵列包含1/2的G分量,1/4和R和1/4的B分量。

Demosaic算法简单来说就是插值,根据邻域像素的色彩插值出本像素的值。但是简单的双线性插值的方法在IQ上面有缺陷,在图像的边缘,会产生伪彩色。本文采用的Demosaic算法是G基于边缘方向 RB基于色差恒定。

输入一幅RGB图像,先用Matlab进行RGB2Bayer转换得到仿真激励图像bin文件,再用Verilog进行Demosaic算法处理从而得到Bayer2RGB转换。

MATLAB程序:

clc;clear;close all;imSrc =imread('bandao.jpg');figure,imshow(imSrc);[hei, wid, chan] =size(imSrc);bayer =uint8(zeros(hei,wid));% RGGB% R G R G R G% G B G B G B% R G R G R Gfor ver = 1:hei; for hor = 1:wid if((1 == mod(ver,2)) && (1 ==mod(hor,2))) bayer(ver,hor) = imSrc(ver,hor,1); elseif((0 == mod(ver,2)) && (0== mod(hor,2))) bayer(ver,hor) = imSrc(ver,hor,3); else bayer(ver,hor) = imSrc(ver,hor,2); end endendfigure,imshow(bayer);

得到Bayer图像数据:

 

仿真输出的图片:插值效果和原图十分接近!!

再和原图相比较,江面和草丛边沿有一定伪彩色出现:拉链效应(zipper effect)相比双线性插值明显好很多,但也存在伪彩(false color)。今天先开题,后面继续深入ISP实践。

编辑:黄飞


相关推荐

相关文章