您的位置: 首頁 > 新聞 > 游戲雜談 > 新聞詳情

何等強(qiáng)悍的神級DIY!民間高手自己動手做數(shù)碼相機(jī)

時間:2011-11-03 10:44:59
  • 來源:果殼網(wǎng)
  • 作者:liyunfei
  • 編輯:ChunTian

3、軟件構(gòu)成

3.1、數(shù)據(jù)處理

AD轉(zhuǎn)換器的像素采集率可以高達(dá)2.1M像素每秒。首先,圖像數(shù)據(jù)被存儲在微處理器的緩沖存儲器里。因?yàn)槊棵?.1M的數(shù)據(jù)量對軟件來說實(shí)在太過分,圖像數(shù)據(jù)會存儲到PLD的先進(jìn)先出隊(duì)列里。隊(duì)列半滿時觸發(fā)微處理器的DRDT中斷,然后微處理器一次接受一半隊(duì)列的數(shù)據(jù)。隊(duì)列的大小是16字節(jié),也就是說軟件的操作周期只要有像素采集率的1/8就足夠。這對觸發(fā)中斷來說不算太快,但是仍然需要微處理器高速運(yùn)行。這個項(xiàng)目里用了ARM7TDMI核心的快速中斷請求功能(FIQ,fast interrpt request,通過編組寄存器產(chǎn)生低延遲中斷),可惜在Cortex-M3核心中這一功能被去掉了。

當(dāng)微處理器響應(yīng)FIQ請求時,一些寄存器切換到FIQ的編組寄存器狀態(tài),然后FIQ例程可以直接進(jìn)入/離開而省去了切換過程。為了最大化執(zhí)行效率,一般來說FIQ例程是用匯編語言寫的。在啟用這一功能的 數(shù)據(jù)波形圖 里,可以觀察到8位的數(shù)據(jù)在不用存儲的時候只需要0.8微秒處理,加上DMA模式下從總線寫入SD卡也只用了2微秒,這樣的延遲可以接受。

在每一行數(shù)據(jù)中有1094個像素,但其中有效的只有1024個。這些數(shù)據(jù)被存入內(nèi)存,中斷信號SYNC#在每一行數(shù)據(jù)的開始輸出,用來同步第一個像素的數(shù)據(jù)。

3.2、重建圖像

捕捉到的數(shù)據(jù)可以用通用的8位灰度BMP位圖格式存儲在MicroSD卡里,寬1024像素,長視拍攝時間而定。存儲的格式是DCIMLCAMYnnnn.BMP(nnnn 是編號),和普通的數(shù)碼相機(jī)幾乎一樣。

在使用廉價的微處理器將圖像數(shù)據(jù)存入SD卡時會遇到一些困難,主要是輸入的數(shù)據(jù)要在極短的時間內(nèi)存進(jìn)文件。這個制作中的最大數(shù)據(jù)傳輸率是2MB每秒。幸運(yùn)的是LPC2368有一個MCI(SD/MMC卡的原生控制模式),它能提供8MB/s的數(shù)據(jù)讀取和6MB/s的數(shù)據(jù)寫入能力。但是這是指讀寫大文件時的平均速度,事實(shí)上每次讀寫之間都需要一些死時間用在SD卡的內(nèi)部處理和文件系統(tǒng)上,為了避免這些浪費(fèi),一個數(shù)據(jù)緩沖器被用來在死時間中暫存數(shù)據(jù),但是微處理器系統(tǒng)的內(nèi)存大小是有限的,不一定有足夠的空間進(jìn)行緩沖。

讓我們估計(jì)一下每次寫數(shù)據(jù)操作所能容許的時間耗費(fèi)。在這個制作里,所有32K的SRAM都用來做數(shù)據(jù)緩沖器,而程序在16K的ethernet RAM上運(yùn)行。數(shù)據(jù)緩沖器分成兩半,其中一塊填充數(shù)據(jù)的時候另一塊將數(shù)據(jù)寫入閃存。 這要求在每8毫秒里寫入16KB的數(shù)據(jù),每次操作必須在下次操作之前完成 。接下來的軟件技巧可以解決這個問題。

數(shù)據(jù)寫入過程中最重要的延遲發(fā)生在集群分配時,在實(shí)時操作系統(tǒng)里這是個很大的問題,集群分配導(dǎo)致的死時間視情況不同可能高達(dá)數(shù)秒鐘。這個制作里使用集群預(yù)分配(寫入數(shù)據(jù)時用f-lseek函數(shù)申請一個比目前需要大很多的空間)來避免寫入數(shù)據(jù)時進(jìn)入分區(qū)表重新定位。每次寫入操作都包含一個用來結(jié)束操作的集群邊界條件。想象一下SD卡里的文件預(yù)先整理出一塊整齊的空間給數(shù)據(jù),這就避免了寫入數(shù)據(jù)過程中大量導(dǎo)致延遲的未知問題。

