馮 奇,毛 偉,黃漲國,馬孟鴻,沈曉宇
在醫(yī)院眼科及眼鏡店中進(jìn)行驗(yàn)光時(shí),最后一步必定是主覺驗(yàn)光。最早是在紙上印視標(biāo),用熒光燈照亮,掛在被檢者正前方5m處,由被檢者觀察大小、形狀、指向不一的視標(biāo),進(jìn)行眼屈光度的主覺檢測(cè)。后來發(fā)展到投影視標(biāo),由投影機(jī)射出強(qiáng)光,照在投影板上,被照亮的各類符號(hào)通過投影鏡頭投射在專用幕布或反射板上。但是,這種視標(biāo)儀具有大量的機(jī)械結(jié)構(gòu),存在對(duì)焦問題,且投影的視標(biāo)符號(hào)與周圍的明亮背景反差極小,一般明室視標(biāo)對(duì)比度僅為2~10(與室內(nèi)亮度有關(guān)),嚴(yán)重限制了反差測(cè)試能力,且使用壽命有限[1]。同時(shí),普通紅綠標(biāo)的色飽和度不高,影響了觀察的準(zhǔn)確性。而且受光學(xué)原理所限,這類視標(biāo)不能形成偏振投影,所以也不能形成優(yōu)質(zhì)的立體影像,不能對(duì)人眼的立體視覺進(jìn)行檢測(cè),有一定的局限性。因此,開發(fā)高清的、能進(jìn)行三維圖像顯示的視標(biāo)儀在屈光檢查中有重要的意義。這類視標(biāo)儀清晰度高、反差大,可以形成立體影像,大大地提高了性能,拓展了應(yīng)用范圍。
由于該視標(biāo)儀需要向高清顯示器上輸出高清圖像,另一方面又需要對(duì)遙控器的指令做出實(shí)時(shí)反應(yīng),處理有關(guān)矢量圖像,因而需要處理器有較高的處理速度,并且具有能夠輸出高清圖像的數(shù)字接口——DVI-D或者HDMI接口。同時(shí)要求主機(jī)的功耗低、體積小,能裝在一個(gè)很小的空間里,因此,可以考慮支持高清輸出的ARM系統(tǒng)以及通用計(jì)算機(jī)主板。為了保證一定的視標(biāo)生成速度、圖像處理速度,考慮到軟件系統(tǒng)的便利性,降低軟硬件開發(fā)成本,提高開發(fā)速度,選擇通用的、集成低功耗賽揚(yáng)處理器的minithin iTX主板,主要用作視標(biāo)儀軟件系統(tǒng),不涉及硬件控制部分。
該主板支持硬解1 080p MPEG-2、VC-1和H.264 3種高清視頻,支持HDMI接口及DVI+VGA雙接口,支持LVDS雙八位數(shù)據(jù)通道,與3D高清顯示器或面板連接簡(jiǎn)便;且整機(jī)功耗只有19~25W,適于作為視標(biāo)儀的硬件平臺(tái)。
為降低儀器成本,軟件平臺(tái)采用開源Linux系統(tǒng),結(jié)合C++開發(fā)平臺(tái)[2],作為整機(jī)的軟件系統(tǒng)。因?yàn)槎叨技闪舜罅繉?shí)用的底層軟件接口,所以開發(fā)者不用花費(fèi)精力編制龐大復(fù)雜的應(yīng)用軟件系統(tǒng)。
為實(shí)現(xiàn)對(duì)視標(biāo)系統(tǒng)及主機(jī)的遙控,另外單獨(dú)設(shè)計(jì)遙控器、遙控信號(hào)接收解碼及控制系統(tǒng),用于各種遙控信號(hào)的解碼,將之傳遞給主機(jī)產(chǎn)生各種動(dòng)作,控制液晶面板背光的亮度,對(duì)主機(jī)進(jìn)行開機(jī)、復(fù)位、待機(jī)、關(guān)機(jī)等操作。
遙控信號(hào)的解碼采取單片機(jī)解碼的方式。單片機(jī)解碼控制系統(tǒng)采用自帶USB接口及驅(qū)動(dòng)的、混合信號(hào)MCU C8051F320[3],片內(nèi)集成了數(shù)據(jù)采集和控制系統(tǒng)中常用的模擬部件、其他數(shù)字外設(shè)及USB接口部件,簡(jiǎn)化了USB技術(shù)的開發(fā),縮短了開發(fā)周期。
該高清視標(biāo)儀用遙控器完成所有操控,包括啟動(dòng)、復(fù)位、關(guān)機(jī)、若干種視標(biāo)圖像的生成計(jì)算以及調(diào)用、變換、顯示等。
遙控面板的設(shè)計(jì)以最簡(jiǎn)操作為目標(biāo),基本操作都能一鍵完成,面板上分割為5個(gè)區(qū)域:
(1)視標(biāo)選擇:按下對(duì)應(yīng)的按鍵,視標(biāo)會(huì)依次切換成E標(biāo)、C標(biāo)、字母標(biāo)、數(shù)字標(biāo)、兒童標(biāo)等。
(2)測(cè)試功能選擇:包括紅綠背景、反色、對(duì)比度選擇、色盲圖、立體視感(這里采用3D面板上安裝的圓偏振片配合對(duì)應(yīng)的3D偏振鏡片的方法,立體感大大強(qiáng)于傳統(tǒng)的紅綠濾光片方法)、散光表散光軸位測(cè)試等。
(3)遮蓋功能選擇:包括單個(gè)視標(biāo)的遮蓋、水平的遮蓋以及豎直的遮蓋。在遮蓋狀態(tài)下,可通過上、下、左、右4個(gè)方向鍵來選擇遮蓋的區(qū)域;再次按下鍵則分別取消相應(yīng)的遮蓋。
(4)操作鍵:包括上、下、左、右的選擇、確認(rèn)以及對(duì)各圖標(biāo)進(jìn)行縮放、旋轉(zhuǎn)等。
(5)參數(shù)設(shè)置:包括選擇視標(biāo)的型號(hào),根據(jù)距離遠(yuǎn)近及是否鏡像,對(duì)所有的圖標(biāo)進(jìn)行初始化,長(zhǎng)按進(jìn)入界面設(shè)置。
該設(shè)計(jì)采用NEC6122的鍵碼編碼協(xié)議[4],并選用HT6221芯片作為遙控器的紅外發(fā)射編碼芯片。其特點(diǎn)為:具有8位地址碼、8位命令碼以及它們的反碼以提高可靠性;數(shù)據(jù)以脈沖時(shí)間長(zhǎng)短調(diào)制;38 kHz載波頻率,位時(shí)間1.12或2.25ms。
信號(hào)的開始由一段9ms、38 kHz的載波信號(hào)和4.5ms的關(guān)斷時(shí)間構(gòu)成。之后就是代碼的邏輯“1”、“0”信號(hào),分別占據(jù)2.25及1.12ms時(shí)長(zhǎng),每個(gè)信號(hào)起始均由560μs長(zhǎng)的載波(約21個(gè)載波周期)脈沖加之后的關(guān)斷所構(gòu)成,如圖1所示。如果一直按著某鍵,在正常的鍵碼后則不斷發(fā)送以110ms為周期的重復(fù)碼,重復(fù)碼由9ms的載波信號(hào)和4.5ms的關(guān)斷及一個(gè)560μs的載波組成,如圖2所示。
圖1 NEC遙控信號(hào)格式(左前導(dǎo)碼,右數(shù)據(jù)1和0的傳輸時(shí)序)
圖2 NEC遙控信號(hào)重復(fù)格式
NB0038是一種用于紅外遙控接收或其他方面的小型一體化接收頭[5],中心頻率為38.0 kHz,獨(dú)立的PIN二極管同放大、濾波整形電路集成在同一封裝上,可抑制自然光的反射干擾,防止無用脈沖輸出。
該視標(biāo)儀的硬件結(jié)構(gòu)如圖3所示。
圖3 3D高清視標(biāo)儀的基本結(jié)構(gòu)
一體化紅外接收頭NB0038接收到遙控信號(hào)后,經(jīng)內(nèi)部放大、解調(diào)、整形后產(chǎn)生脈沖信號(hào)傳至單片機(jī)的P0.0口,觸發(fā)中斷,單片機(jī)經(jīng)解碼之后得到正確的遙控鍵碼,連同重復(fù)次數(shù)碼作為一個(gè)數(shù)據(jù)包發(fā)給主機(jī)的USB口。主機(jī)從接到的USB信號(hào)中,得到相關(guān)的按鍵信息。主機(jī)USB緩存區(qū)的數(shù)據(jù)變化,作為槽脈沖觸發(fā)主程序調(diào)用鍵碼處理程序。單片機(jī)的P2.0端口用于檢測(cè)主板的電源電壓,當(dāng)打開總電源之后主板得電,電源指示電壓升高,將該電壓引線連至單片機(jī)的P2.0端作為PW得電檢測(cè),單片機(jī)檢測(cè)到這個(gè)信號(hào)之后在P2.1端口產(chǎn)生高電平,使三極管導(dǎo)通,拉低主板電源上電電壓,使主機(jī)啟動(dòng)。為了防止主機(jī)在運(yùn)行過程中意外死機(jī),可以通過按下遙控器上的幾個(gè)特殊組合鍵及長(zhǎng)按鍵,經(jīng)單片機(jī)識(shí)別之后,在P1.0口產(chǎn)生高電平,使主板的RST復(fù)位端產(chǎn)生低電平,從而重啟主機(jī)。另外,還在視標(biāo)儀的下部中心位置設(shè)置LED燈,長(zhǎng)按遙控器可以啟動(dòng)該燈的亮滅。
主板上具有LVDS液晶顯示接口,為降低干擾,提高圖像的穩(wěn)定性,可以直接通過LVDS屏線與3D顯示面板的LVDS接口相聯(lián)[6]。事實(shí)證明,這種連接方式最為直接,信號(hào)轉(zhuǎn)換環(huán)節(jié)更少,顯示效果要比DVI或HDMI接口更好。液晶顯示面板LED背光的接口形式為BLE-6PINS-CCAACC,為四陰極結(jié)構(gòu),正好用LED背光芯片MAX16826來驅(qū)動(dòng)。該芯片可以通過I2C接口,接收來自C8051f320單片機(jī)的硬件I2C串行總線數(shù)據(jù),獨(dú)立對(duì)4串LED燈的電流和電壓進(jìn)行控制,保證面板的亮度均勻性。一般不用PWM的占空比來調(diào)節(jié)屏幕亮度,而直接用I2C總線數(shù)據(jù)控制電流的辦法調(diào)整屏幕亮度,以避免屏幕的閃爍。
完整的USB應(yīng)用系統(tǒng)除了必要的硬件部分,還包括軟件部分。軟件部分分為3大塊:在C8051F320設(shè)備上運(yùn)行的固件程序、在主機(jī)上運(yùn)行的USB設(shè)備驅(qū)動(dòng)程序和主機(jī)視標(biāo)儀應(yīng)用程序。由于采用的是小數(shù)據(jù)量的鍵盤控制,將USB設(shè)備枚舉成HID設(shè)備,這樣無論是在Windows環(huán)境還是在Linux環(huán)境中,都無需為USB鍵盤設(shè)備安裝驅(qū)動(dòng)。主機(jī)應(yīng)用程序通過USB接口與C8051F320通信,允許用戶觀察并改變C8051F320設(shè)備上的I/O外設(shè)的狀態(tài)。當(dāng)設(shè)備通過USB接口與主機(jī)連接好后,應(yīng)用程序就開始枚舉,并通過端點(diǎn)0、1和2來完成設(shè)備與主機(jī)之間的數(shù)據(jù)傳輸。在USB協(xié)議中,端點(diǎn)0數(shù)據(jù)包被定義為控制數(shù)據(jù)包,端點(diǎn)1和2分別用來輸入數(shù)據(jù)和輸出數(shù)據(jù)[7]。數(shù)據(jù)包用來回傳解碼之后的遙控鍵碼,單片機(jī)向主機(jī)發(fā)回的數(shù)據(jù)包包括按鍵的鍵碼以及長(zhǎng)按鍵重復(fù)次數(shù)數(shù)據(jù)(短按則為0)以便主機(jī)做出判斷。
遙控接收程序的流程如圖4所示。
圖4 遙控接收程序流程圖
為節(jié)省開發(fā)與系統(tǒng)成本,該主機(jī)系統(tǒng)軟件為基于開源的Linux系統(tǒng),系統(tǒng)自帶1 920×1 080的高清顯示驅(qū)動(dòng)程序。應(yīng)用程序的開發(fā)平臺(tái)為C++,完全面向?qū)ο?,容易擴(kuò)展,并且允許真正的組件編程。
整個(gè)應(yīng)用軟件實(shí)質(zhì)上是不斷讀取遙控器上發(fā)來的鍵碼,并采取相應(yīng)的顯示動(dòng)作。為此目的,首先是制作相應(yīng)的視標(biāo),如E字標(biāo)、字母標(biāo)、數(shù)字標(biāo)以及相應(yīng)的3D圖標(biāo)等,以SVG格式的矢量圖形式存儲(chǔ)在文件夾內(nèi)。制作3D圖標(biāo)時(shí),左右兩眼看到的2幅圖像各取奇數(shù)行和偶數(shù)行,交錯(cuò)存放,并分別通過液晶顯示器偏振面板的左旋偏振和右旋偏振(這樣左眼圖像為左旋偏振光,右眼圖像為右旋偏振光),再由受檢者佩戴的圓偏振片分離出2幅圖像[8]。整個(gè)程序由10個(gè)C++功能模塊構(gòu)成,其流程如圖5所示,其中包括主程序(main.cpp)、顏色設(shè)置模塊(colorsettingdialog.cpp)、距離設(shè)置模塊(distancedialog.cpp)、圖標(biāo)設(shè)置模塊(iconselectdialog.cpp)、語言設(shè)置模塊(languagedialog.cpp)、鍵碼讀取及處理(keydialog.cpp)、鏡像設(shè)置(mirrordialog.cpp)、視標(biāo)顯示及縮放模塊(svg view.cpp)、用戶選擇模塊(usertypedialog.cpp)、視力單位設(shè)置模塊(VisusunitDialog.cpp)等(圖5中驚嘆號(hào)部分)。
在main.cpp主函數(shù)中包括:
fd=open(“/dev/remote”,O_RDWR);//打開紅外遙控設(shè)備等實(shí)現(xiàn)系統(tǒng)的初始化及打開紅外遙控功能
鍵碼讀取及處理(keydialog.cpp)用來讀取遙控器發(fā)送過來的按鍵碼,根據(jù)其短按、長(zhǎng)按(結(jié)合長(zhǎng)按重復(fù)碼),調(diào)用相應(yīng)的顯示模塊,進(jìn)入到系統(tǒng)菜單等。其基本結(jié)構(gòu)為:
圖5 主機(jī)處理程序流程圖
其中還包括:
視標(biāo)顯示及縮放模塊(svgview.cpp)用來在進(jìn)入視標(biāo)顯示狀態(tài)下,對(duì)視標(biāo)的縮放、旋轉(zhuǎn)、切換、遮擋等操作。其函數(shù)包括:
SvgView::SvgView(Widget*parent):Graphics View(parent)
void SvgView::open File(const File&file)//打開視標(biāo)文件
void SvgView::set Icon Scale(int viewpower)//根據(jù)視力值確定各個(gè)圖標(biāo)的縮放倍數(shù)
void SvgView::loadoptoset(int setnum)//裝載各視標(biāo)集的矢量文件等svgview類函數(shù)集
這2個(gè)部分是視標(biāo)系統(tǒng)的主要部分,其代碼占整個(gè)代碼長(zhǎng)度的90%以上。
距離設(shè)置模塊(distancedialog.cpp)中包括:
Distance Dialog::Distance Dialog(Widget*parent):Dialog(parent);
此函數(shù)主要用作系統(tǒng)設(shè)置時(shí)的視標(biāo)圖像生成計(jì)算。某些檢查環(huán)境由于受場(chǎng)地大小所限,并非都滿足5m的標(biāo)準(zhǔn)檢查條件,故在此輸入檢查距離即可對(duì)整個(gè)視標(biāo)的大小重新計(jì)算,以滿足等效的要求。此外,還包括鏡像設(shè)置模塊,以便受空間限制時(shí),在鏡像中觀察視標(biāo)。此模塊設(shè)置完成后,在平時(shí)使用中不再調(diào)用。同時(shí),在系統(tǒng)設(shè)置中,調(diào)用的模塊還包括語言設(shè)置模塊等。以上應(yīng)用程序在C++環(huán)境下編譯執(zhí)行通過后,連同圖標(biāo)文件打包成一個(gè)可執(zhí)行文件,放至系統(tǒng)根目錄下開機(jī)自動(dòng)執(zhí)行。
按瑞利判據(jù),人眼的最小分辨距離S=1.22λ/D×L。若以人最靈敏的光波長(zhǎng)λ=550 nm、眼瞳直徑的調(diào)節(jié)范圍約為D=2~8mm計(jì),在標(biāo)準(zhǔn)視力表距離5m處能分辨的最小距離為S=0.42~1.7mm。該3D高清液晶顯示面板點(diǎn)距0.266mm、亮度250 cd/m2,均滿足人眼分辨極限要求且符合紙質(zhì)視力表的國標(biāo)要求。將該視標(biāo)儀與紙質(zhì)標(biāo)準(zhǔn)視力表(按國標(biāo)、后照法亮度大于200 cd/m2)、投影式視標(biāo)儀、低分辨率液晶視標(biāo)儀(1 280×1 024,點(diǎn)距 0.294mm,以下簡(jiǎn)稱“低分視標(biāo)儀”)在室內(nèi)明亮進(jìn)行實(shí)測(cè)對(duì)比實(shí)驗(yàn),結(jié)果見表1。
表1 視力表實(shí)測(cè)結(jié)果
在同一環(huán)境、同一攝影曝光參數(shù)條件下對(duì)所攝4種視標(biāo)的圖像直方圖如圖6所示。
該視標(biāo)儀在暗環(huán)境下的反差約為1∶23,在亮環(huán)境下的反差變?yōu)?∶16,與之對(duì)比,投影視標(biāo)儀在暗環(huán)境下約為1∶7,但在亮環(huán)境下的反差嚴(yán)重惡化為1∶2。與表1相互印證,在低反差下,通過投影視標(biāo)儀測(cè)得的視力要比標(biāo)準(zhǔn)值低。由對(duì)比分析可知,該視標(biāo)儀的分辨率、反差及使用的方便程度等都優(yōu)于投影視標(biāo)儀,也不存在對(duì)焦精度的問題;像素點(diǎn)距優(yōu)于低分視標(biāo)儀,與國家制定的視力表標(biāo)準(zhǔn)較為接近,但又避免了紙質(zhì)印刷的視力表的可記憶性、不可更改性、檢查距離固定這一致命的缺點(diǎn)。同時(shí)又具備豐富的圖標(biāo),適合各類人群、國別,具備散光軸、紅藍(lán)視標(biāo)、立體測(cè)試等。因而該視標(biāo)儀在眾多的醫(yī)療機(jī)構(gòu)、眼鏡店內(nèi)將得到越來越廣泛的應(yīng)用,并將取代另外幾類視標(biāo)儀。
圖6 各視標(biāo)儀在不同環(huán)境下的圖像直方圖
該設(shè)計(jì)采用低功耗的小型ITX主板,帶3D圓偏振片的全高清液晶面板、一體化的紅外接收頭、單片機(jī)紅外解碼、控制系統(tǒng),并采用完全遙控的方式,研制成功了具有3D立體視覺測(cè)試功能的高清視標(biāo)儀,目前已做好整機(jī)模具,可批量生產(chǎn)。經(jīng)實(shí)際使用,獲得了比以往視標(biāo)儀更好的性能和更靈活的使用,提升了視力檢測(cè)的準(zhǔn)確度。與此同時(shí),該設(shè)計(jì)也可以采用主板與顯示器分離的設(shè)計(jì),將控制板、主板做成一臺(tái)主機(jī)的形式,顯示部分采用商品化的3D顯示器,二者采用HDMI高清數(shù)據(jù)線相連接,這樣便于用戶選購,降低運(yùn)輸及維護(hù)成本。目前,國內(nèi)市場(chǎng)上尚無高清視標(biāo)儀,因此,本設(shè)計(jì)填補(bǔ)了這一空白。
在設(shè)計(jì)過程及最終成品的檢測(cè)中,視標(biāo)儀的圖像質(zhì)量評(píng)價(jià)是一個(gè)極其重要的因素,對(duì)檢測(cè)的精度及準(zhǔn)確度有著直接的影響。下一步的工作將圍繞視標(biāo)儀圖像質(zhì)量的評(píng)價(jià)展開,以期視標(biāo)質(zhì)量的規(guī)范統(tǒng)一。
[1] 劉建軍.影響視力檢測(cè)的因素[J].中國眼鏡科技雜志,2005(7):46.
[2] 張玲.基于嵌入式Linux的圖形界面的開發(fā)與研究[D].武漢:武漢理工大學(xué),2012.
[3] 趙宏斌,全厚德.基于C8051F320的數(shù)據(jù)采集系統(tǒng)USB接口設(shè)計(jì)[J].微計(jì)算機(jī)信息,2009,25(9):91-93.
[4] 蔡明文.紅外遙控通訊協(xié)議設(shè)計(jì)[J].長(zhǎng)江大學(xué)學(xué)報(bào):自然科學(xué)版理工卷,2008,5(4):173-175.
[5] 劉毅敏,史作鋒.編碼信息紅外發(fā)射與接收器[J].微計(jì)算機(jī)信息,2007,23(5):92-93.
[6] 張濤,舒林鋒,鄭冬軍,等.LVDS接口原理和標(biāo)準(zhǔn)及在平板顯示系統(tǒng)中的應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2007,35(9):184-186.
[7] 王恒升,匡洋,彭宏道.USBHID類設(shè)備小驅(qū)動(dòng)程序開發(fā)[J].控制工程,2010,17(11):815-819.
[8] 孫延祿.關(guān)于圓偏振光在3D立體影像顯示中的應(yīng)用——對(duì)《3D立體影像顯示方法叢談》的補(bǔ)充詮釋[J].現(xiàn)代電影技術(shù),2010(9):24-29.