国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

一種多功能紅外圖像播放軟件的設(shè)計(jì)實(shí)現(xiàn)

2014-09-23 03:19:02賈丕軍
電子設(shè)計(jì)工程 2014年11期
關(guān)鍵詞:控件鼠標(biāo)灰度

賈丕軍,賈 杰

(1.中國(guó)空空導(dǎo)彈研究院 河南 洛陽(yáng) 471099;2.南昌航空大學(xué) 江西 南昌 330063)

一種多功能紅外圖像播放軟件的設(shè)計(jì)實(shí)現(xiàn)

賈丕軍1,賈 杰2

(1.中國(guó)空空導(dǎo)彈研究院 河南 洛陽(yáng) 471099;2.南昌航空大學(xué) 江西 南昌 330063)

文中針對(duì)紅外裝置采集的信息圖形化處理的需求,借鑒視頻播放器的設(shè)計(jì)思路,采用動(dòng)態(tài)鏈接庫(kù)、ActiveX技術(shù)等模塊化設(shè)計(jì)方法開(kāi)發(fā)了紅外圖像播放軟件。實(shí)踐表明,該軟件在用戶界面上通過(guò)鼠標(biāo)控制,可實(shí)現(xiàn)連續(xù)顯示圖像、顯示單點(diǎn)或范圍內(nèi)像素信息的功能?;诩t外信息的特點(diǎn),該軟件還可以通過(guò)輔助信息標(biāo)識(shí)出目標(biāo)位置,并旋轉(zhuǎn)圖像以符合慣性坐標(biāo)系下視角。該軟件的開(kāi)始、暫停、停止和改變播放速度等播放控制功能,以及自動(dòng)灰度調(diào)節(jié)、轉(zhuǎn)換位圖、轉(zhuǎn)換視頻等功能使紅外信息處理更加方便,為類似圖像處理需求提供了一種功能全面、運(yùn)行穩(wěn)定、適應(yīng)性強(qiáng)的方法。

紅外圖像;播放控制;VC編程;多線程;ActiveX

隨著紅外技術(shù)的發(fā)展,紅外成像系統(tǒng)獲得了越來(lái)越廣泛的應(yīng)用。對(duì)于數(shù)據(jù)分析人員來(lái)講,最直觀的圖像查看方式,莫過(guò)于像視頻播放器那樣連續(xù)顯示圖像。本文設(shè)計(jì)的紅外圖像播放軟件,可以像視頻播放器一樣實(shí)現(xiàn)圖像的順序顯示。此外還可以根據(jù)紅外成像裝置提供的參數(shù)信息,在圖像上標(biāo)識(shí)出感興趣目標(biāo)的位置;根據(jù)圖像的背景灰度均值動(dòng)態(tài)調(diào)整圖像的灰度范圍,以便于區(qū)分目標(biāo)和背景;還可以對(duì)圖像進(jìn)行旋轉(zhuǎn)以符合慣性坐標(biāo)系下的視圖。此外還有轉(zhuǎn)換位圖和視頻的功能,可供演示匯報(bào)等場(chǎng)合使用。另外還支持用戶鼠標(biāo)的交互操作,便于查看單點(diǎn)或范圍內(nèi)信息。

1 系統(tǒng)架構(gòu)設(shè)計(jì)

軟件各功能模塊包括圖像數(shù)據(jù)提取,紅外成像裝置參數(shù)提取,圖像顯示控制,圖像播放控制,圖像顯示等部分。由于軟件功能較復(fù)雜,所以采用了模塊化設(shè)計(jì)方法,不僅降低了復(fù)雜度,也降低了各部分之間的耦合度,便于在此平臺(tái)上實(shí)現(xiàn)不同類型的圖像播放。其中,圖像數(shù)據(jù)及參數(shù)提取通過(guò)動(dòng)態(tài)鏈接庫(kù)實(shí)現(xiàn),一旦圖像數(shù)據(jù)或參數(shù)格式有變化,只需要更新動(dòng)態(tài)鏈接庫(kù)就可以;圖像顯示控制和圖像播放控制由主程序?qū)崿F(xiàn),完成對(duì)其它組件的控制;圖像顯示通過(guò)單獨(dú)設(shè)計(jì)的ActiveX控件完成,其中封裝了圖像的繪制、旋轉(zhuǎn)、根據(jù)指令錄制avi格式視頻以及用戶鼠標(biāo)交互的功能。各部分關(guān)系如圖1所示。

