攝像頭機器視覺人工智慧的"眼睛",其重要性在嵌入式領域不言而喻。但是如何理解和使用攝像頭卻是一個非常棘手的問題。本文主要針對除錯攝像頭過程中遇到的問題,對攝像頭的基本原理及概述進行整理,同時對自己在實際工作中遇到的問題進行梳理總結。
1.簡介
2.攝像頭模組基本構造與工作原理
2.1 基本構造
2.1.1 鏡頭Lens
2.1.2 IR Filter紅外濾鏡
2.1.3 Sensor
2.2 資料輸出
2.2.1 輸出格式
2.2.2 ISP
2.2.3 行場同步訊號
3.硬體設計與介面定義
3.1 上下電時序
3.2 PCLK \D1~D7
3.3 Camera Interface Module (CIM)
4.驅動與除錯
4.1 Sensor 的初始化步驟
4.1.1 I2C與SCCB匯流排協議
4.2 攝像頭問題及解決辦法彙總
4.2.1 名稱解釋
4.2.2 影像感測器影像問題總彙
5. 總結
1.簡介
目前,包括移動裝置在內的很多 多媒體裝置上都使用了攝像頭,而且還在以很快的速度更新換代。目前使用的攝像頭分為兩種:CCD(Charge Couple Device電荷偶合器件)和 CMOS(Complementary Metal Oxide Semiconductor互補金氧半導體)。
這兩種各有優劣:目前CCD主要使用高質量的DC、DV,數位相機和高檔手機上,其影像質量較好,但是整個驅動模組相對比較複雜,而且目前只有曰本一些企業掌握其生產技術,對於選用的廠商來說成本會比較高昂,而且一些裝置對與影像質量沒有很苛刻的要求,對體積要求會高一些;而CMOS正好滿足這樣的要求,CMOS模組則比較簡單,目前很多廠商已經把驅動和訊號處理的ISP(Image Signal Processor)整合在模組內部,這樣體積就更小,而且其生產技術要求相對簡單、工藝比較成熟、成本較低、外圍電路簡單、影像質量也可以滿足一般的要求,所以在嵌入式市場中佔有很大份額,目前一些高階的CMOS Sensor的質量已經可以和CCD 的質量相媲美。
本文主要是圍繞CMOS攝像頭進行軟體開發與除錯,對之前的OV7740,OV7725及GC2155攝像頭的驅動除錯經驗上進行技術總結。對前面開發過程中遇到的問題進行回顧,同時對之前網上收集的資料進行一下整理。
2.攝像頭模組基本構造與工作原理
要認識CMOS攝像頭的結構。我們通常拿到的是整合封裝好的模組,一般由4個部分組成:FPC(柔性電路板),鏡頭、感應器與影像訊號處理器構成。一般情況下,整合好的模組我們只看到外面的鏡頭、介面和封裝殼,這種一般是固定焦距的。有些廠商只提供晶片,需要自己安裝鏡頭,鏡頭要選擇合適大小的鏡頭,如果沒有夜視要求的話,最好選擇帶有紅外濾光的鏡頭,因為一般的sensor都能感應到紅外光線,如果不濾掉,會對影像色彩產生影響,另外要注意在PCB設計時要保證鏡頭的聚焦中心點要設計在sensor的感光矩陣中心上。除了這點 CMOS Sensor硬體上就和普通的IC差不多了。
2.1 基本構造
鏡頭(LENS):透鏡結構,有機玻璃和石英;
基座(LENS Base):用於固定鏡頭
影像感測器:
CCD(charge-coupled device) :電荷耦合器件
CMOS(complementary metal oxide semiconductor):互補金氧半導體
DSP數字處理電路:AD轉換器
電源:兩種工作電壓:3.3V和2.5V;
2.1.1 鏡頭Lens
光是一種波,可見光只是整個光波中的一段。Lens就是一個能夠截止不可見光波,而讓可見光通過的帶通濾波器。
鏡頭lens的主要規格引數有
1)有效焦距EFL:effective foce length
2)視場角FOV:field of view
視場角在光學工程中又稱視場,視場角的大小決定了光學儀器的視野範圍。
3)光圈F/NO:
光圈能調節進入鏡頭裡面的光線的多少,舉例來說:家養的小貓,白天的瞳孔總是縮成一條線,到了晚上,就自動地開啟成為一個圓孔。所以,同樣道理,在拍照時,光線強烈,就要縮小光圈,光線暗淡,就要開大光圈。也就是說F值越小的相機(其他引數不變),越有利於夜景拍攝。
光圈數越小,入射光的鏡頭孔徑越大,單位時間進入Camera的光通量就越大,弱光環境下,拍 照效果就越好,但同理景深就越淺,同時邊緣畫質和主體銳度就較差
4)像圓徑:image circle
圓光學系統所成像的最大直徑圓。取決或決定於配合使用 Sensor尺寸。
5)鏡頭總高:total track length
光學總長是指由鏡頭中鏡片的第一面到像面的距離。
6)後焦距:back flage length
光學後焦:最後一片鏡頭中心到成像面的距離
機械後焦:底端面到成像面的距離
7)相對照度
畫面角落與中心的亮度比
8)主光線角度:chief ray angle (與sensor不匹配,會產生暗角偏色)
9)TV畸變:TV distortion
2.1.2 IR Filter紅外濾鏡
功能:除去紅外光,避免紅外線干擾,修正進來的光線,改善sensor 鄰近干擾,使影像呈現的色彩符合人眼的感覺 。
分類:一般分為干涉式的IR/AR-CUT(在低通濾波晶片上鍍膜,利用干涉相消的原理)和吸收式的玻璃(利用光譜吸收的原理) 。
影響因素:針對IR-CUT,與IR-CUT厚度無關,主要在於鍍膜工藝控制和鍍膜層數針對玻璃,與厚度相關,越厚越好,另外針對高階的還有一種藍玻璃IRCF
針對手機Camera: 1)對可見光光譜段:430-620nm有透過率要求,Tmin>=85% 2)對濾除波段:650+/-10nm有濾除要求,T<=50% 3) 對近紅外光譜段:700-1200nm有透過率要求 4)AR面的對可見光的420-670nm有反射率要求
2.1.3 Sensor
Sensor分類按感光元件一般可分為CCD和CMOS
Sensor的工作原理
其實感測器Sensor中感光的部分是由許個畫素按照一定規律排列 的。
光照--〉電荷--〉弱電流--〉RGB數字訊號波形--〉YUV數字訊號訊號
2.2 資料輸出
2.2.1 輸出格式
CMOS模組輸出訊號可以是模擬訊號輸出和數字訊號輸出。
模擬訊號一般是電視訊號輸出,PAL和NTSC都有,直接連到電視看的;
數字輸出一般會有並行和序列兩種形式,由於影像尺寸大小不同,所要傳輸的資料不同,資料的頻率差異也很大,但是序列介面的pixel clock頻率都要比並行方式高(同樣的資料量下這不難理解),較高的頻率對外圍電路也有較高的要求;
並行方式的頻率就會相對低很多,但是它需要更多引腳連線;所以這應該是各有裨益。
2.2.2 ISP
一般CMOS Sensor模組會整合ISP在模組內部,其輸出格式可以選擇,這樣可以根據自己使用的晶片的介面做出較適合自己系統的選擇。其中,部分sensor為了降低成本或者技術問題,sensor部分不帶ISP或者功能很簡單,輸出的是BAYER PATTERN,這種格式是sensor的原始影像,因此需要後期做處理,這需要有專門的影像處理器或者連線的通用處理器有較強的運算能力(需要執行影像處理演算法)。
2.2.3 行場同步訊號
一般都有三個同步訊號輸出:幀同步/場同步(Frame synchronizing)、行同步(Horizontal synchronizing)和畫素時鐘(pixel clock)。要保證訊號的有效狀態與自己系統一致,如都是場同步上升(下降)沿觸發、行同步高(低)電平有效等。
3.硬體設計與介面定義
對於攝像頭的硬體介面
在君正的開發板上,介面定義如上圖所示。
Signal |
I/O |
Description |
---|---|---|
HREF |
I |
行同步訊號 |
PCLK |
I |
畫素時鐘 |
DATA[7:0] |
I |
畫素資料 |
SCCB |
I/O |
sccb通訊 |
MCLK |
O |
系統時鐘訊號 |
控制邏輯為攝像頭上電、IIC控制介面。
資料輸出為攝像頭拍攝的圖傳到主控晶片,所有要有data、行場同步和時鐘號。CMOS介面的影像感測器晶片可以感知外部的視覺訊號並將其轉換為數字訊號並輸出。
我們需要通過MCLK給攝像頭提供時鐘,RESET是復位線,PWDN在攝像頭工作時應該始終為低。PCLK是畫素時鐘,HREF是行參考訊號,VSYNC是場同步訊號。一旦給攝像頭提供了時鐘,並且復位攝像頭,攝像頭就開始工作了,通過HREF,VSYNC和PCLK同步傳輸數字影像訊號。 資料是通過D0~D7這八根資料線並行送出的。
這裡需要注意,在除錯攝像頭之前,一定需要通過MCLK提高時鐘,否則攝像頭不能正常工作,通訊接連線不上。
3.1 上下電時序
這個要接規格書上來,注間PWDN、RESETB這兩個腳,不同的攝像頭不太一樣,這個圖是上電時序,上電時參考一下,知道在那裡看就行
嚴格的來說,應該是按照這個時序來進行設計。先進行攝像頭上電,然後輸出MCLK到攝像頭模組,接著PWDN,最後RESET一下攝像頭。目前來看,這個過程的時序要求不是十分的嚴格。但是PWDN後是否需要RESET,這有什麼影響目前還不確定。
3.2 PCLK \D1~D7
對於資料的傳輸,需要關注的訊號主要是PCLK與D1~D7訊號
PCLK是畫素時鐘,可通過設定暫存器的值來進行PCLK的配置。
首先輸入時鐘MCLK如果為24MHz。
所以如果需要設定PCLK也為24M,可以通過設定0x11暫存器為0x01來設定
/* CLK */
{0x11, 0x01}, //時脈頻率CLK [5:0]
{0x36, 0x3f},
此時可以計算出一幀資料的時間。
通過計算,如果按照YUV影像格式接收資料,影像為VGA,頻率為24MHz,那麼一幀資料的時間約為33ms。
3.3 Camera Interface Module (CIM)
攝像頭的採集的資料CPU無法直接處理,主控晶片X1000裡面整合了Camera控制器,叫CIM(Camera Interface Module)。攝像頭需要先把影像資料傳給控制器,經過控制器處理(裁剪拉昇後直接預覽或者編碼)之後交給CPU處理。實際上攝像頭工作需要的時鐘(MCLK)也是CIM給它提供的。
在君正x1000上的攝像頭介面可支援CMOS 或者CCD型別的攝像頭, CIM可直接連線外部的攝像頭模組。
在介面引腳方面,主要是下面幾個引腳
Name |
I/O |
Width |
Description |
---|---|---|---|
MCLK |
O |
1 |
CIM輸出時鐘 |
PCLK |
I |
1 |
畫素時鐘 |
VSYNC |
I |
1 |
垂直同步訊號 |
HSYNC |
I |
1 |
水平同步訊號 |
DATA |
I |
8 |
資料 |
通過CAM_MCLK給攝像頭提供時鐘,RST是復位線,PWDN在攝像頭工作時應該始終為低。HREF是行參考訊號,PCLK是畫素時鐘,VSYNC是場同步訊號。一旦給攝像頭提供了時鐘,並且復位攝像頭,攝像頭就開始工作了,通過HREF,PCLK和VSYNC同步傳輸數字影像訊號。資料是通過DATA0~DATA7這八根資料線並行送出的。
在行場同步訊號中,可收集影像的幀同步訊號來判斷取樣點,同時內部可通過設定設定一幀影像對的大小來進行一幀影像是否完整的判斷。
4.驅動與除錯
由於本文主要是針對攝像頭OV7740來進行主要的分析,同時也對OV7725進行一些探索。所以總結出攝像頭驅動編寫的一般流程與思路。同時在君正x1000上如何使用好攝像頭模組進行詳細的分析。
根據以往除錯Camera驅動,總結的一些小經驗:
1.首先對照電路圖,檢查Camera的電路連線是否正確;
2.用萬用表量Camera的電源管腳,檢視Camera的供電是否正常,確定是否需要我們在程式中進行電源控制;
3.檢視Camera的Spec文件,檢查PWDN和RESET的管腳觸發是否正常,是否需要在程式中進行控制;
4.在Camera的Datasheet中找出該裝置的I2C地址,檢查I2C地址配置是否正確;
5.檢視I2C通訊是否正常,是否能正常進行讀寫,用示波器量出I2C的SCL和SDA的波形是否正常,未通訊時都為高電平,通訊時SCL為I2C時鐘訊號,SDA為I2C資料通路訊號;
6.用示波器量Camera的MCLK管腳,看是否正確,如果MCLK正常,通常情況下PCLK也應該有波形;
7.檢查Camera的初始化暫存器列表的配置是否正確。
這幾步是很重要的,因為攝像頭是一個不可看見狀態的裝置,所以在除錯前期,一定要檢查電路的連線是否正常。如果硬體上出現問題,後面除錯起來會走很多的彎路,也會浪費大量的時間與精力。
4.1 Sensor 的初始化步驟
一般 sensor 的初始化通常包含以下幾個步驟
1.sensor上電,電源分為模擬電壓,數字電壓,IO電壓。這三個電源並沒有嚴格的先後上電順序,可以在程式碼中同時開啟
2.對 sensor 輸出 MCLK,配置對 PCLK 取樣輸出頻率,這是能否正常接收 sensor 資料的關鍵。
3.配置 V, H 同步訊號的輸出極性,如果極性配置不對,將造成圖象不能正常採集,自然顯示混亂。
4.硬體的 reset。sensor 的 reset 為低 reset,並且至少持續 1US。
5.軟體的 reset。 既然為軟體的 reset,那就必須要求 X1000夠對 sensor 進行寫暫存器。也就是要保證 IIC 能夠正常地寫資料進入 sensor ISP,這點是保證軟體能夠進行除錯的基礎。軟體 reset 通常根據 sensor 的不同會有所變化,注意硬體 reset 後要保留一些時間才能使用 IIC 匯流排。通常在 10 個 US 以上 。
6.OV7740或者OV7725在 ISP 中預設了一組暫存器,能夠在 reset 後不用 IIC 寫任何暫存器就能輸出圖象,這個時候 sensor 的 input clock 是 output clock 的兩倍,前期可以用這個方法來驗證硬體和軟體供電,復位等是否正確,當後端接受的圖象 engine只能用 mclk 來同步工作時候,必須要正確配置接收的取樣頻率 。
7.初始化暫存器,並配置輸出頻率和輸出圖象的解析度 。
8.讀取 sensor 的版本號,如果與我們所用產品的 version 一致,就代表初始化工作正確完成 。
4.1.1 I2C與SCCB匯流排協議
I2C序列匯流排有兩根訊號線:一根雙向的資料線SDA;另一根是時鐘線SCL。所有接到I2C匯流排上的裝置的序列資料都接到匯流排的SDA線,各裝置的時鐘線SCL接到匯流排的SCL。在I2C匯流排傳輸過程中,將兩種特定的情況定義為開始和停止條件,當SCL保持“高”, SDA由“高”變為“低”時為開始條件; SCL保持“高”, SDA由“低”變為“高”是為停止條件。開始和停止條件由主控器產生。使用硬體介面可以很容易地檢測開始和停止條件,沒有這種介面的微機必須以每時鐘週期至少兩次對SDA取樣以使檢測這種變化 。
在除錯ov7725攝像頭時,首先遇到的是ov7725攝像頭的I2C通訊不能正常的通訊的問題。在ov7725攝像頭和GC2155攝像頭上都可以正常的執行,可是同樣的程式在ov7725上就不能正常的執行了。其實這個是由於ov7725的攝像頭協議比較的嚴格,不相容標準的i2c協議,而ov7725與gc2155攝像頭是相容i2c協議的。
SCCB的寫資料
I2C寫資料
其實在寫資料協議這一塊兩者是沒有差別的,主要的問題就是對於OV7740和GC2155寫資料的方式可以通過下面的方式進行暫存器資料的寫
首先寫裝置ID,然後寫攝像頭暫存器的地址:
接著寫攝像頭的ID,然後寫像頭暫存器的資料:
而這種方式對於OV7725操作是不行的,所以OV7725對協議的要求還是比較嚴格的。
SCCB的讀資料協議
首先寫暫存器的地址Sub-address
然後開始讀資料
I2C的讀資料協議
其實這裡的最大問題就是傳送了暫存器地址後,需要加一個停止位,然後從新開始傳送裝置地址,讀取資料。
對於ov7725而言,只能使用SCCB協議,而OV7740與GC2155是支援I2C資料協議的。
4.2 攝像頭問題及解決辦法彙總
4.2.1 名稱解釋
白平衡
白平衡指的是感測器對在光線不斷變化環境下的色彩準確重現的能力表示。大多數拍照系統具有自動白平衡的功能,從而能在光線條件變化下自動改變白平衡值。設計工程師尋找的影像感測器應該配備了一個很好的自動白平衡(AWB)控制,從而提供正確的色彩重現。要說到白平衡就要先建立色溫的概念其實在攝影領域,光源大多是根據它們的色溫來定義。色溫的單位是開爾文,在不同溫度下呈現出的色彩就是色溫。 當一個黑色物體受熱後便 開始發光,它會先變成暗紅色,隨著溫度的繼續升高會變成黃色,然後變成白色,最後就會變成藍色(大家可以觀察一下燈泡中的燈絲,不過由於受到溫度的限制,大家一般不會看到它變成藍色)。總之,這種現象在日常生活中是非常普遍的。
人的大腦能仔細分析出從眼睛接受的訊號,因而能感知不同的色溫(colortemperature)來顯示相同的白色。但 camera 卻不能,在早晨時分的相片偏紅,而黃昏時候的卻偏黃,就算同一張白紙在不同的環境下被拍攝, 如不同的時間,不同的光源,都會出現不同程度的偏差。調整白平衡,就是要給白色一個定義,能正確記錄我們眼睛所看到的顏色。 sensor 給出了兩種白平衡的控制方法,一種是自動白平衡(AWB),一種是手動白平衡(MWB)。自動白平衡為 sensor 內部 ISP 的預設設定, ISP 中有一結構複雜的矩形圖,它可決定畫面中的白平衡基準點,以此來達到白平衡調校。由於手機 camera 不屬於色彩要求很高的照相機範疇,所以我們一般使用自動白平衡,自動白平衡在光源不是特別複雜的時候有較好的效果。手動白平衡需要自己設定 R, G, B 的 gain 值, 暫存器中有專門設定這三個值的暫存器 。
動態範圍
動態範圍測量了影像感測器在同一張照片中同時捕獲光明和黑暗物體的能力,通常定義為最亮訊號與最暗訊號(噪聲門檻級別)比值的對數,通常用54dB來作為商業 影像感測器的通用指標。具有較寬動態範圍的 影像感測器可以在明光環境下提供更好的效能(例如,使用較窄動態範圍感測器在明光環境下拍出的照片會出現“水洗”或模糊的現象。)
圖1--攝像頭在逆光時,整體入光量太大(窗外光線太強了),為避免過曝就導致背景正常了,但主體卻曝光不足因此就黑掉了
圖2—就是動態範圍比較好,把主體跟背景都能曝光正常.
工頻干擾
如果手機出現水波紋就是工頻干擾。工頻干擾是由於室內日光燈閃爍造成的。 CMOS 與 CCD 兩種不同的工藝製造出來的 sensor 工頻干擾現象是不一樣的,這是由暴光的方式不同造成的。
Sensor在日光燈作為光源下獲取影像資料時會產生flicker,其根本原因是照在不同pixel上光能量不同產生的,所接受的光能量的 不同也就是影像的亮度的不同。 由於CMOS sensor的曝光方式是一行一行的方式進行的,任何一個pixel的曝光時間是一樣的,也就是同一行上的每個pixel的曝光開始點和曝光的時間都是一模一樣的,所以同一行的所有點所接收到的能量是一樣的,而在不同行之間雖然曝光時間都是一樣的,但是曝光的開始點是不同的,所以不同行之間所接受到的能量是不一定相同的。 為了使不同行之間所接受的能量相同,就必須找一個特定的條件,使得每一行即使曝光開始點不同,但是所接受的光能量是相同的,這樣就避開了flicker,這個特定的條件就是曝光時間必須是光能量週期的整數倍時間。 Banding由工頻干擾引起,交流電光源都有光強的波動,在中國交流電頻率是50Hz,光強的波動就是100Hz,週期10ms。如果camera曝光時間不是10ms的整數倍,那麼在不同的感光面接收到的光能量一定不一樣,體現在影像上就是有明暗條紋。 消除banding就得想辦讓曝光時間是10ms的整數倍!60Hz的交流電需要控制曝光時間為8.33ms的整數倍。
以50Hz為例說明,實現這個有兩種辦法: 1、設定曝光控制,強制為10ms整數倍變化,但是這樣會浪費一部分曝光時間,導致曝光無法用滿,在室內自然就會損失效能。
2、修改楨率,使每楨影像分到的時間是10ms的整數倍,則可以用滿每楨曝光時間在,室內效果更好。修改楨率可以插入Dummy Line或者Dummy Pixel。這需要一點點計算,具體計算需要看sensor輸出Timing。 例如把楨率設定為7.14fps,則每楨曝光時間是140ms。如果是15fps,則每楨曝光時間是66.66ms,如果強制曝光為10ms整數倍,最大即60ms,則有6.66ms無法參與曝光,損失效能。 具體調整楨率方法得和sensor的FAE溝通,每個sensor都可能不一樣,不能一概而論。調整楨率還有個原則要注意,預覽一般不能低於 10fps,再低就很卡,常用14.3fps和12.5fps;抓拍不能低於5fps,否則用手就很難拍出清晰的照片,常用7.14fps。楨率是一個權 衡折中 的選擇,高了曝光時間不夠,暗光效果太差,低了沒法拍照,容易虛。
IR cut (濾除紅外光)
sensor不僅對可見光譜感光,而且對紅外光譜感光. IR就是infrared紅外光, 如果沒有IR-Cut Filter,圖象就會明顯偏紅,這種色差是沒法來用軟體來調整的,一般IR-Cut在650+/-10nm,而UV,紫外光的能量很小,一般就忽略了.未加IR cut 拍攝的照片,可見影響最大的是影像的色彩.+
Binning
Binning是將相鄰的像元中感應的電荷被加在一起,以一個畫素的模式讀出。Binning分為水平方向Binning和垂直方向 Binning,水平方向Binning是將相鄰的行的電荷加在一起讀出,而垂直方向Binning是將相鄰的列的電荷加在一起讀出,Binning這一 技術的優點是能將幾個畫素聯合起來作為一個畫素使用,提高靈敏度,輸出速度,降低解析度,當行和列;同時採用Binning時,影像的縱橫比並不改變,當採用2:2Binning,影像的解析度將減少75%。在手機小螢幕上Preview時建議用這種方式 而不是通過DSP來做抽點的動作。
4.2.2 影像感測器影像問題總彙
出現橫向條紋
比如出現橫向的紫色或綠色條紋。一般情況下是時序有問題。 走線的時候要注意 MCLK、PCLK還有幀同步(vsync)和行同步(hsync),基本上市面上的晶片這些訊號都要分開走線,最好加GND。
現象: 閃橫的紫色或綠色干擾線 原因: Hsync和高速線距離太近太長, 產生了耦合(10cm的高速線產生約5pF左右的耦合電容), 導致HSYNC不能迅速拉昇至90%的區域,相位不同步,最終資料採集有錯位。然後因為YUV演算法的作用,引起綠線和紫色的閃線。)
解決辦法:絕對禁止將HSYNC,PCLK,MCLK這三根線擠在一起走線。
1)HSYNC夾在低速線SDA和SCL之間
2)PCLK和MCLK如果一定要貼著走線,最好拉開一點距離,當中夾一根地線。
顏色和亮度不連續
一般是資料線存在短路、斷路和連錯的問題。影像會出現類似於水波紋的等高線或大面積色偏. D訊號丟失畫面整體也會色偏,比如RGB565,D0~D4均斷路影像會因藍色和綠色訊號丟失過多而呈現紅色。
1)一根資料線虛焊導致的等高線及顏色失真
2)兩根資料線和其他裝置複用導致的偏綠問題
3)資料線接反的情況
4)資料線錯位
影像中只有紅或綠顏色
Y和U/V的順序不對。將攝像頭的取樣格式由CbYCrY改為YCbYCr後,顏色就對了。
模擬電壓過低或不穩定
模擬電壓過低導致很強的光才能感應影像,並且偏色。
只有天花板上的燈管才感應成像,其他部分很模糊。
模擬電壓過低導致豎向條紋。提高AVDD後問題解決。
在除錯 OV7725時發現,剛開啟攝像頭時影像有條紋,開了一段時間後影像就正常了,有沒有哪位知道是什麼原因;不正常的影像如下。查出問題了,是模擬電壓不穩導致的。
背部材料太薄導致“鬼影”
補強的表面要用亞光黑油,防止漏光。
由噪聲導致的影像橫紋
將CMOS移到離主IC較遠的地方現象就消失了,之前是放在主IC的背面,猜測是主IC對CMOS造成的影響,比如在模擬電壓上引入噪聲。
cmos為ov的30w畫素,型號為ov7141。使用時出項很明顯的水平方向的橫波紋。 採用3.3v和2.5v供電,其中VDD_C和VDD_A是由2.5v供電,pcb上直接將他們連在一起接2.5v。直接鋪地,沒有劃分模擬地和數字地。 使用外接電源對AVDD供電,沒有出現上述現象。可以確定是由主機板的電源噪聲引起的。
工頻干擾
在室外自然光下如果不會出現,那一定是50/60Hz引起的flicker。
Lens校準引數未調好導致的中間較亮的情況
中間較亮
軟體上,可能是lens correction沒調好(個人感覺樓主狀況屬此列),設定好correction區域然後將gain值拉高讓中心與周邊亮度差異減少,如果此時整個畫面過曝,可以將整體gain值再往下調(也可以設定曝光引數來減少畫面亮度)。
自動曝光計算出現的偏綠現象
在室外光線較亮拍攝時,畫面顏色任何時候都正常。在室內光線較暗拍攝時,剛開啟攝像時拍攝的畫面偏綠,幾秒鐘之後就會恢復正常。屬於正常現象。OV7670 30W 計算AE時間比較長。在計算AE的過程中容易出現偏色現象。 可以丟幀或者延時解決這個問題。
時序不對導致的影像上部或下部出現條紋
camera 模組的timing調整不了。修改AP的camera控制,使垂直同步偏移12 rows. 影像輸出正確。
lens鏡間反射導致的眩光
這是一顆5M的模組拍攝的圖片,天花板的燈在視場外邊緣,圖中為何出現紫紅色的光?是什麼原因造成的?
屬眩光現象,一般是由於多片lens鏡間反射造成。通過改善鍍膜製程,增加鏡片透射率可以緩解次問題。 另外,這張照片光心偏到左邊去了,holder偏移?lens set circle夠大啊,這種偏移都能cover掉。
pclk與vsync佈線干擾
在除錯一款手機攝像頭(OV7675)時,發現畫面垂直不同步,主要是畫面的下半部分跳動很厲害,上半部分是好的. 問題已經找到了,幀同步VSYNC和PCLK佈線有干擾
PCLK取樣邊沿選擇不對導致的噪點
轉換了一下Pclk的極性,這個躁點的問題得到了很好的解決。 例2. ov7675拍出來的照片發綠。可能是PCLK取樣邊緣不對,可以試試將pclk反向。也可能是資料線缺失問題。 例3, 如下圖所示。通過修改pclk的上升沿和下降沿就解決了。 主要有兩點: 1.修改PCLK的上升沿的斜率。 2.或者修改I/O的上升沿的斜率
原因是不同廠家的模組layout的走線的長短,FPC的厚薄,都可能影響到PCLK的獲取, FPC的公差過大,或者頭板的製作是否有什麼問題,都可能引起這個問題。 如果可以通過硬體的方式改變PCLK上升沿的斜率,也可以解決這個問題。 通過修改pclk的上升沿和下降沿就解決了
FPN問題
白天或亮一點的地方是沒有這個問題,就只有在低照度下使用閃光燈拍照會有這樣的情形。 FPN( fixed pattern noise), 無解。
臺階效應
gain過大,把digitalize的量化步距,乘大了,就出現臺階效應。還與內部的量化精度不夠,有關係。 另外,若不同的顏色通道的gain不同(白平衡計算出的R/G/B_gain不同),會出現color phase error。 只畫了B、G兩個通道,B_gain比G_gain大,會造成灰階的景物,有的地方B大,有的地方G大,就會出現顏色不斷交替。
因電源問題產生的豎向條紋
現在已經確定是電源的問題了,我在每個電源都並上了一個大電容,條紋消失了。現在我是用CPU的I/O採集的,效果很好。
Lens與攝像頭不匹配導致的部分偏紅現象
圖中下方居中的地方偏紅。ov工程師將LENS CORRECTION調到了極限問題還存在,確認是LENS與SENSOR不匹配造成的,模組廠家更換了鏡頭後問題基本解決。
1.首先你的照片awb就不對,本身這張照片就沒有達到白平衡.
2.照片邊界鋸齒現象很嚴重. 3. 色偏問題,你首先要了解一下你的sensor的Lenschief ray angle角度是多少,還有lens的CRA是多少.如果lens的CRA小於sensor的.一定會有偏色的現象.要麼換lens.如果市場上找不合適 的Lens,就說明sensor 本身品質不是很好. 4.理論上lens shading是解決lens的通透率不一樣的問題.但也許各家回加自己的演算法,可以一試. 5.如果Lens 和sensor都已經固定,可以人為想一些辦法來減少色差. a.可以將顏色調淡點,這樣就不太明顯 b.做AWB校正,排除不同sensor對RGB感應的不同,引起AWB曲線走的不準. CRA通俗的講是lens的主軸光線和對成像有貢獻的最大的如射光線的夾角,一般Lens廠商會提供CRA曲線,因為Lens從中心到四周的CRA是不一樣的.9 f% N8 u2 L1 u9 K7 ?8 ]2 F# Y 偏紅除了SHADING外可能還是要調AWB,因為圖片的下方其實就是一片白色,sensor在照白色的地方出現了偏紅,再試試調整一下AWB,或者在燈箱裡看看R,G,B的三條線是否重合! 如果是AWB的問題,那為什麼影像還有白色區域呢?AWB是不會調的有的偏色,有的不偏,不知道的就不要亂說。 如果是CRA不比配,那出現的偏色應該是對稱的,下面偏紅則上面一定會偏紅。 個人覺得應該是漏光造成的,不是barrel就是通光孔那裡引入了雜光。
DOVDD28走線過細過長以及地線不合理
現象:花屏
原因:2.8V電壓因為導線上的電阻吸收了電壓,導致驅動能力不夠。地線被拉高併產生毛刺現象,影響訊號完整性和資料採集。
DVDD電壓有問題
圖中的高光部分是辦公室窗戶。其它部分全黑,沒有任何細節? 是什麼原因?AWB?AGC?還是對比度啊? 問題解決了,是DVDD電壓不對。 datasheet寫的1.8V,問了FAE結果是1.2V。
增益小導致的白色條紋問題
當對著白色的物體時,剛進入預覽時,會出現下圖中顯示的條紋,當移動手機時,則這種條紋消失,以後也不會出現,只有再次進入預覽時可能會出現,請教各位大蝦到底是什麼原因? 這個問題,現在已經解決了,加大了初始化程式碼中的增益之後,就可以了。
幀率問題導致的影像錯位
Sensor為0v9655 在拍sxga 130萬影像有時會出現影像錯位的問題(如圖),vga的則不會出現,幫忙分析。謝謝! 幀率太高了,暴光時間短了.可以調整VBLANK,HBLANK來解決 再降低FPS到5,試試,你的buffer速度呢?? 謝謝大家!在我這裡降低幀速率比較有效。
電源噪聲
OV9653出現如圖所示的橫向紋路。 問題已經解決,電源問題,AVDD加鉭電容就好了。估計是電源紋波比較嚴重導致的。
影像中有不斷變化的細密的水平條紋
與熒光燈的頻閃造成的大面積的滾動水平條紋不同,表現出來的是一個畫素高的水平條紋狀躁點,位置不固定,數量比較多,而且隨光線強弱有一定的變化。
因為設定某些sensor暫存器的時候,會影響到這些水平條紋的顏色,所以基本上排除是在資料傳輸過程中板子對資料造成的干擾,也排除接觸不良的可能性,應該是資料在sensor內部已經存在這些水平條紋。此外相同的初始化序列,相同的sensor,在廠商的demo版上也沒有發生這種情況,所以也基本排除軟體的問題。 最後,發現原先為了節省硬體成本,將sensor的兩個電壓相同的模擬電和數字電由同一晶片輸出供給,導致兩者之間互相干擾,影響了sensor的正常工作。
解決辦法
將模擬電和數字電分離單獨供電
影像上有固定的鋸齒狀垂直條紋
影像上有明顯的垂直條紋,全屏分佈,非常細密,好像百葉窗一樣。
仔細看可以發覺該垂直條紋實際上是由於影像上相鄰的兩兩畫素互相錯位造成的鋸齒狀條紋6 仔細分析spec可以看到,由於sensor是按位元組送出影像資料,在RGB565模式下,兩個位元組表示一個畫素。而在我所使用的CPU的Camera控制器中,資料是按4個位元組也就是一個字為單位處理的,由於CPU這端是按LSB方式處理資料的,所以在一個字內部,未經調整的話,兩個畫素的順序是顛倒過來的。也就是最終由DMA將資料送到記憶體的連續buffer中時,畫素的順序是:畫素2,畫素1,畫素4,畫素3。。。
解決辦法
用程式調整畫素順序,為了減少附加計算對CPU的負擔,可以將這一步操作合併在其它類似顏色轉換或PACK模式轉Planer模式等操作中。
大尺寸時容易出現影像錯位
當sensor工作在最大解析度的情況下時,影像容易出現上下錯位的現象。
跟蹤程式可以看到這時候CPU的Camera控制器的FIFO快取發生了溢位現象,也就是說DMA來不及將FIFO中的資料傳送到記憶體中,該例中sensor在最大解析度的情況下,輸出資料的時鐘工作在24MHZ,理論上說,DMA應該是來得急傳送資料的,但是可能因為記憶體頻寬還會被其它裝置如CPU佔用,導致來不及寫入記憶體,使得DMA沒有最大負荷的工作,所以來不及將FIFO中的資料讀出,導致部分資料丟失,影像錯位。
解決辦法
某些情況下,改變DMA傳輸的啟動闕值可以解決該問題,但是有些情況是無效的 考慮到最高解析度僅在拍照的時候使用,預覽的時候並不使用該解析度,所以,在不影響預覽楨數的情況下,可以在拍照的一瞬間改變解析度的同時,修改sensor的時脈頻率,降低到一個不會導致FIFO溢位的頻率, 另外,在截獲最高解析度的影像的同時,儘量不執行其它的記憶體相關操作。截獲完影像馬上切換回預覽用的解析度。通過這些辦法,減少發生FIFO溢位的可能性。
讀取到的資料顯示出來的時候是花屏
讀取到的資料顯示出來的時候是花屏,但是明顯是隨著所拍攝的物件的變化而變化的。
顯示的資料是完全的花屏,或者可以看出物體大致輪廓,但顏色完全不對,例如一片綠色。這種情況往往是因為影像資料格式不匹配,例如沒有處理YUV2RGB,YUV的各個分量取樣順序與軟體計算的取值順序不匹配等。
如果花屏的具體表現是影像不斷變換,沒有規律,通常有可能是資料接收的觸發邊沿有誤,導致沒有正確的接收資料。
另外有一次,花屏的時候,仔細觀察花屏的圖案,發現有部分錯位重複的圖案的跡象。因此分析可能是Sensor的物理layout,其長寬比例與LCD剛好相反,仔細檢視Spec得到確認。
影像干擾問題
原因可能是:
(1)、攝像頭模組有問題,換一個攝像頭試一下;
(2)、資料線驅動能力不足,這個可以在攝像頭暫存器裡面改,問下攝像頭模組FAE,看改那些地方;
(3)、兩個攝像頭共用資料線時,不工作的攝像頭會把工作的資料訊號減弱;
(4)、PCB 走線太長,也會有干擾,不過我覺得這個可能性小,除錯好就一款這樣的的,模組廠FAE說的,不過他們模組本身也有問題,兩方面因素都有吧:PCB(線過長)、模組打樣也有問題。
YUV順序不對
yuv順序不對時,出現如下現象。
看下攝像頭規格書,把相應暫存器的值改一下就可以了。如下以紅框裡是不同yuv順序,找到改為相應的。
雜光,鬼影
其行業的專業術語統稱為Flare,是指在拍攝光源或者強光物體時,邊緣出現光影或出現一個完整物體的影子,而且這種現象只能減輕不能完全消失,原因是由於鏡片的材質導致光線不但存在折射還存在反射,整機由於鏡頭面到保護鏡片距離很大會更明顯!
採用頻率不匹配
必須要正確配置接收的取樣頻率,否則不能得出正確的圖象。
上圖就是取樣頻率不匹配的現象。請注意與 YUV, RGB 順序配置錯誤的現象有什麼區 別。下圖是順序倒置:
亮度以及夜景模式
相信現在大家都知道圖象的亮度與暴光時間相關,所以為了讓暗處的圖片能夠清晰地顯示必須增加 sensor 對暗處圖象的暴光時間, 也就是 line time 會設定得比普通模式的時候要大許多,這樣能使 CMOS sensor 擁有更多的暴光時間,從而提高亮度 。
上圖為沒有采用夜景模式的照片,下圖為使用夜景模式的照片
我們有兩種方法來控制影像亮度,一種是使用 AE target,一種是加大灰度增益。我們使用的是 AE target 方式,這樣的圖片色彩更逼真。用這種辦法會影響到 frame rate,當幀率達到我們限制的極限的時候,就要用增加模擬增益來做了,這樣會同時放大影像噪聲。一般不用增加數字放大增益來調整影像亮度。
5. 總結
本文主要從一些基本的概率出發介紹了攝像頭工作的原理及一些除錯的經驗。這些資料對於後期問題的分析有一些參考價值。其中很多的除錯經驗自己也犯過很多的錯誤,所以將這些經驗無論是別人遇到的,還是自己遇到的,都進行一下記錄。
本文的目的不是針對某一個具體的攝像頭和MCU而言,只是在自己的開發過程中對一些問題的思考以及對網上資料的收集與整理。所以不涉及到很多程式部分的邏輯。對問題和概念分析的比較多。
參考連結:
https://cloud.tencent.com/developer/article/1599470