CMOS Sensor的調試分享

目前,包括移動設備在內的很多多媒體設備上都使用了攝像頭,而且還在以很快的速度更新換代。目前使用的攝像頭分為兩種CCD(Charge Couple Device電荷偶合器件)CMOS(Complementary Metal Oxide Semiconductor互補金屬氧化物半導體)。這兩種各有優劣:目前CCD主要使用高質量的DC、DV和高檔手機上,其圖像質量較好,但是整個驅動模組相對比較復雜,而且目前只有曰本一些企業掌握其生產技術,對于選用的廠商來說成本會比較高昂而且一些設備對與圖像質量沒有很苛刻的要求,對體積要求會高一些;而CMOS正好滿足這樣的要求,CMOS模組則比較簡單,目前很多廠商已經把驅動和信號處理的ISP(Image Signal Processor)集成在模組內部,這樣體積就更小,而且其生產技術要求相對簡單、工藝比較成熟、成本較低、外圍電路簡單、圖像質量也可以滿足一般的要求,所以在嵌入式市場中占有很大份額目前一些高端的CMOS Sensor的質量已經可以和CCD 的質量相媲美。

  我這里要介紹的就是CMOS攝像頭的一些調試經驗。

  首先,要認識CMOS攝像頭的結構。我們通常拿到的是集成封裝好的模組,一般由三個部分組成:鏡頭、感應器和圖像信號處理器構成。一般情況下,集成好的模組我們只看到外面的鏡頭、接口和封裝殼,這種一般是固定焦距的。有些廠商只提供芯片,需要自己安裝鏡頭,鏡頭要選擇合適大小的鏡頭,如果沒有夜視要求的話,最好選擇帶有紅外濾光的鏡頭,因為一般的sensor都能感應到紅外光線,如果不濾掉,會對圖像色彩產生影響,另外要注意在PCB設計時要保證鏡頭的聚焦中心點要設計在sensor的感光矩陣中心上。除了這點 CMOS Sensor硬件上就和普通的IC差不多了,注意不要弄臟或者磨花表面的玻璃。

  其次,CMOS模組輸出信號可以是模擬信號輸出和數字信號輸出模擬信號一般是電視信號輸出,PAL和NTSC都有,直接連到電視看的;數字輸出一般會有并行和串行兩種形式,由于圖像尺寸大小不同,所要傳輸的數據不同,數據的頻率差異也很大,但是串行接口的pixel clock頻率都要比并行方式高(同樣的數據量下這不難理解),較高的頻率對外圍電路也有較高的要求;并行方式的頻率就會相對低很多,但是它需要更多引腳連線;所以這應該是各有裨益。(筆者測試使用的系統是8bit并行接口)另外輸出信號的格式有很多種,視頻輸出的主要格式有:RGB、YUV、BAYER PATTERN等。一般CMOS Sensor模組會集成ISP在模組內部,其輸出格式可以選擇,這樣可以根據自己使用的芯片的接口做出較適合自己系統的選擇。其中,部分sensor為了降低成本或者技術問題,sensor部分不帶ISP或者功能很簡單,輸出的是BAYER PATTERN這種格式是sensor的原始圖像,因此需要后期做處理,這需要有專門的圖像處理器或者連接的通用處理器有較強的運算能力(需要運行圖像處理算法)。不管sensor模組使用何種數據格式,一般都有三個同步信號輸出:幀同步/場同步(Frame synchronizing)、行同步(Horizontal synchronizing)和像素時鐘(pixel clock)。要保證信號的有效狀態與自己系統一致,如都是場同步上升(下降)沿觸發、行同步高(低)電平有效等。

  通過以上介紹,我們就可以根據自己的使用的系統選擇適合的sensor模組。要選擇接口對應(如果并行接口,sensor模組輸出數據bit位多于接受端,可以用丟棄低位的數據的方法連接)、數據格式可以接受或處理、pixel clock沒有超過可接受的最高頻率(有的是可調的,但幀率會受影響)、場同步和行同步可以調節到一致的sensor模組,這樣才可以保證可以使用。保證這些條件的正確性下,還要符合它的硬件電路要求,首要的是確定它的電源、時鐘、RESET等信號是否符合芯片要求,其次要看所有的引腳是否連接正確,這樣保證外圍的電路沒有錯誤情況下才可能正確顯示圖像。各個廠商生產的產品各不相同,一些廠商的sensor模組在默認狀態下就可以輸出圖像,而有些廠商的sensor模組必須要設置一些寄存器以后才可以得到圖像。區別是否可以直接輸出圖像,可以通過檢測sensor 的輸出腳,如果三個同步信號都有,數據線上也有數據,那一般就會有默認圖像輸出,另外也可以跟廠商聯系獲得有關信息。如果沒有默認輸出就需要設置寄存器了,一般都是通過兩線串行方式(IIC總線使用頻率很高)設置寄存器。寄存器設置是整個調試過程中最復雜的過程,當然要設置寄存器要先保證主芯片跟 sensor模組之間通信是正確無誤的,然后才是具體設置值的問題。保證通信無誤,簡單的方法就是讀寫一致(排除部分動態變化的寄存器),就是說保證能夠每次寫進去的數據都能正確讀出來。寄存器設置方面,一般都會有很多寄存器,其中一些是關鍵的:例如軟件RESET、工作狀態、輸出大小、輸出格式、輸出信號有效性、像素頻率等,另外一些對細調圖像質量很有用處的寄存器暫時可以不管,還有部分寄存器比如自動暴光、自動白平衡這些建議都選擇auto,這些功能對圖像質量影響很大,一般模組集成了ISP的都會有這個功能。當然不管是默認圖像還是設置以后輸出的,都需要細調,這時如果有可能,可以聯系sensor 模組廠商,請他們給出推薦配置或者做一些技術支持,因為一般sensor內部都有一些寄存器是不對外公布的,只有廠商的FAE才這些寄存器的定義;自己調節圖像時,可以從對比度、亮度、飽和度、銳化程度、Gamma校正、消除flicker等方面進行調節。如果sensor沒有集成ISP的話,如前面提到的它的輸出是BAYER PATTERN,這種格式就是直接將感應到的數據傳輸過來,需要處理器端進行數據轉換,同時還需要做白平衡、暴光控制,另外還要進行上面提到的對比度、亮度、飽和度等等的改進,這些改進要想得到比較好的圖像質量,算法會比較復雜,不僅需要處理器有較強的處理能力,也對調試者有一定的要求,但是這樣的sensor一般會比較便宜,所以根據自己的情況做選擇比較好;不過目前有廠商設計做圖像處理的芯片,其實這就是將ISP拿出來單獨作為一顆芯片了,它的調試就跟sensor模組差不多了,只是大一些而已。

  調試過程中,我們還要注意一些問題,例如YUV格式輸出時中YUV的順序、BAYER PATTERN中第一行數據的格式、sensor模組輸出圖像的大小、顯示圖像的大小等。一般YUV順序不對圖像是可以看到的,只是色彩和亮度轉換了;BAYER PATTERN第一行數據格式錯了,也就是RGB三種顏色亂了,都是可以看到圖像的;圖像輸出大小則比較重要,因為如果設置輸入的圖像大小大于實際輸出的大小,處理器可能會因為數據不夠一場而無法顯示,如果小于實際大小則只能輸出圖像的一部分,但是還是可以顯示的,當然這也可以在顯示面積不夠時做成局部放大的效果。

  圖像出來以后,就需要檢驗一些模組的質量,個人覺得可以從下面幾個方面觀察:幀率、有無壞點、噪聲、暗光下的圖像、白平衡、色彩還原能力、暴光、邊緣等。現在一般的sensor廠商的30萬像素的產品都可以VGA(640*480)30幀,2M像素做到 SVGA(800*600)30幀的幀率,一般應用已經足夠,拖影現象也控制得比較好;壞點是比較嚴重的問題,一般是sensor硬件上有問題,而且它自身的修復算法沒有能夠修復的,這樣對圖像會有很大的影響,一般打開sensor工作5分鐘就還沒有的話,基本上就可以放心了,要指出的是有的時候在一些物體的邊緣會出現“壞點”這是sensor算法的問題,一般移動一下物體或者模組就沒有了;噪聲問題是CMOS Sensor無法躲避的問題,由于感光部分結構跟CCD的差異,注定了同樣大小的感光面積下CMOS Sensor圖像噪聲要比CCD嚴重,但是各個廠商技術的差異還是會噪聲控制上也會有所不同,這時只要給個深色的背景就會看到了,同樣CMOS Sensor在低光條件下噪聲問題也比較突出,當然可以使用一些技術加以改進;白平衡是最基礎的問題,但是白平衡算法好壞也會影響sensor的表現,一些sensor遇到大片某個單色的畫面時可以明顯看到背景圖像顏色改變,這就是算法不好的原因;色彩還原可以照在標準色板上,看與原來的區別就可以看出sensor色彩還原能力了,也有一些sensor會某些顏色過了;若沒有色板也可以用色彩明亮豐富的紙來測試,關鍵是看sensor能否真實表現這些色彩;暴光控制現在一般都的模組都集成了,對著暗處和強光看它是否能夠調節到比較理想的狀態,一般不會有問題,但是也有例外,筆者曾經碰到一顆sensor在強光照射下啟動時沒有辦法正確暴光,畫面很暗;邊緣好壞是一個sensor細節表現能力證明,一些 sensor在邊緣部分會有鋸齒或者就是很模糊不清,這都是細節表現的問題;如果整個畫面比較灰,那就是sensor對比度出了問題。

  調試 sensor是一件非常有趣的事情,很多時候它跟一般的IC沒有太大區別,其實上我們也是把它當成一般IC來調試的,但是收獲卻很多。當然,調試的時候可能會遇到很多問題,有些可能會比較棘手,問題的解決也需要很多的經驗,但是辦法總比問題多,問題的解決就是經驗累積的過程、成長的過程。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/253029.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/253029.shtml
