轉(zhuǎn)轍機缺口監(jiān)測問題一直是鐵路信號系統(tǒng)特別是信號維修部門關(guān)注的熱點,。隨著鐵路高速、高密度行車區(qū)段的不斷增加,,為了確保行車安全,,對行車道岔運行質(zhì)量與狀態(tài)穩(wěn)定性監(jiān)測無為重要。
1 系統(tǒng)技術(shù)指標(biāo)
主要技術(shù)指標(biāo):(1)缺口圖像分辨率0.01 mm,。(2)缺口偏移檢測精度0.1 mm,。(3)信號傳輸距離≤2.5 km(1.0 mm線徑)。(4)動態(tài)圖像傳輸碼流100~250 kbit·s-1,。
2 圖像采集模塊設(shè)計原理
圖像采集使用微型攝像頭,,圖像分辨率是指圖像中每單位長度所包含的像素或點的數(shù)目,常以像素/英寸(ppi)為單位來表示,。對電動轉(zhuǎn)轍機(S700K,、ZD6)正面缺口在4~6 mm,用普通的30萬像素攝像頭,,精度可達(dá)6/640=0.01 mm,。圖像數(shù)據(jù)量大小=圖像中的像素總數(shù)×圖像深度÷1 024(單位為kB)。30萬像素攝像頭捕捉到640×480的畫面,,二值圖像深度為1,,灰度圖像深度為8或者彩色圖像深度為24,普通灰度圖像大小為2400kB,。
JPEG是由ISO和CCITT 1986年成立了“聯(lián)合圖片專家組”(Joint Photographic Experts Group)所制定的靜止灰度或彩色圖像的壓縮標(biāo)準(zhǔn),。JPEG標(biāo)準(zhǔn)定義了3種編碼系統(tǒng):(1)基于DCT的有損編碼基本系統(tǒng),,可以適合大多數(shù)壓縮場合。(2)基于分層遞增模式的擴展,、增強編碼系統(tǒng),,用于高壓縮比、高精度或漸進重建應(yīng)用場合,。(3)基于預(yù)測編碼中DPCM方法的無損系統(tǒng),,用于無失真應(yīng)用的場合。
圖像應(yīng)用系統(tǒng)要與JPEG兼容,,必須支持JPEG基本系統(tǒng),,可以通過修改其文件格式、圖像分辨率或彩色空間模型應(yīng)用于不同場合,。在不降低圖像視覺質(zhì)量的基礎(chǔ)上JPEG標(biāo)準(zhǔn)可以將圖像壓縮到1/10~1/50,,這樣一幀圖像的大小就可以壓縮到48 kB,根據(jù)需要還可以壓縮為6 kB的二值圖像,,滿足缺口檢測的要求,。
在基本系統(tǒng)中,輸入和輸出數(shù)據(jù)的精度為8 bit,,量化DTC值的精度為11 bit,。壓縮過程由3個步驟組成:(1)DCT計算。(2)量化,。(3)用熵編碼器進行變長碼賦值,。具體過程如下:先把圖像分割成一系列8×8的子塊,然后按從左向右從上到下的次序處理,?;鞠到y(tǒng)的編碼器如圖2所示。
Video4Linux(V4L)是Linux的影像串流系統(tǒng)與嵌入式影像系統(tǒng)的基礎(chǔ),。Video4Linux是Linux Kemel里支持影像設(shè)備的一組APIs,,配合適當(dāng)?shù)囊曨l采集卡與驅(qū)動程序,Video4Linux可以實現(xiàn)影像圖像采集,,它支持圖像的JPEG壓縮。Video4Linux分為2層式架構(gòu),,上層為Video4Linux驅(qū)動程序本身,,下層架構(gòu)則是影像設(shè)備的驅(qū)動程序。實驗中使用了V4L的上層驅(qū)動程序,,即V4L所提供給程序開發(fā)人員的APIs,。通過使用Video 4Linux的API函數(shù)從視頻設(shè)備中讀取圖像數(shù)據(jù),然后將這些數(shù)據(jù)寫入Frame Buffer,,使攝像頭采集到的圖像在液晶屏中顯示出來,。
3 圖像采集硬件設(shè)計
在ARM9系統(tǒng)中通過USB接口連接USB攝像頭對圖像進行采集,,實現(xiàn)轉(zhuǎn)轍機缺口監(jiān)測的圖像采集。ARM9核心板:處理器采用ARM920T處理器的S3C2410A,,工作頻率203 MHz,;SDRAM是64 MB;NANDFlash:64 MB,;NORFlash:2 MB,;USB接口:AU9254A21支持USB1.1協(xié)議。
USB采集電路的原理框圖如圖3所示,。
USB主機芯片采用AU9254A21,,它是單片的四端口USB控制芯片,這里擴展了4個USB接口,。它的上端接USB控制系統(tǒng),,下端可接USB設(shè)備。
4 圖像采集軟件實現(xiàn)
在Linux系統(tǒng)中,,通過使用Video4Linux的API函數(shù),,從視頻設(shè)備中讀取圖像數(shù)據(jù),然后將這些數(shù)據(jù)寫入系統(tǒng)臨時文件為后續(xù)的功能實現(xiàn)奠定基礎(chǔ),。
采集程序?qū)崿F(xiàn)過程:一個嵌入式Linux系統(tǒng)從軟件的角度看通常分為4個層次:Bootloader,、Linux內(nèi)核、文件系統(tǒng)和用戶應(yīng)用程序,,如圖4所示,。
4.1 移植Bootloader
USB攝像頭的采集應(yīng)用程序是建立在Linux系統(tǒng)上,首先配置適合系統(tǒng)的Bootloader,,Linux內(nèi)核在RAM中運行,,這就需要Linux的Bootloa der將整個內(nèi)核復(fù)制到RAM中。系統(tǒng)中Bootloader是運行在NORFlash中,,它的主要作用是:將Linux內(nèi)核文件,、根文件系統(tǒng)文件、Linux啟動參數(shù)文件復(fù)制到SDRAM中,,并跳至RAM中Linux內(nèi)核的首地址,,運行Linux。各文件在RAM中存放的空間示意圖,,如圖5所示,。
4.2 編譯下載內(nèi)核
將Linux源代碼包放置在工作目錄下解壓,用命令:#tar xjvf linux-2.4.18.tar.bz2,。編譯內(nèi)核,,在終端輸入命令:#make menu config命令,選擇“load analternate configuration file”,,裝載arch/am目錄下的2410配置文件,。建立依賴關(guān)系,,在終端運行命令:#make dep。編譯內(nèi)核,,在終端輸入命令:#make zImage,。編譯完成后在arch/arm/boot目錄下會生產(chǎn)ARM Linux內(nèi)核映像文件zIm age,用FlashFXP軟件的FTP下載,。
4.3 圖像采集應(yīng)用程序
在圖像采集設(shè)備驅(qū)動安裝后,,只需再編寫一個視頻流采集應(yīng)用程序,即可采集視頻圖像,。
前面提到Linux系統(tǒng)中把設(shè)備看成設(shè)備文件,,在用戶空間可以通過標(biāo)準(zhǔn)的I/O系統(tǒng)調(diào)用函數(shù)操作設(shè)備文件,從而達(dá)到與設(shè)備通信交互的目的,。視頻設(shè)備在Linux系統(tǒng)下為一個字符型設(shè)備,,分配給視頻設(shè)備使用的主設(shè)備號固定為81,次設(shè)備號為0~31,。在Linux系統(tǒng)中通常使用設(shè)備名為video0~video31,,使用以下命令在設(shè)備文件夾/dev/下創(chuàng)建1名稱為video0的節(jié)點:# mknod/dev/video0 c 81 0配置Video4Linux內(nèi)核:在終端使用make menuconfig命令打開S3C2410Linux內(nèi)核編譯的Main Menu窗口,并進入“Multimedia devices→”菜單選項,,然后將Video For Linux配置為模塊,;返回主菜單(Main Menu),再進入“USB support→”菜單選項,,然后將USB Camera support設(shè)置為模塊,,退出并保存配置,使用make dep命令建立文件依聯(lián)關(guān)系,,然后使用make modules命令編譯鏈接模塊,。編譯鏈接完成后,在/linyx/kernel/driv ers /media/video文件夾中生成videodev.o模塊,,在/linux/kemel/drivers/usb/文件夾中生成ov511.o模塊,,ov511芯片直接就支持Linux,使用這款芯片的攝像頭有網(wǎng)眼V2000,。
利用V4L API獲取視頻圖像的應(yīng)用程序流程,,如圖6所示。
下面簡要介紹其實現(xiàn):
(1)打開視頻設(shè)備,,這里用int v41_open(char*,,v41_device*)實現(xiàn)。
(2)獲得設(shè)備信息的任務(wù),,這里用extern int v41_get_capability(v41_device*)實現(xiàn)。函數(shù)有vd->capability和vd->picture兩個結(jié)構(gòu)體,。capability主要包括設(shè)備名稱,、支持的最大最小分辨率,、信號源信息等。picture結(jié)構(gòu)包括了亮度,,對比度,,色深。及兩個函數(shù)中最主要的語句ioctl,。對于ioctl的行為,,它是由驅(qū)動程序提供和定義的,在這里是由v41所定義,,其中宏VIDIOCGCAP和VIDIOCGPICT的分別表示獲得視頻設(shè)備的capability和picture,。
運用int v41_get_mbuf(v41_device*vd)函數(shù)。通過這個結(jié)函數(shù)可以獲得攝像頭可映射的設(shè)備存儲圖像的內(nèi)存大小,、攝像頭可同時存儲的幀數(shù),、每一幀圖像的偏移量。
(3)按需要更改設(shè)備的相應(yīng)設(shè)置,,通過int v41_set_picture函數(shù)實現(xiàn),。其核心是v41為提供的ioctl相關(guān)調(diào)用,通過這個函數(shù)可以修改如亮度,,對比度等相關(guān)的值,。
(4)獲得采集到的圖像數(shù)據(jù),通過extern int v41_grab_picture實現(xiàn),。先使用ioctl(fd,,VIDIOCGMBUF,&grab_vm)函數(shù)獲得攝像頭存儲緩沖區(qū)的幀信息,,之后修改voideo_mmap中的設(shè)置,,例如重新設(shè)置圖像幀的垂直及水平分辨率、彩色顯示格式,。其中vd->map所指向的數(shù)據(jù)就是圖像數(shù)據(jù),。
采集其中的第一幀,使用ioctl(fd,,VIDIOCMCAPTURE,,&grab_buf)函數(shù),若調(diào)用成功,,則激活設(shè)備真正開始一幀圖像的截取,,是非阻塞的。接著使用ioctl(fd,,VIDIOCSYNC,,&frame)函數(shù)判斷該幀圖像是否截取完畢,成功返回表示截取完畢,,之后就可把圖像數(shù)據(jù)寫入到Frame Buffer,。
然后利用grab_fd.frames值確定采集完畢攝像頭幀緩沖區(qū)幀數(shù)據(jù)進行循環(huán)的次數(shù),。在循環(huán)語句中,也是使用VIDIOCMCCAPTURE? ioctl和VIDIOCSYNC?ioctl函數(shù)完成每幀截取,,但要給采集到的每幀圖像賦地址,,利用語句buf=grab_data+grab_vm.offsets[frame],然后保存文件的形式,。若要繼續(xù)采集可再加一個外循環(huán),,在外循環(huán)語句只要給原來的內(nèi)循環(huán)再賦frame=0即可。通過顯示屏把采集到的視頻圖像顯示出來,。
(5)關(guān)閉設(shè)備,,int v41_close(v41_device*),主要是關(guān)閉設(shè)備,,取消映射,。
5 圖像采集效果
將攝像頭插入到USB主機下行口,這時在終端上將打印以下信息:
ov511.c:USB OV511+camera found
ov511.c:Camera type(108)not recognized
ov511.c:Please notify mmcclell@bigfoot.com of the name,,
ov511.c:manufacturer,,model.a(chǎn)nd this number of your camera.
ov511.C:Also include the output of the detection process.
ov511.c:Sensor iS an OV7620
ov511.c:Device registered on minor 0
進入到本實驗程序所在文件夾,運行本實驗程序,,觀察液晶屏的圖像效果:
#/videodemo
6 結(jié)束語
在ARM-Linux平臺上,,通過使用Video4Linux的API函數(shù)從視頻設(shè)備中讀取圖像數(shù)據(jù),并對圖進行了JPEG格式壓縮,,再將數(shù)據(jù)進行顯示處理,,為后續(xù)的轉(zhuǎn)轍機缺口檢測的上傳功能實現(xiàn)奠定了基礎(chǔ)。系統(tǒng)若配合使用可靠的傳輸技術(shù)與先進的上位機圖像處理系統(tǒng),,將使轉(zhuǎn)轍機缺口監(jiān)測系統(tǒng)得以實現(xiàn),。