2 紅外圖像、參數(shù)提取動(dòng)態(tài)鏈接庫(kù)

包含紅外圖像及成像裝置參數(shù)的數(shù)據(jù)文件由于來(lái)源不同,其文件格式通常不相同;此外圖像的壓縮算法往往也各不相同。

圖1 軟件各模塊關(guān)系Fig. 1 Relationships between each module of the software

然而對(duì)于圖像播放來(lái)說(shuō),只需提供原始的圖像數(shù)據(jù),以及成像裝置參數(shù)信息即可。所以本文通過(guò)“針對(duì)接口設(shè)計(jì)”的軟件工程方法,利用動(dòng)態(tài)鏈接庫(kù)封裝圖像數(shù)據(jù)和參數(shù)的提取[1],從而將數(shù)據(jù)格式的變化與圖像播放隔離,提高了系統(tǒng)的穩(wěn)定性。

從文件中提取數(shù)據(jù)需要知道數(shù)據(jù)的位置信息,該位置信息預(yù)先寫入配置文件。動(dòng)態(tài)鏈接庫(kù)讀取配置文件中的位置信息,并生成位置信息的鏈表,將該鏈表傳遞給提取函數(shù)。由提取函數(shù)利用鏈表的信息從文件中讀取數(shù)據(jù)。

如果采用了不同的圖像壓縮算法,就單獨(dú)編寫該種壓縮算法的解壓縮函數(shù),并將函數(shù)信息寫入配置文件。提取動(dòng)態(tài)鏈接庫(kù)可以從配置文件中讀取解壓縮函數(shù)信息,然后調(diào)用該函數(shù)來(lái)完成圖像解壓縮。

3 圖像顯示控制

圖像顯示控制包括:解算出成像裝置給的目標(biāo)位置和大小,在圖像中標(biāo)識(shí)出來(lái);解算出需要旋轉(zhuǎn)的角度,并對(duì)圖像進(jìn)行旋轉(zhuǎn);根據(jù)圖像背景灰度值來(lái)調(diào)整圖像灰度范圍。其中前兩項(xiàng)只需解算出有關(guān)參數(shù),然后提供給主程序,再由主程序提供給圖像顯示模塊。

第三項(xiàng)需求的產(chǎn)生是由于灰度圖像的紅綠藍(lán)分量值相同且都是8位,而實(shí)際紅外圖像通常都超過(guò)8位,這就需要對(duì)數(shù)據(jù)進(jìn)行截短。以圖2為例,假設(shè)原始圖像為14位,從中截取8位(例如取第10到第3位),然后判斷更高位(14位到11位)是否全為0,如是則最終灰度值取為第10~第3位的數(shù)值,否則取為255。這樣做的目的是為了保證值較大的數(shù)值截短后也較大,防止出現(xiàn)“1111 00000000 00”截短后反而比“0000 11111111 00”還要小的情況,導(dǎo)致圖像失真。

圖2 圖像數(shù)值截短表示Fig. 2 Clipping of image value to reduce its length

這樣處理能夠保證圖像不失真,但是會(huì)出現(xiàn)目標(biāo)和背景無(wú)法區(qū)分的情況。比如所有像素點(diǎn)的14~11位都不是全零,那么所有像素灰度值都變?yōu)?55,導(dǎo)致目標(biāo)湮沒(méi)在背景當(dāng)中。這時(shí)就要根據(jù)圖像的灰度均值來(lái)動(dòng)態(tài)的調(diào)整截取的8位,保證區(qū)分開(kāi)目標(biāo)和背景。具體方法是:以2N×0.75(N取8~13)6個(gè)值將整個(gè)取值范圍分為由低到高7段(分別對(duì)應(yīng)截取8位的最高位為8~14),圖像灰度均值落在哪一段,就截取相應(yīng)的 8 位[2]。