英文地址,請注明出處:http://en.pswp.cn/news/253029.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

利用反射修改final數據域

當final修飾一個數據域時,意義是聲明該數據域是最終的,不可修改的。常見的使用場景就是eclipse自動生成的serialVersionUID一般都是final的。 另外還可以構造線程安全(thread safe)的immutable類,比如String&#xff0…

mysql簡單創建數據庫權限(待修改備注)

CREATE DATABASE web DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;一、環境:CentOS 6.8mysql 5.6二、背景給外包的工作人員提供我司某臺服務器的 mysql 中某個數據庫的訪問權限。之所以要做限制,是防止他們對我司其他的數據庫非法進行操作。三、…

Centos 能ping通域名和公網ip但是網站不能夠打開,服務器拒絕了請求。打開80端口解決。...

博客搬遷,給你帶來的不便,敬請諒解! http://www.suanliutudousi.com/2017/10/29/centos-%E8%83%BDping%E9%80%9A%E5%9F%9F%E5%90%8D%E5%92%8C%E5%85%AC%E7%BD%91ip%E4%BD%86%E6%98%AF%E7%BD%91%E7%AB%99%E4%B8%8D%E8%83%BD%E5%A4%9F%E6%89%93…

ISP 圖像傳感器camera原理

1、Color Filter Array — CFA 隨著數碼相機、手機的普及,CCD/CMOS 圖像傳感器近年來得到廣泛的關注和應用。 圖像傳感器一般都采用一定的模式來采集圖像數據,常用的有 BGR 模式和 CFA 模式。BGR 模式是一種可直接進行顯示和壓縮等處理的圖像數據模式&am…