盡管有這些用來盡可能減小死時間的方法,SD卡或多或少還有一些內(nèi)部處理時間。在挑選SD卡的時候需要挑寫入速度盡可能快的SD卡。我在許多牌子之間做過比較,結(jié)果發(fā)現(xiàn)東芝產(chǎn)SD卡有最小的寫入延遲,也有最穩(wěn)定的表現(xiàn)。

3.3、顯示圖像

由于獲得的圖像數(shù)據(jù)都是一維的線條,它不能像傳統(tǒng)平面成像的二維圖像一樣顯示。為了這個問題需要一些特別的顯示模式。

其中一種是范圍視圖,輸入的圖像信號連接到Y(jié)軸,就像像示波器的輸入。Y軸信號表示亮度,X軸信號表示各點(diǎn)在線性傳感器上的位置。這個模式適于用來觀察感光度和聚焦情況。不同點(diǎn)之間數(shù)據(jù)的差距可以用來幫助對焦,當(dāng)圖像聚焦時,波形圖上產(chǎn)生許多峰谷,出現(xiàn)最大的峰峰值表明焦距已經(jīng)對上。這是現(xiàn)在數(shù)碼相機(jī)里自動對焦功能的原型。

另外一種是卷動視圖,圖像向上卷動,新掃描到的圖像出現(xiàn)在屏幕底部。這個模式能夠用來調(diào)整線分辨率。最后生成的二維圖像的高寬比決定于線分辨率和物體移動的速度。卷動視圖能夠展現(xiàn)出捕捉到的2D景象,但是如果被攝物體不移動就只剩下水平的線了,所以相機(jī)或者物體之一一定要在給定的運(yùn)動速度下拍攝,這樣才能一邊觀察一邊調(diào)節(jié)線分辨率。

4、使用說明

線性掃描相機(jī)的一般用途同膠片時代的狹縫相機(jī)類似。狹縫相機(jī)很容易在性能上擊敗線性掃描相機(jī),它的感光顆粒直徑14um,遠(yuǎn)遠(yuǎn)小于CCD中單元的直徑,意味著極好的分辨率。但是玩狹縫相機(jī)意味著你要足夠的取景,對焦,拍攝和沖印能力,非老鳥不能為。

相機(jī)位置

這個相機(jī)需要被固定在合適的角度,這樣物體所成的像可以掃過線性傳感器。比如說,但物體橫向移動或者橫方向特別長的話,相機(jī)最好固定在線性傳感器處于垂直的位置。這個角度必須精確,否則拍出的圖片會出現(xiàn)類似平行四邊形的扭曲。

調(diào)節(jié)焦距

這個線性掃描相機(jī)由一個5向搖桿控制(上下左右和中鍵),向右按可以切換顯示模式(范圍模式或者卷動模式)。首先,輸入信號的電平可以通過光圈或者增益控制(上下點(diǎn)擊)。增益控制也可以通過左鍵自動調(diào)整。接下來,通過對焦環(huán)調(diào)節(jié)焦距直到信號的峰峰值最大。

調(diào)整傳感器線分辨率

在卷動模式下可以調(diào)節(jié)相機(jī)匹配傳感器線分辨率。調(diào)節(jié)直到屏幕上顯示的是正確的高寬比。傳感器線分辨率也可以通過物體移動的速度,物體離鏡頭的距離和焦距來計(jì)算,這略微有些誤差,但數(shù)字圖片是可以通過后期處理來修正的。當(dāng)然如果傳感器線分辨率實(shí)在太低的話,這個過程會損失一些信息。通常來說傳感器線分辨率高不是壞事,就是靈敏度可能低些。傳感器線分辨率影響曝光時間(靈敏度),所以輸入電平的增益需要和不同的線分辨率匹配。

獲得圖像

中間的按鈕用來開始/停止拍攝。按下按鈕就可以開始記錄圖像。集群預(yù)分配會在0.5秒內(nèi)完成,然后暫停直到松開。松開按鈕時會開始記圖像錄,然后在任意按鈕按下時停止或者直到寫入數(shù)據(jù)到達(dá)了集群預(yù)分配區(qū)域的邊界。預(yù)分配的大小被配置到10萬行(大約100MB),但是可以根據(jù)拍攝物的尺寸改變。生成的圖像文件可以在電腦上進(jìn)行預(yù)處理,調(diào)節(jié)圖片朝向,高寬比或者做伽瑪校正。

友情提示:支持鍵盤左右鍵"←""→"翻頁
0

玩家點(diǎn)評 0人參與,0條評論)

收藏
違法和不良信息舉報
分享:

熱門評論

全部評論

他們都在說 再看看
3DM自運(yùn)營游戲推薦 更多+