4 圖像播放控制

圖像播放軟件需要在連續(xù)顯示圖像的同時(shí),還能夠響應(yīng)用戶的各種操作,所以必須通過(guò)多線程來(lái)實(shí)現(xiàn)[3]。主線程創(chuàng)建播放線程,并根據(jù)用戶的操作控制播放線程,如圖3所示。

圖3 播放線程的創(chuàng)建及工作過(guò)程Fig. 3 Creation of playing-thread and its workflow

主線程除了創(chuàng)建播放線程還要同時(shí)創(chuàng)建WaitableTimer。WaitableTimer每隔一定時(shí)間就激活一次(Signaled),播放線程中的WaitForSingleObject函數(shù)就會(huì)結(jié)束等待,執(zhí)行后面的播放一幅圖像的操作。主程序可以通過(guò)設(shè)置WaitableTimer的激活時(shí)間間隔來(lái)控制播放的快慢。此外還可以通過(guò)調(diào)用CancelWaitableTimer來(lái)使WaitableTimer處于休眠狀態(tài),從而實(shí)現(xiàn)暫停播放的效果。繼續(xù)播放只要喚醒WaitableTimer就可以。

5 圖像顯示控件

圖像顯示部分的功能相對(duì)獨(dú)立,所以采用ActiveX控件將該功能模塊予以封裝[4]??丶腛nDraw函數(shù)代碼見(jiàn)下:

代碼中首先創(chuàng)建了一個(gè)內(nèi)存設(shè)備dcMem,以及相應(yīng)的兼容位圖。圖形繪制,及像素值信息和統(tǒng)計(jì)信息的顯示,首先在該內(nèi)存設(shè)備上完成,最后再一并顯示。這樣可以提高效率并防止屏幕閃爍。

圖形繪制由于涉及到圖像旋轉(zhuǎn),所以調(diào)用函數(shù)SetWorldTransform來(lái)設(shè)置旋轉(zhuǎn)一定角度后的世界坐標(biāo)系,然后再在該坐標(biāo)系下作圖。在調(diào)用SetWorldTransform之前先要調(diào)用函數(shù)SetGraphicsMode(HDC hdc, int iMode),該函數(shù)的第二個(gè)參數(shù)iMode取為GM_ADVANCED,表示允許指定的dc進(jìn)行世界坐標(biāo)系的變換。SetWorldTransform(HDC hdc, CONST XFORM*lpXform)的第二個(gè)參數(shù)為轉(zhuǎn)換的結(jié)構(gòu)參數(shù)。設(shè)旋轉(zhuǎn)角度為θ,lpXform所指向結(jié)構(gòu)變量各分量eM11=-cos(θ),eM12=sin(θ),eM21=sin(θ),eM22=cos(θ)。圖像繪制完成后,需要將世界坐標(biāo)系恢復(fù)為正常。即賦值eM11=1,eM12=0,eM21=0,eM22=1,然后再調(diào)用一次SetWorldTransform。再設(shè)置圖形模式為正常:調(diào)用函數(shù)SetGraphicsMode,第二個(gè)參數(shù)為GM_COMPATIBLE。

由于原始圖像是矩形,如果直接旋轉(zhuǎn)繪制到屏幕上就會(huì)超出控件的作圖區(qū)域。針對(duì)圖像有效區(qū)域?yàn)閳A形的特點(diǎn),通過(guò)創(chuàng)建橢圓區(qū)域,并調(diào)用函數(shù)SelectClipRgn將橢圓區(qū)域選入裁剪區(qū)[5],然后再作圖,就可以達(dá)到在規(guī)定范圍內(nèi)繪制的效果。

