您現(xiàn)在的位置:中國農(nóng)業(yè)儀器網(wǎng) > 技術文章 > 農(nóng)業(yè)環(huán)境監(jiān)測儀中多路圖像采集系統(tǒng)的設計
農(nóng)業(yè)環(huán)境監(jiān)測儀中多路圖像采集系統(tǒng)的設計
來源: http://www.petseason.cn/ 類別:技術文章 更新時間:2013-11-12 閱讀次
近年來,隨著計算機圖像處理技術、人工智能方法、圖像模式識別和多光譜識別等高新技術的發(fā)展,計算機圖像處理技術也日臻成熟,已經(jīng)廣泛深入農(nóng)業(yè)領域,其主要應用集中于農(nóng)作物種子資源檢測、農(nóng)產(chǎn)品分級、農(nóng)業(yè)機器視覺、農(nóng)產(chǎn)品長勢檢測、精細灌溉、農(nóng)業(yè)環(huán)境監(jiān)測儀等。作為圖像處理的前端,圖像采集是一個重要的環(huán)節(jié),它將對象的可視化圖像和特征轉(zhuǎn)化為能被計算機處理的數(shù)據(jù)。所以,圖像采集系統(tǒng)的穩(wěn)定性對圖像處理的效果具有直接的影響。目前,圖像采集有很多方法,最常用的圖像采集方法是圖像采集卡形式。圖像采集卡工作過程是通過視頻接口從視頻源獲取視頻信號,然后視頻信號進行模數(shù)轉(zhuǎn)換,并利用解碼器進行解碼,從而可處理視頻數(shù)據(jù)。
本文研究并實現(xiàn)農(nóng)業(yè)環(huán)境監(jiān)測儀的一種嵌入式數(shù)字圖像采集系統(tǒng),該系統(tǒng)基于ARMS3C2440-Linux2.6.30.4平臺,采用的USB2.0數(shù)字攝像頭來獲取圖像,視頻編程采用V4L2API,通過移植USB gadget下USB device模塊在flash存儲器上開辟空間作為上位機和PC、下位機和其它處理終端的共享空間,在此空間中共享圖像數(shù)據(jù)。這樣上位機可以通過訪問這塊空間實現(xiàn)圖像的采集,為下一步圖像處理提供穩(wěn)定且高質(zhì)量的圖像來源。
本農(nóng)業(yè)環(huán)境監(jiān)測儀系統(tǒng)處理器采用s3c2440,該芯片是三星公司推出的16/32RISC處理器,采用ARM920T內(nèi)核,整體設計融合了MMU,AMBABUS和Harvard結(jié)構(gòu),具有獨立的16kB指令Cache和16kB數(shù)據(jù)Cache。Linux內(nèi)核采用Linux2.6.30.4。圖像采集設備采用中星微ZC301數(shù)字攝像頭,該攝像頭為USB接口。該終端的系統(tǒng)結(jié)構(gòu)圖如圖1所示。
農(nóng)業(yè)環(huán)境監(jiān)測儀中ARM-Linux平臺搭建:Linux內(nèi)核移植及配置Linux內(nèi)核是Linux操作系統(tǒng)的核心。它主要包括以下幾個部分:存儲管理、CPU和進程管理、文件系統(tǒng)、設備管理和驅(qū)動、網(wǎng)絡通信以及系統(tǒng)的初始化(引導)和系統(tǒng)調(diào)用等。
本系統(tǒng)的軟件部分包括系統(tǒng)初始化引導程序boot loader、Linux2.6.30.4操作系統(tǒng)內(nèi)核、yaffs文件系統(tǒng)、USB攝像頭驅(qū)動、Frame buffer設備驅(qū)動、V4L2API和USB device驅(qū)動等。Linux內(nèi)核實現(xiàn)了系統(tǒng)內(nèi)存管理、軟件程序管理、硬件管理和文件系統(tǒng)管理等功能。隨著內(nèi)核的不斷發(fā)展,內(nèi)核的功能逐漸增強,但目錄變動不大。本文要想實現(xiàn)圖像的多路采集,首先需要移植內(nèi)核Linux2.6.30.4,主要步驟如下:因為需要用到y(tǒng)affs2文件系統(tǒng),首先要為內(nèi)核增加yaffs2補;修改機器碼,使之與boot loader的機器碼一致;指定目標板、編譯器和編譯器路徑;增加devfs文件系統(tǒng)管理器的支持;修改晶振頻率;修改mtd分區(qū);修改NandFlash驅(qū)動,支持K9F1G08的Nand Flash;把s3c2440的默認配置寫入con fig文件;配置內(nèi)核。
配置CPU選項:
增加對ZC301USB攝像頭的支持:
當然也要選擇上Support for Host-side USB,USB device file system,USB device class-devices,OHCIHCD support等選項來支持USBhost接口。最后make zIm-age,生成內(nèi)核映像。
交叉編譯工具安裝在Linux系統(tǒng)中,工具鏈是生成內(nèi)核映像必需的程序段,工具鏈的工作過程是從一個工具的輸出再到下一個工具的輸入。Linux工具鏈包括3部分:Com-piler,Assembler,Linker。GCC是Linux下C/C++語言的編譯器。本系統(tǒng)采用虛擬機中安裝RedHat9的方式作為交叉編譯器3.4.1的編譯環(huán)境,將編譯器的壓縮包cross-3.4.1.tar.bz2拷到Linux某目錄下,進入該目錄解壓,修改/etc/bashrc文件,將解壓的3.4.1/bin目錄添加到命名的默認路徑。農(nóng)業(yè)環(huán)境監(jiān)測儀的模塊的編譯和加載使用命令make modulesM=./drivers/usb/gadget編譯生成s3c2410_udc.ko和file_storage.ko;然后將其下載到目標機中Linux2.6.30.4/lib/modules/2.6.30.4目錄下,使用insmods3c2410_udc.ko和insmodg_file_storage.kofile=floppy.Img removable分別加載;等待模塊加載完后,重新插拔USBdevice接口,PC端出現(xiàn)可移動存儲設備,至此Nand Flash模擬U盤成功;然后進行格式化,格式為FAT文件系統(tǒng)。
農(nóng)業(yè)環(huán)境監(jiān)測儀的V4L2圖像采集部分:V4L2重要接口函數(shù)和數(shù)據(jù)結(jié)構(gòu)Video for Linux(簡稱V4L),是Linux中支持影像設備的一組API,它配合適當?shù)囊曨l采集設備和相應的驅(qū)動程序,可以實現(xiàn)圖像采集、AM/FM無線廣播、影像CODEC和頻道切換等功能。現(xiàn)在已有的版本為Video4Linux2(簡稱為V4L2),是從V4L的基礎上發(fā)展起來的,從2.5.x版本后開始加入Linux內(nèi)核。
所謂的V4L2有兩層含義:應用程序可以按照此框架訪問視頻設備、獲取圖像信息;在Linux中,視頻設備是設備文件,可以像訪問普通文件一樣對其進行讀寫,攝像頭在/dev/video0下。主要的函數(shù)有open(),close(),ioctl(),mmap(),write(),read()等。主要涉及的數(shù)據(jù)結(jié)構(gòu)有:structv4l2_buffer,structv4l2_re-quest_buffers,structv4l2_capability,structv4l2_crop-cap,structv4l2_crop,structv4l2_format等。
農(nóng)業(yè)環(huán)境監(jiān)測儀用戶空間視頻采集過程首先在進行makemenuconfig操作時,將mul time-dia device菜單中的Video for Linux選項選上,這樣內(nèi)核就配置了為農(nóng)業(yè)環(huán)境監(jiān)測儀獲取視頻的設備提供接口的Video4Linux。V4L2下用戶空間應用程序的流程如下:首先用open系統(tǒng)調(diào)用打開視頻設備,通過io ctl讀取設備信息并初始化設備;更改設備當前設置。視頻采集可采用兩種方法:內(nèi)存映射或直接從設備讀;對采集的視頻進行處理;關閉視頻設備。在視頻數(shù)據(jù)的傳輸中一般不使用read(),write()系統(tǒng)調(diào)用來直接運行,大多數(shù)情況下使用內(nèi)存映射的流傳輸方式,流傳輸方式不要實際數(shù)據(jù)的拷貝,驅(qū)動和應用程序之間只需要交換被映射內(nèi)存的指針就可以了。
其流程圖如2所示。
此時的用戶程序需要包含頭文件<Linux/video-dev2.h>,使用arm-linux-gcc編譯,并下載到目標板運行。
農(nóng)業(yè)環(huán)境監(jiān)測儀的多路協(xié)調(diào)本文以兩路視頻為例。進程是運行著一個或多個線程線程的地址空間和這些線程所需要的系統(tǒng)資源。它是Linux運行的基本單元,所有的進程都擁有自己獨立的處理環(huán)境和系統(tǒng)資源。進程的環(huán)境由當前系統(tǒng)狀態(tài)及其父進程信息決定并組成。對于單CPU系統(tǒng)來說,雖然Linux操作系統(tǒng)是一個多用戶多任務的操作系統(tǒng),但在某一時刻,只能有一個進程處于運行狀態(tài),各任務根據(jù)調(diào)度算法在這些狀態(tài)之間不停地切換。在Linux2.6內(nèi)核中,用戶級進程擁有以下幾種狀態(tài):就緒/運行態(tài)、等待狀態(tài)(可以被中斷)、等待狀態(tài)(不可以被中斷)、停止狀態(tài)和僵死狀態(tài)。每個進程都受調(diào)度策略和優(yōu)先級的控制。這些參數(shù)可以通過應用程序顯示執(zhí)行sched_setscheduler()和sched_setparam()函數(shù)來指定。
用戶進程狀態(tài)轉(zhuǎn)換如圖3所示。
實驗結(jié)果采集流程:配置USB攝像頭,連續(xù)抓取10幅圖片,分別取第1和第10幅圖像進行分析對比試驗。效果如圖4所示。
由圖4可見,圖像在灰度為200處右移,實際表現(xiàn)為亮度變大,圖像質(zhì)量越來越清晰,說明開始階段圖像采集設備前期具有短暫的調(diào)節(jié)過程,調(diào)節(jié)后的圖形質(zhì)量明顯提高。
VC++界面設計Windows下,與USB外設的任何通信需通過設備驅(qū)動,該驅(qū)動知道如何與系統(tǒng)的USB驅(qū)動和訪問設備的應用程序通信。Windows包含應用程序與USB通信需要的各種信息,不需要再安裝驅(qū)動;Win32的應用程序接口(API)函數(shù),使得設備驅(qū)動能與應用程序之間相互通信,開發(fā)應用程序也不需要去了解復雜的USB協(xié)議。主要步驟有:建立MFC AppWizard(exe)工程;打開設備并返回設備句柄;獲取設備信息;識別接口信息;識別設備路徑名;設置設備等。與設備進行數(shù)據(jù)交換,首先把設備打開,windows下每個設備被當成一個文件夾來訪問,每個文件都有一個文件名。文件打開后就可以使用Read File和Write File來讀寫文件了。
本系統(tǒng)采用Nand Flash模擬PC和下位機之間的交互區(qū)域,實現(xiàn)了圖像的存儲和訪問。其具有如下優(yōu)點:結(jié)構(gòu)層次清晰;圖像傳輸可連續(xù);圖像采集可控性強;圖像質(zhì)量高。但是,由于FAT不是為Flash設計,因此需要透過FTL來訪問Nand Flash。此外,PC和下位機的同步問題也需要進一步的研究和改善。
圖像處理和識別作為一種更加直觀的途徑正越來越多的應用在農(nóng)業(yè)環(huán)境監(jiān)測儀的農(nóng)業(yè)領域里。本文設計了一種基于嵌入式Linux圖像采集系統(tǒng),重點研究了Nand Flash模擬USB device實現(xiàn)圖像存儲的過程。實驗證明,本系統(tǒng)提供的高質(zhì)量且穩(wěn)定的圖像來源能夠應用于農(nóng)業(yè)環(huán)境中。
- 【中國農(nóng)業(yè)儀器網(wǎng)】聲明部分文章轉(zhuǎn)載自其它媒體,轉(zhuǎn)載目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點和對其真實性負責,且不承擔此類作品侵權(quán)行為的直接責任及連帶責任。如涉及作品內(nèi)容、版權(quán)和其它問題,請在30日內(nèi)與本網(wǎng)聯(lián)系。
推薦儀器
最近更新儀器
相關技術文章