[转] Bayer转为RGB 2x2

本文转自:茜茜的技术空间  

http://www.cnblogs.com/anne-vista/archive/2013/04/02/2996472.html


RGB Bayer转为RGB

Raw RGB 每个像素只有一种颜色(R、G、B中的一种); 
RGB 每个像素都有三种颜色,每一个的值在0~255之间; 
在手机摄像头的测试过程中,由sensor输出的数据就是Raw data(Raw RGB),经过彩色插值就变成RGB。

也不一定就是测试过程,想要获得真正的图像,都必须有的一个过程; 
sensor输出的数据格式,主要分两种:YUV(比较流行),RGB,这就是sonsor的数据输出;这其中的GRB就是Raw RGB,是sensor的bayer阵列获取的数据(每种传感器获得对应的颜色亮度); 
但是输出的数据不等于就是图像的实际数据,模组测试时,就要写一个软件,完成数据采集(获得Raw data)->彩色插值(目的是获得RGB格式,便于图像显示)->图像显示; 
这样就可以发现整个模组是否正常,有无坏点,脏点的等,检测出不良品;(软件的处理过程当中,为了获得更好的图像质量,还需要白平衡,gamma校正,彩色校正) 
而在手机的应用中,手机根据相机模组的数据格式,提供一个ISP(主要用于RGB格式的),配合软件,使照相功能得到应用;

-----------------------------------------------------------------------------------------------------

RGB Bayer(CMOS sensor直接输出的数据)

5341718

可以看出, Bayer 模式每一个像素只取RGB颜色空间中一种颜色分量, 奇数行包含G, B分量, 偶数行包含R, G分量, 奇数列包含G, R分量, 偶数列包含B, G分量。采用线性插值。

插值算法:所有像素点插值时都以包含其右下角四个像素点插值,用寄存器存储两行值。data_control={行(奇偶),列(奇偶)}

G有8679640, 8695578; B有8707781,R有8723343

算法如图所示:

(行计数从上到下,列计数从左到右)

8078125

移位寄存器Line_Buffer

5904500

代码如下:

复制代码

reg        [11:0]    rRed; 
reg        [12:0]    rGreen; 
reg        [11:0]    rBlue; 
reg        [11:0]    wData0_d1; 
reg        [11:0]    wData1_d1;

Line_Buffer    L1    (
                    .clken(iDval),
                    .clock(iCLK),
                    .shiftin(iData),
                    .shiftout(),
//                    .taps1x(wData0),
//                    .taps0x(wData1),
                    .taps({wData0,wData1})
                );

assign  data_control = {iMIRROR?~iY_Cont[0]:iY_Cont[0],iMIRROR?iX_Cont[0]:~iX_Cont[0]};

always@(posedge iCLK or negedge iRST_n)
    begin
        if (!iRST_n)
            begin
                wData0_d1<=0;
                wData1_d1<=0;
                rDval    <=0;            
            end
        else
            begin
                wData0_d1<=wData0;
                wData1_d1<=wData1;
                rDval    <=iDval;
            end
    end        
    
always@(posedge iCLK or negedge iRST_n)
    begin
        if (!iRST_n)
            begin
                rRed  <= 0;
                rGreen<= 0;
                rBlue <= 0;    
            end

        else if ( data_control== 2'b10)  
            begin
                rRed     <=    wData0;
               rGreen    <=    wData0_d1+wData1;
               rBlue     <=    wData1_d1;
            end    
        else if ( data_control== 2'b11) 
            begin
                rRed     <=    wData0_d1;
               rGreen    <=    wData0+wData1_d1;
               rBlue     <=    wData1;
            end
            
        else if ( data_control== 2'b00)
            begin
                rRed     <=    wData1;
               rGreen    <=    wData0+wData1_d1;
               rBlue     <=    wData0_d1;
            end    
        
       else if ( data_control== 2'b01)
            begin
                rRed     <=    wData1_d1;
               rGreen    <=    wData0_d1+wData1;
               rBlue     <=    wData0;
            end        
    end
复制代码


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值