51nod 1027 大數乘法

1027 大數乘法基準時間限制&#xff1a;1 秒 空間限制&#xff1a;131072 KB 分值: 0 難度&#xff1a;基礎題收藏關注給出2個大整數A,B&#xff0c;計算A*B的結果。 Input第1行&#xff1a;大數A 第2行&#xff1a;大數B (A,B的長度 < 1000&#xff0c;A,B > 0&#xff…

file mmap

do_set_pmd統計參數只會在這里設置&#xff1a; add_mm_counter(vma->vm_mm, MM_FILEPAGES, HPAGE_PMD_NR);但是這貌似都是處理大頁的情況哪&#xff0c;小頁呢&#xff1f; alloc_set_pte中有函數&#xff1a;inc_mm_couter_fast(vma->vm_mm, mm_couter_file(page)&…

Linux鏈接庫三(C跟C++之間動態庫的相互調用)

http://www.cppblog.com/wolf/articles/74928.html http://www.cppblog.com/wolf/articles/77828.html http://www.jb51.net/article/34990.htm C和C之間庫的互相調用 extern "C"的理解&#xff1a; 很多人認為"C"表示的C語言&#xff0c;實際并非如此&…

C#如何開發多語言支持的Winform程序

C# Winform項目多語言實現(支持簡/繁/英三種語言)有很多種方案實現多語言&#xff0c;我在這里介紹一種最簡單最容易理解的&#xff0c;作為教學材題應該從通俗易懂入手。在寫這篇文章之前&#xff0c;本來想用枚舉窗體對象成員的方式設置語言&#xff0c;但是找不到源代碼了&a…

Alpha 沖刺 (2/10)