用戶鼠標(biāo)右鍵單擊可以顯示單點(diǎn)的像素值,左鍵拉框可以顯示選定范圍內(nèi)的最大最小值,均值和方差等統(tǒng)計(jì)信息。右鍵單擊后,鼠標(biāo)響應(yīng)事件函數(shù)OnRButtonUp(UINT nFlags,CPoint point)被調(diào)用。在該函數(shù)中,point表示鼠標(biāo)點(diǎn)擊位置,首先要根據(jù)“鼠標(biāo)位置/繪圖區(qū)域尺寸×圖像數(shù)據(jù)數(shù)組大小”的公式算出對(duì)應(yīng)的圖像數(shù)據(jù)數(shù)組的索引,然后根據(jù)索引取出像素值,交給右鍵信息繪制類對(duì)象m_cPointInfo,然后通過(guò)調(diào)用函數(shù)InvalidateControl引起控件重繪。在OnDraw函數(shù)中,m_cPointInfo通過(guò)在內(nèi)存dc上輸出文本將值信息顯示給用戶。用戶左鍵拉框選取范圍時(shí),由于要?jiǎng)討B(tài)顯示用戶選擇的區(qū)域,使用了MFC類CRectTracker。該類可以在用戶選擇區(qū)域時(shí),用矩形框標(biāo)識(shí)出所選范圍。用戶左鍵按下時(shí),消息函數(shù)OnLButtonDown被調(diào)用。在該函數(shù)中,調(diào)用CRectTracker類的TrackRubberBand函數(shù),當(dāng)用戶鼠標(biāo)松開(kāi)時(shí),該函數(shù)返回。此時(shí)CRectTracker類對(duì)象的m_rect變量代表所選擇的區(qū)域,用上面獲取單點(diǎn)值的辦法也可以獲取范圍內(nèi)的值。然后就可以算出這些值的最大最小,均值方差等統(tǒng)計(jì)信息。然后更新顯示區(qū)域,OnDraw函數(shù)被調(diào)用,由m_ cStatisticInfo通過(guò)文本輸出的方式顯示給用戶。

屏幕錄像是通過(guò)創(chuàng)建avi流,并調(diào)用函數(shù)AVIStreamWrite往avi流中寫入數(shù)據(jù)的方法來(lái)完成的[6]。上面OnDraw函數(shù)中,布爾變量m_bNewFrameToAvi的作用是控制采樣率。由于紅外成像裝置的圖像速率通常比較快,能夠達(dá)到每秒幾十甚至上百幀。通常的avi視頻的幀頻都是每秒二十多幀,再加上紅外圖像內(nèi)容變化較慢,幀頻還可以更低。這就需要對(duì)圖像進(jìn)行采樣,比如每隔六幀取一幀,并設(shè)置m_bNewFrameToAvi為真,這樣OnDraw函數(shù)就會(huì)只將該幀寫入到avi視頻文件當(dāng)中,而忽略其它幀。考慮到視頻播放的方便,avi視頻沒(méi)有采用壓縮編碼的方式。這樣做的好處是,在匯報(bào)演示時(shí)可以避免因?yàn)闆](méi)有解碼器而導(dǎo)致無(wú)法播放。

6 結(jié) 論

文中介紹了該多功能圖像播放軟件的總體設(shè)計(jì)方法以及關(guān)鍵技術(shù),并對(duì)部分實(shí)現(xiàn)過(guò)程中遇到的難點(diǎn)問(wèn)題進(jìn)行了詳述。由于采用模塊化設(shè)計(jì)方法,隔離了各功能獨(dú)立模塊,保證了軟件整體的穩(wěn)定性和可靠性。該軟件自開(kāi)發(fā)完成以來(lái),在多個(gè)項(xiàng)目中得到應(yīng)用,不同的項(xiàng)目只需在配置文件中設(shè)置文件格式,編寫不同的圖像解壓縮函數(shù),就可以繼續(xù)使用該播放軟件。很好的滿足了圖像瀏覽、演示等科研需求。

