Demosaic算法实战编码分享

编程语言及工具

99人已加入

描述

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 G
for 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
 end
end
figure,imshow(bayer);

得到Bayer图像数据:

 

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

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

编辑:黄飞


打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分