Alpha 沖刺 &#xff08;2/10&#xff09; 隊名&#xff1a;第三視角 組長博客鏈接 本次作業鏈接 團隊部分 團隊燃盡圖 工作情況匯報 張揚&#xff08;組長&#xff09; 過去兩天完成了哪些任務&#xff1a; 文字/口頭描述&#xff1a; 1、學習qqbot庫&#xff1b; 2、實時保存…

Linux學習之第二課時--linux命令格式及命令概述

命令概述 Linux提供了大量的命令&#xff0c;利用它可以有效地完成大量的工作&#xff0c;如磁盤管理&#xff0c;文件存取&#xff0c;目錄操作&#xff0c;進程管理&#xff0c;文件權限設定等 Linux命令格式 Linux命令的組成部分&#xff1a;命令字 命令選項參數&#xff…

Linux C語言調用C++動態鏈接庫

Linux C語言調用C動態鏈接庫 標簽&#xff1a; C調用C庫 2014-03-10 22:56 3744人閱讀 評論(0) 收藏 舉報 分類&#xff1a; 【Linux應用開發】&#xff08;48&#xff09; 版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 如果你有一個c做的動態…

Android實踐 -- 對apk進行系統簽名

對apk進行系統簽名 簽名工具 網盤下載 &#xff0c;需要Android系統的簽名的文件platform.x509.pem 和 platform.pk8 這個兩個文件在Android源碼中的 ./build/target/product/security 目錄下 具體的使用方法&#xff1a; java -jar signapk.jar platform.x509.pem platform.…

Java編寫基于netty的RPC框架

一 簡單概念RPC: ( Remote Procedure Call),遠程調用過程,是通過網絡調用遠程計算機的進程中某個方法,從而獲取到想要的數據,過程如同調用本地的方法一樣.阻塞IO :當阻塞I/O在調用InputStream.read()方法是阻塞的,一直等到數據到來時才返回,同樣ServerSocket.accept()方法時,也…

linux下c和c++互相調用

c調用cpp 創建個目錄 創建4個文件 c.c--c文件 cpp.cpp--c文件 cpp.hh--c聲明文件 Makefile c.c [javascript] view plaincopy#include "cpp.hh" int main() { cpp_fun(); } cpp.cpp [cpp] view plaincopy#include "cpp.hh" #include <stdi…

Applications Manager Docker監控

Docker 是一個流行的開源容器應用程序&#xff0c;允許您將應用程序、應用程序的內部依賴和關聯庫打包到一個單元中。Docker 的主要優點在于單臺機器上的多個 docker 容器共享同一操作系統內核&#xff0c;這可以幫助提升性能和節省大量內存。監控 docker 容器會很困難&#xf…

find

Linux中find常見用法示例 find path -option [ -print ] [ -exec -ok command ] {} \; find命令的參數&#xff1b; pathname: find命令所查找的目錄路徑。例如用.來表示當前目錄&#xff0c;用/來表示系統根目錄。-print&#xff1a; find命令將匹配的文件輸出…

PHP將多個文件中的內容合并為新的文件

function test(){$hostdir iconv("utf-8","gbk","C:\Users\原萬里\Desktop\日常筆記") ; //iconv()轉換編碼方式&#xff0c;將UTF-8轉換為gbk&#xff0c;若是報錯在gbk后加//IGNORE$filesnames scandir($hostdir); …

HTTP Live Streaming直播(iOS直播)技術分析與實現

不經意間發現&#xff0c;大半年沒寫博客了&#xff0c;自覺汗顏。實則2012后半年&#xff0c;家中的事一樣接著一樣發生&#xff0c;實在是沒有時間。快過年了&#xff0c;總算忙里偷閑&#xff0c;把最近的一些技術成果&#xff0c;總結成了文章&#xff0c;與大家分享。 前些…

中文論文格式【雜】

轉自知乎&#xff0c;https://www.zhihu.com/question/23791742/answer/344752056 【紙張】畢業論文一律打印&#xff0c;采取A4紙張&#xff0c;頁邊距一律采取&#xff1a;上、下2.5cm&#xff0c;左3cm,右1.5cm&#xff0c;行間距取多倍行距(設置值為1.25);字符間距為默認值…

jmeter 非gui 模式跑jmx

D:\study\apache-jmeter-3.0\bin>jmeter -n -t D:\study\apache-jmeter-3.0\基金排行.jmx -l D:\study\apache-jmeter-3.0\result_log\獲取基金排行.jtl D:\study\apache-jmeter-3.2\bin>jmeter -n -t D:\study\apache-jmeter-3.2\bin\examples\test\百度新聞首頁.jmx -l…