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有86796408695578; 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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM