camera理論基礎和工作原理

loongembedded發表於2019-01-02

https://www.cnblogs.com/fjutacm/p/220631977df995512d136e4dbd411951.html

寫在前面的話,本文是因為工作中需要編寫攝像頭程式,因為之前沒有做過這類產品,所以網上搜尋的資料,先整理如下,主要參考文章如下,如果有侵權,請聯絡我;另外,轉載請註明出處。本文不一定全部正確,如果發現錯誤請指正。如果有新的理解,會繼續整理。

 

http://blog.csdn.net/xubin341719/article/details/7723725

http://blog.csdn.net/pengwentao/article/details/7180115

http://blog.csdn.net/southcamel/article/details/8305873

http://blog.csdn.net/xubin341719/article/details/7727041

http://wenku.baidu.com/link?url=rF0-i3pP_hkf2-Lz_eFn-qN7vv6Md8HBMOKIIqnFpZGtCEPmla2gvMKlPmlkQYxoXeKLUNYsCXn1vB7Zdn2ge-XZcQzJR30-DraXuBG1kFu

GalaxyCore GC0308 DataSheet

 

 

導讀:

一、攝像頭模組CCM

二、攝像頭工作原理

 

 

一、攝像頭模組(CCM)

    1、camera特寫

    攝像頭模組,Camera Compact Module,簡寫為CCM,是影響捕捉的重要元器件,我的理解就是硬體上的攝像頭。如下圖:

 

 

 

    2、攝像頭內部分解

    攝像頭硬體結構圖:

 

     (1)、工作原理

    光線通過鏡頭Lens進入攝像頭內部,然後經過IR Filter過濾紅外光,最後到達sensor(感測器),senor分為按照材質可以分為CMOS和CCD兩種,可以將光學訊號轉換為電訊號,再通過內部的ADC電路轉換為數字訊號,然後傳輸給DSP(如果有的話,如果沒有則以DVP的方式傳送資料到基帶晶片baseband,此時的資料格式Raw Data,後面有講進行加工)加工處理,轉換成RGB、YUV等格式輸出。

     (2)、鏡頭 Lens

    鏡頭是相機的靈魂,單反中一個鏡頭上萬是很隨意的事。鏡頭對成像有很重要的作用,相當於人眼中的晶狀體,利用透鏡的折射原理,景物光線透過鏡頭在聚焦平面上形成清晰的像,然後通過感光材料CMOS或CCD記錄影像,並通過電路轉換為電訊號。鏡頭產業有比較高的技術門檻,國外主要集中在日本、韓國,國內主要是在臺灣,業內比較知名的如:富士精機、柯尼卡美能達、大力光、Enplas等。

    Lens一般由幾片透鏡組成透鏡結構,按材質可分為塑膠透鏡(plastic)或玻璃透鏡(glass),玻璃鏡片比樹脂鏡片貴。塑膠透鏡其實是樹脂鏡片,透光率和感光性等光學指標比不上鍍膜鏡片。

    通常攝像頭採用的鏡頭結構有:1P、2P、1G1P、1G2P、2G2P、2G3P、4G、5G等。透鏡越多,成本越高,相對成像效果會更出色(個人理解是光線更均勻、更細緻;對光線的選通更豐富;成像畸變更小,但是會導致鏡頭變長,光通量變小)。

 

    (3)、紅外濾光片 IR Filter

    主要是過濾掉進入鏡頭的光線中的紅外光,這是因為人眼看不到紅外光,但是sensor卻能感受到紅外光,所以需要將光線中的紅外光濾掉,以便影象更接近人眼看到的效果。

    (4)、感測器 Sensor

    sensor是攝像頭的核心,負責將通過Lens的光訊號轉換為電訊號,再經過內部AD轉換為數字訊號。每個pixel畫素點只能感受R、G、B中的一種,因此每個畫素點中存放的資料是單色光,所以我們通常所說的30萬畫素或者130萬畫素,表示的就是有30萬或130萬個感光點,每個感光點只能感應一種光,這些最原始的感光資料我們稱為RAW Data。Raw Data資料要經過ISP(應該理解為Image Sensor Processor,是Sensor模組的組成部分,下面有解釋)的處理才能還原出三原色,也就是說如果一個畫素點感應為R值,那麼ISP會根據該感光點周圍的G、B的值,通過插值和特效處理等,計算出該R點的G、B值,這樣該點的RGB就被還原了,除此之外,ISP還有很多操作,下面有介紹。

   目前常用的sensor有兩種,一種是CCD(電荷耦合)原件;一種是CMOS(金屬氧化物導體)原件。

    >>CCD(Charge Coupled Device),電荷耦合器件感測器:使用一種高感光度的半導體材料製成,能把光線轉變成電荷,通過模數轉換器晶片轉換成電訊號。CCD由許多獨立的感光單位組成,通常以百萬畫素為單位。當CCD表面受到光照時,每個感光單位都會將電荷反映在元件上,所有的感光單位產生的訊號加在一起,就構成了一幅完整的影象。CCD感測器以日本廠商為主導,全球市場上有90%被日本廠商壟斷,索尼、松下、夏普是龍頭。

    >>CMOS(Complementary Metal-Oxide Semiconductor),互補性氧化金屬半導體:主要是利用矽和鍺做成的半導體,使其在CMOS上共存著帶N(-)和P(+)級的半導體,這兩個互補效應所產生的電流可以被處理晶片記錄並解讀成影像。CMOS感測器主要以美國、韓國和台灣為主導,主要生產廠家是美國的OmnVison、Agilent、Micron,台灣的銳像、原相、泰視等,韓國的三星、現代。

    (5)、影象處理晶片 DSP

    DSP是CCM的重要組成部分,它的作用是將感光晶片獲得的資料及時地快速地傳遞到中央處理器並重新整理感光晶片,因此DSP晶片的好壞,直接影響畫面品質,如:色彩飽和度、清晰度、流暢度等。如果sensor沒有整合DSP,則通過DVP的方式傳輸到baseband晶片中(可以理解為外掛DSP),進入DSP的資料是RAW Data,採集到的原始資料。如果整合了DSP,則RAW Data會經過AWB、color matrix、lens shading、gamma、sharpness、AE和de-noise處理,最終輸出YUV或者RGB格式的資料。如下圖中所示,ISP(Image Sensor Processor,不是Image Signal Processor)部分中使用的就是DSP來處理Image sensor的輸出資料(Raw Data):

    

 

    DSP結構框架:

    >>ISP(Image Signal Processor),映象訊號處理器或者影象訊號處理器

    >>JPEG encoder,JPEG影象編碼器,有軟體硬體之分。

    (6)、DVP

    DVP分為三個部分:輸出匯流排;輸入匯流排;電源匯流排;如下圖:

    

 >>輸入匯流排介紹

    a>PWDN是camera的使能管腳,有兩種配置方式,一種為standby,一種是normal work,設定為standby的時候,一切對camera的操作都是無效的,包括復位。所以在RESET之前,一定要將PWDN管腳設定為normal模式,否則RESET無效。

    b>RESET是camera的復位管腳,此方式為硬復位模式,camera的各個IO口恢復到出廠預設狀態。只有在XCLK開啟後,將RESET置為低,硬復位才有效,否則復位無效。

    c>XCLK是camera的工作時鐘管腳,此管腳為BB提供camera的工作時鐘。

    d>IIC是camera和BB通訊的匯流排通道。

>>輸出匯流排介紹

    a>data為camera的資料管腳。此資料腳可以輸出的格式有YUV、RGB、JPEG等。

    b>VSYNC為camera的幀同步訊號管腳。一個VYSNC訊號結束表示一幀(即一個畫面)的資料已經輸出完畢。

    c>HSYNC為camera行同步訊號管腳。一個HSYNC訊號結束表示一行的資料已經輸出完畢。

    d>PCLK為畫素同步訊號管腳。一個PCLK訊號結束表示一個畫素點的資料已經輸出完畢。    

>>Power線介紹

    a>AVDD為camera的模擬電壓。

    b>DOVDD為camera的GPIO口數字電壓。

    c>DVDD為camera的核工作電壓。

    一般來說,要求先提供sensor的GPIO口電壓,接著提供模擬電壓,最後提供工作電壓。時序如下圖:

    (7)、FPC柔性電路板(柔性PCB)

  簡稱"軟板", 又稱"柔性線路板",連線晶片和手機。起到電訊號傳輸作用。

    (8)、ISP、DSP、基帶晶片的區別和聯絡

    幾篇文章中出現的術語,這裡做個專門的補充。

  >>常見基帶處理器或者基帶晶片負責資料處理與儲存,相當於一個協處理器,主要元件為DSP、微控制器、記憶體(如SRAM、Flash)等單元,主要功能為基帶編碼/譯碼、聲音編碼及語音編碼 等。目前主流基帶架構:DSP+ARM。可分為五個子塊:CPU處理器、通道編碼器、DSP、調變解調器和介面模組。

    基帶晶片是用來合成即將的發射的基帶訊號,或對接收到的基帶訊號進行解碼。具體地說,就是:發射時,把音訊訊號編譯成用來發射的基帶碼;接收時,把收到的基帶碼解譯為音訊訊號。同時,也負責地址資訊(手機號、網站地址)、文字資訊(短訊文字、網站文字)、圖片資訊的編譯。

    >>ISP,Image Signal Processor,影象訊號處理器;DSP,Data Signal Processor,數字訊號處理器。

    ISP一般用來處理Image Sensor(影象感測器)的輸出資料,如進行:AEC(自動曝光控制)、AGC(自動增益控制)、AWB(自動白平衡)、色彩校正、Gamma校正、祛除壞點、Auto Black Level、Auto White Level 等等功能的處理。

    >>而DSP功能就比較多了,它可以做些拍照以及回顯(JPEG的編解碼)、錄影以及回放(Video 的編解碼)、H.264的編解碼、還有很多其他方面的處理,總之是處理數字訊號了。可以認為ISP是一類特殊的處理影象訊號的DSP。

  在這篇文章中,可以將基帶晶片當做開發板上的控制晶片,ISP和DSP可以對等,都是對Raw Data進行處理。這裡尊重原文作者的說法,並沒有統一。

    還有要注意的是,在攝像頭這部分,要看清楚ISP表示的是什麼,是Image Signal Processor(影象訊號處理器),還是Image Sensor Processor(影象感測器處理器)。像上面的OV2665裡面的ISP就是Image Sensor Processor,相當於Sensor模組中的一部分,由DSP做處理器。而下面的GC0308,則正好相反,是Image Signal Processor,是一個真正的處理器,所以在看到ISP的時候要根據語境看指的是一個具體的處理器還是模組的組成部分而非實指。

    

 

    

    3、CCM組裝方式

    (1)、定焦CCM組裝

    CCM分為定焦模組和自動變焦模組,其中定焦模組主要由鏡頭、鏡座、感光積體電路、軟性線路板、補強和鋼片裝配而成,其裝配圖如下:

    

 

    (2)、自動變焦模組組裝

    主要是鏡頭下面裝了一個VCM音圈馬達

    

    (3)、3D模組

    多臺攝像頭拍攝影象,然後組合:

    

 

 

     4、攝像頭的一些技術指標

    (1)、影象解析度/解析度(resolution)

QSIF/QQVGA 160 x 120 19200  
QCIF  176 x 144 25344  
SIF/QVGA 320 x 240    76800  
CIF 352 x 288   101376  10萬畫素
VGA   640 x 480 307200 30萬畫素(35萬是指648X488)
SVGA 800 x 600 480000 50萬畫素
XGA 1024 x 768 786438 80萬畫素
SXGA  1280 x 1024  1310720    130萬畫素
UXGA 1600 x 1200 1920000   200萬畫素
QXGA  2048 x 1536 3145728  300萬畫素(320W)
QSXGA 2592 x 1944 5038848 500萬畫素
  2816 x 2112 2947392 600萬畫素
  3072 x 2304  7077888 700萬畫素
  3200 x 2400 7680000 770萬畫素
  3264 x 2448  7990272  800萬畫素
  3876 x 2584 10015584 1000萬畫素

 

    (2)、sensor輸出的影象格式

    >>YUV:luma(Y)+chroma(UV)格式(亮度、色度),一般情況下sensor支援YUV422格式,即Y-U-Y-V次序輸出資料。

    >>RGB:傳統的紅綠藍格式,比如RGB565,5bit R + 6bit G + 5bit B,G多一位是因為人眼對綠色比較敏感。

    >>RAW RGB:sensor的每一畫素對應一個彩色濾光片,濾光片按Bayer Pattern(拜耳模板)分佈,將每一個畫素的資料直接輸出,即Raw RGB Data。

    >>JPEG:有些sensor,特別是低解析度的,其自帶JPEG engine,可以直接輸出壓縮後的jpg格式的資料。

    注意

    a>YUV一個畫素佔2B,如果畫素太大,在高時鐘下基帶晶片處理不過來,JPEG資料量就要小很多,因為基帶晶片對輸出資料的速率有要求,所以基帶晶片低時鐘下使用YUV sensor,高時鐘下使用JPEG sensor。

    b>如果直接輸出RGB,對於LCD顯示是最方便的,但是大多數基帶晶片都是要求輸出為YUV格式的資料再進行,這是因為,YUV輸出資料的亮度訊號沒有任何損失,而色偏訊號人眼並不是特別敏感,RGB565輸出格式是R5G3 G3B5,會丟失很多原始資訊,所以YUV影象質量和穩定性要比RGB565好的多。因此,很低端的基帶晶片上才會輸出RGB565格式。

    Raw和JPEG的區別:

    Raw優點:

    1>Raw格式檔案本質上是一個沒有經過任何影象處理的原始檔,它能原原本本地記錄相機拍攝的資訊,沒有經過影象處理(銳化、色彩對比增強)和壓縮而造成的資訊丟失。相比之下,JPEG格式的資料經過壓縮處理,無法完整的儲存原圖形的所有資料。

    2>Raw是一種專業攝影師常用的格式,因為它能原原本本地儲存資訊,讓使用者能大幅度進行後期製作,並且無論怎麼操作,照片都能無損的恢復到最初狀態;但是JPEG就弱了些,雖然因為PS等技術的發展,也可以在JPEG上進行後期製作,但是如果做大幅度的調整還是Raw檔案比較合適。

    3>可以用專門的軟體修正攝像機的不足,比如佳能DPP軟體可以修正鏡頭失光、變形等。

    Raw缺點:

    1>儲存資料量太大,JPEG就小很多

    2>需要專門的軟體來開啟,JPEG幾乎所有的PC都可以直接開啟

    3>開啟速度較慢,JPEG較快

    4>不同的軟體有不同的方式去演繹RAW檔案,所以在不同的軟體上會有細微的差別。

    5>廠商賣的專用軟體價格較高,而這方面JPEG幾乎無成本

 

   (3)、自動白平衡調整(AWB)

   定義:要求在不同色溫環境下,照白色的物體,螢幕中的影象應也是白色的。色溫表示光譜成份,光的顏色。色溫低表示長波光成分多。當色溫改變時,光源中三基色(紅、綠、藍)的比例會發生變化,需要調節三基色的比例來達到彩色的平衡,這就是白平衡調節的實際。
   (4)、影象壓縮方式
   JPEG:(joint photo graphicexpert group)靜態影象壓縮方式。一種有損影象的壓縮方式。壓縮比越大,影象質量也就越差。當影象精度要求不高儲存空間有限時,可以選擇這種格式。目前大部分數碼相機都使用JPEG格式。
   (5)、彩色深度(色彩位數)
   反映對色彩的識別能力和成像的色彩表現能力,實際就是A/D轉換器的量化精度,是指將訊號分成多少個等級。常用色彩位數(bit)表示。彩色深度越高,獲得的影像色彩就越豔麗動人。現在市場上的攝像頭均已達到24位,有的甚至是32位(原文)
   (6)、影象噪音
   指的是影象中的雜點干撓。表現為影象中有固定的彩色雜點。
   (7)、視角
   與人的眼睛成像是相同原理,簡單說就是成像範圍。
   (8)、輸出/輸入介面
   序列介面(RS232/422):傳輸速率慢,為115kbit/s
 並行介面(PP):速率可以達到1Mbit/s
 紅外介面(IrDA):速率也是115kbit/s,一般膝上型電腦有此介面
 通用序列匯流排USB:即插即用的介面標準,支援熱插拔。USB1.1速率可達12Mbit/s,USB2.0可達480Mbit/s
 IEEE1394(火線)介面(亦稱ilink):其傳輸速率可達100M~400Mbit/s 

    (9)、CAMIF, Camera Interface

    下面這張圖,沒看懂,暫時放在這裡:

    

     (10)、FIME,Fully Interactive Moblio Camera

    攝像頭採集的資料CPU無法直接處理,所以,主動晶片裡面整合了Camera控制器,即FIMC。攝像頭需要先將影象數九傳送給控制器,經過控制器處理(裁剪拉昇後直接預覽或者編碼)之後交給CPU處理。MCLK就是由FIMC提供的。

    

    CAMMCLK給攝像頭提供時鐘,CAMRST是復位線,PWD在攝像頭工作時應該始終為敵。HREF是行參考訊號,PCLK是畫素始終,VSYNC是場同步訊號,一旦給攝像頭提供了時鐘,並且復位了攝像頭,攝像頭就開始工作了。

     FIMC訊號定義如下所示(YCbCr模式)

Signal

I/O

Description

   Type

HREF

I

行同步訊號

 

PCLK

I

畫素時鐘

DATA[7:0]

I

畫素資料

FIELD

O

FIELD訊號

MCLK

O

系統時鐘訊號

 

 

    (11)、camera時鐘域

    每個攝像頭都有三個時鐘域,第一個是系統匯流排時鐘域;第二個是攝像頭畫素時鐘域PCLK;第三個是內部始終MCLK。

    系統匯流排時鐘必須高於PCLK,CAM_MCLK必須固定頻率發呢拼比,如:PLL時鐘。

 

 

二、攝像頭工作原理

    1、手冊中內容掃盲:  

   首先,我們要明白,一旦給攝像頭提供了時鐘,並且復位了攝像頭,攝像頭就可以工作了,通過PCLK、HSYNC、VSYNC聽不傳輸數字影象訊號。

    攝像頭的驅動需要完成三大步:

    >>攝像頭的上電、時鐘這些基本條件

    >>IIC保證攝像頭的初始化

    >>攝像頭工作後傳回資料到主控

  原圖有誤,已經修改,紅色圈圈部分。

  控制部分是攝像頭上電、IIC控制介面;資料輸出是攝像頭拍攝的影象資料傳到主控晶片,所以,需要有Data、行場同步時鐘(告訴主控晶片哪些資料是一行,哪些是一幀)、以及時鐘(PCLK,畫素時鐘,告訴主控晶片哪些資料是一個畫素點)。

    (1)、MCLK

    攝像頭要 工作,必須要有個時鐘進行同步,這個時鐘就是MCLK,必須要有,否則攝像頭就是一個死物,這個時鐘由主控晶片提供,確切的說是有主控晶片的控制器提供,下面會提到。

    (2)、RESET

    復位訊號,上面有提

    (3)、SDA、SCL

    IIC匯流排,主要作用就是為主控晶片配置或者讀取攝像頭的暫存器提供通道。mini2440音訊模組中的L3協議,也是這個作用。不要看見協議就怕,協議就是一條路,資料傳輸的路,有規定的資料傳輸的道路。

    

 

 

    (4)、Configuration Register

    配置暫存器,控制器(在主控晶片中)通過IIC來設定,相當於告訴攝像頭如何工作等。

    (5)、Timing Control

    時序控制,主要是根據主控晶片提供的MCLK時鐘來控制行場同步、自動曝光AEC等。因為這些都需要時鐘的配合。

    (6)、Pixel Array

    gc0308物理上的陣列是648H*492V,實際取樣陣列是648H*488V,也是有效陣列。實際取像的陣列是640H*480V。如下圖所示:

    

    (7)、CDS

    Correlated Double Sampling,相關雙聯取樣電路。CCD感測器的每個畫素點輸出波形只在一部分時間內是影象訊號,其餘時間是復位電平和干擾,為了提取影象訊號並消除干擾,就要採用取樣保持電路。

    (8)、Analog Processing、10bit ADC

    主要是將sensor得到的電訊號轉換為數字訊號,方便ISP或者DSP處理。

    (9)、Image Signal Processing

    影象訊號處理器,可以理解為DSP的一種,主要是對sensor經過ADC處理後的Raw Data進行處理,主要有自動白平衡AWB、插值計算(Bayer interpolation主要是對Raw Data進行格式轉換,轉為YUV /RGB等)、去噪、gamaa修正、色彩修正、邊緣增強等。這些都是由暫存器決定,暫存器又是通過IIC匯流排來設定的。

    (10)、Output Mode & Sync Control

    輸出介面,從光線進入鏡頭、過濾、光感應、ADC,然後到影象資料處理,最終資料到達外部介面。攝像頭取一幅影象的整個工作完成,攝像頭本質上還是一個終端節點,所以需要將採集好的影象資料傳遞給主控晶片,所以要有資料引腳,圖形格式補在是Raw Data,而是YUV或者RGB資料。進行資料傳輸,肯定需要時鐘進行同步,所以需要PCLK,告訴主控晶片,哪個資料代表了一個畫素點;VSYNC負責告訴晶片哪些是一幀資料,HSYNC則同步行資料。

    (11)、裝置地址

    

    百科上的定義,在資料通訊中,可以傳送或接受資料的任何裝置標識。

    作業系統課程上面有講到,系統為了管理外部裝置而進行的編碼。不知道這個地址是不是這個意思。

    反正寫入的時候指定0x42,讀取的時候指定0x43,

    (12)、IIC通訊

 

 

    IIC通訊是一個互動的過程,需要等待對方的確認訊號,並不是一次性完成的。首先,主機需要做兩個事情:

    

 

    一個是,提供啟動、結束訊號;一個是提供IIC時鐘訊號。圖示很明白了,不在囉嗦。

    (13)、時序 Timing

    

 

 

 

     

    幀時間(Ft,Frame time)=幀時鐘不活動時間(Bt,Blank time)+啟動時間(St,Start time)+有效行時間(Vt,Valid line time)+結束時間(Et,End time)+8

    空白無效行時間(Vblank/Dummy line)=Bt+St+Et。

    首先要明白,物理上492行,但是實際感應光線的只有488行,4行是Dark Row,黑暗行;但是這488有資料的行中只有480行是有效行。然後推導公式,首先分析小公式——空白行時間,空白時間包括無效的幀同步時間,這裡就是VSYNC處於高電平的無效時間;開始資料採集之前需要有幾個時鐘週期的緩衝,然後才開始採集行資料,所以這個時間,也就是啟動時間也要算在空白行時間裡面,同理,480行有效資料採集完成後,也需要幾個時鐘週期表示資料採集結束,結束時間也要包括在空白行時間裡面。

    一幀影象所需要的時間,首先包括空白行時間Bt,還有有效行時間Vt,然後加上8。這個8應該是代表那8行無效資料(不確定),歡迎留言!

    exp_time應該是曝光時間,當曝光時間小於488行資料採集時間+空白行時間,這幀時間由所有行採集的時間+空白行時間控制,那麼VSYNC無效電平的時間=行空白時間-啟動時間-結束時間。

    如果曝光時間超過win_height+VB,也就是在曝光沒有在正常的一幀時間內完成,那麼肯定需要繼續曝光,幀時間由曝光時間確定。幀同步無效時間=曝光時間-win_height-啟動時間-結束時間。

 

  (修訂一,未完待續,分享自我的為知筆記)

 

相關文章