[1] David J.Kruglinski. Visual C++技術(shù)內(nèi)幕[M].潘愛(ài)民,王國(guó)印,譯.4版修訂版.北京: 清華大學(xué)出版社,2009.

[2] 《編程之美》小組.編程之美[M].北京:電子工業(yè)出版社,2008.

[3] Charles Petzold. Windows程序設(shè)計(jì)[M].5版.方敏,張勝,梁路平,趙勇,譯.北京: 清華大學(xué)出版社,2010.

[4] 宇鵬,王曉峰,李云飛.Visual C++實(shí)踐與提高-ActiveX篇[M].北京:中國(guó)鐵道出版社,2001.

[5] 官章全,韓云君,李罡.Visual C++ 6.0 高級(jí)編程范例[M].北京:電子工業(yè)出版社,2001.

[6] 陳國(guó)建,楊國(guó)祥,唐清榮.Visual C++范例開(kāi)發(fā)大全[M].北京:清華大學(xué)出版社,2010.

The design and realization of a multifunctional software for infrared image playback

JIA Pi-jun1, JIA Jie2
(1. China Airborne Missle Academy, Luoyang 471099, China; 2. Nanchang Hangkong University,Nanchang 330063, China)

Aiming at the graphical processing of information acquired by infrared equipments, some instructive ideas are borrowed from the video player to develop a playback software for infrared images, using modular design methods such as dynamic link library and ActiveX technology. Practice shows that, the software can display images continuously, show pixel information of a single point or an area selected, under the control of users’ mouse. Based on the characteristics of infrared information, the software can also identify the targets, and rotate the image to match the inertial coordinate system perspective using the auxiliary information. Those playback functionalities as start, pause,stop and changing the playback speed, and automatically adjusting gray level, bitmap conversion, video conversion make the infrared information processing more conveniently, providing a comprehensive, stable, adaptable method for similar image processing.

infrared image; playback control; VC programming; multi-threading; ActiveX

TN98

A

1674-6236(2014)11-0185-03

2014–03–19 稿件編號(hào):201403218

國(guó)家自然科學(xué)基金(61263012)

賈丕軍(1982—),男,山西大同人,碩士,工程師。研究方向:數(shù)據(jù)處理軟件設(shè)計(jì)。

猜你喜歡
控件鼠標(biāo)灰度
采用改進(jìn)導(dǎo)重法的拓?fù)浣Y(jié)構(gòu)灰度單元過(guò)濾技術(shù)
基于灰度拉伸的圖像水位識(shí)別方法研究
Progress in Neural NLP: Modeling, Learning, and Reasoning
Engineering(2020年3期)2020-09-14 03:42:00
關(guān)于.net控件數(shù)組的探討
軟件(2018年7期)2018-08-13 09:44:42
基于最大加權(quán)投影求解的彩色圖像灰度化對(duì)比度保留算法
基于灰度線性建模的亞像素圖像抖動(dòng)量計(jì)算
就這樣玩會(huì)VBA中常見(jiàn)的自定義控件
電腦迷(2012年24期)2012-04-29 00:44:03
45歲的鼠標(biāo)
超能力鼠標(biāo)
IM家庭電子(2008年11期)2008-12-05 09:49:20
鼠標(biāo)也可以是這樣的
萨迦县| 苗栗县| 财经| 资中县| 武陟县| 蒙山县| 济宁市| 新昌县| 射阳县| 精河县| 旬阳县| 乐至县| 郧西县| 依安县| 忻城县| 巍山| 塔河县| 安顺市| 永清县| 灵宝市| 奉节县| 泸水县| 乳源| 鄯善县| 新晃| 白水县| 花莲县| 小金县| 兴山县| 嫩江县| 新竹市| 筠连县| 湛江市| 响水县| 尖扎县| 沙雅县| 寿宁县| 自治县| 平昌县| 美姑县| 柯坪县|