本發(fā)明屬于計(jì)算機(jī)、航天技術(shù)與圖像處理相結(jié)合的交叉科學(xué)技術(shù)領(lǐng)域,更具體地,涉及一種衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤系統(tǒng)及方法。
背景技術(shù):
二十世界末以來(lái),衛(wèi)星探測(cè)目標(biāo)逐漸成為航空航天領(lǐng)域的重要發(fā)展方向。無(wú)論是在高科技產(chǎn)業(yè),還是在經(jīng)濟(jì)領(lǐng)域都具有極高的戰(zhàn)略意義,主要體現(xiàn)在探測(cè)洲際飛行器以及空天飛機(jī)等飛行器上具有重大作用。在衛(wèi)星探測(cè)運(yùn)動(dòng)目標(biāo)的過(guò)程中,掃描相機(jī)和凝視相機(jī)往往用來(lái)進(jìn)行對(duì)目標(biāo)進(jìn)行跟蹤。由于掃描相機(jī)成像面像素大,凝視成像頻率快等特點(diǎn),對(duì)此在處理圖像數(shù)據(jù)中對(duì)有限的處理能力提出了更加嚴(yán)峻的挑戰(zhàn)。
在工業(yè)實(shí)時(shí)軟件操作系統(tǒng)中,系統(tǒng)的運(yùn)行效率極為重要,因此在軟件設(shè)計(jì)上必須做到盡可能的優(yōu)化。傳統(tǒng)的單線程技術(shù)系統(tǒng)無(wú)法進(jìn)行多項(xiàng)任務(wù)同時(shí)運(yùn)行,必須走完一道流程之后才會(huì)進(jìn)行用戶界面響應(yīng),造成用戶界面不流暢,甚至有些原本可以并行處理的流程,卻放到同一流程上運(yùn)行,極大地增加了運(yùn)行成本和內(nèi)核資源浪費(fèi)。因此,單線程程序框架,在實(shí)時(shí)操作系統(tǒng)中,很難滿足數(shù)據(jù)的實(shí)時(shí)處理和用戶界面的實(shí)時(shí)響應(yīng)。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的以上缺陷或改進(jìn)需求,本發(fā)明提供了一種衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤系統(tǒng)及方法,保證了數(shù)據(jù)處理的完整性、實(shí)時(shí)性和可靠性。有效解決了高幀頻傳輸圖像數(shù)據(jù)系統(tǒng)中實(shí)時(shí)處理圖像數(shù)據(jù)的難題。
為實(shí)現(xiàn)上述目的,按照本發(fā)明的一個(gè)方面,提供了一種衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤系統(tǒng),包括:圖像數(shù)據(jù)接收模塊、圖像幀頭檢測(cè)模塊、單幀圖像目標(biāo)檢測(cè)模塊、序列圖像關(guān)聯(lián)檢測(cè)模塊;
所述圖像數(shù)據(jù)接收模塊,每次從衛(wèi)星紅外圖像生成系統(tǒng)接收預(yù)設(shè)n字節(jié)長(zhǎng)度的數(shù)據(jù)包,并緩存到環(huán)形緩沖區(qū)中;
所述圖像幀頭檢測(cè)模塊,用于在環(huán)形緩沖區(qū)內(nèi)對(duì)環(huán)形緩沖區(qū)中的數(shù)據(jù)進(jìn)行幀頭、幀尾檢測(cè),并在檢測(cè)到幀頭后,讀取幀頭后的數(shù)據(jù)緩存到圖像緩存區(qū)中,直至緩存至幀尾位置;
所述單幀圖像目標(biāo)檢測(cè)模塊,用于處理圖像緩存區(qū)中的幀圖像數(shù)據(jù),獲取疑似目標(biāo)點(diǎn)信息;
其中,所述圖像緩存區(qū)包括第一圖像緩存區(qū)與第二圖像緩存區(qū),且第一圖像緩存區(qū)與第二圖像緩存區(qū)被所述圖像幀頭檢測(cè)模塊與所述單幀圖像目標(biāo)檢測(cè)模塊交替使用,在所述單幀圖像目標(biāo)檢測(cè)模塊對(duì)其中一個(gè)圖像緩存區(qū)中已經(jīng)緩存的上一幀圖像數(shù)據(jù)進(jìn)行處理時(shí),所述圖像幀頭檢測(cè)模塊向另一個(gè)圖像緩存區(qū)中緩存當(dāng)前幀圖像數(shù)據(jù);
所述序列圖像關(guān)聯(lián)檢測(cè)模塊,用于在所述單幀圖像目標(biāo)檢測(cè)模塊對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)后,對(duì)該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)在時(shí)空上進(jìn)行關(guān)聯(lián)得到初始軌跡,獲取與該初始軌跡關(guān)聯(lián)的下一幀圖像的真實(shí)目標(biāo)點(diǎn)信息。
優(yōu)選地,所述環(huán)形緩沖區(qū)的大小不小于n字節(jié),所述環(huán)形緩沖區(qū)包括數(shù)據(jù)的讀指針、寫(xiě)指針、檢測(cè)指針,其中,所述寫(xiě)指針用于從所述圖像數(shù)據(jù)接收模塊向所述環(huán)形緩沖區(qū)中寫(xiě)數(shù)據(jù),所述檢測(cè)指針位于所述寫(xiě)指針和所述讀指針之間,用于對(duì)圖像的幀頭、幀尾進(jìn)行檢測(cè),且在所述讀指針與所述檢測(cè)指針之間為已檢數(shù)據(jù),在所述檢測(cè)指針與所述寫(xiě)指針之間為待檢數(shù)據(jù),所述讀指針用于在所述檢測(cè)指針檢測(cè)到幀頭后,移動(dòng)至幀頭位置,并將幀頭后的數(shù)據(jù)從所述環(huán)形緩沖區(qū)中讀出并寫(xiě)入所述圖像緩存區(qū)中。
優(yōu)選地,所述序列圖像關(guān)聯(lián)檢測(cè)模塊包括:
初始軌跡獲取模塊,用于緩存所述單幀圖像目標(biāo)檢測(cè)模塊對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到的該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn),通過(guò)邏輯法關(guān)聯(lián)得到目標(biāo)初始軌跡;
第一計(jì)算模塊,用于通過(guò)目標(biāo)初始軌跡的末尾4個(gè)目標(biāo)點(diǎn)pt-4,pt-3,pt-2,pt-1估算下一個(gè)目標(biāo)點(diǎn)
第二計(jì)算模塊,用于計(jì)算窗口閾值參數(shù)值
點(diǎn)跡匹配模塊,用于獲取當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)與目標(biāo)初始軌跡匹配的目標(biāo)點(diǎn)pt;
第三計(jì)算模塊,用于在當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)存在疑似目標(biāo)點(diǎn)
第四計(jì)算模塊,用于將p(li,θi)取最大值時(shí)對(duì)應(yīng)的疑似目標(biāo)點(diǎn)作為當(dāng)前第t幀圖像與目標(biāo)初始軌跡匹配的真實(shí)目標(biāo)點(diǎn)pt;
第五計(jì)算模塊,用于在當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)不存在疑似目標(biāo)點(diǎn)
第六計(jì)算模塊,用于在連續(xù)3幀沒(méi)有匹配上目標(biāo)點(diǎn)時(shí),則判定軌跡消失,重新返回所述初始軌跡獲取模塊。
優(yōu)選地,在所述系統(tǒng)中包括三個(gè)線程,其中,第一線程用于為所述圖像數(shù)據(jù)接收模塊服務(wù),第二線程用于為所述圖像幀頭檢測(cè)模塊服務(wù),第三線程用于為所述單幀圖像目標(biāo)檢測(cè)模塊以及所述序列圖像關(guān)聯(lián)檢測(cè)模塊服務(wù),所述第一線程與所述第二線程共享所述環(huán)形緩沖區(qū),所述第二線程與所述第三線程共享第一圖像緩存區(qū)與第二圖像緩存區(qū),利用等停-喚醒方式和交換指針的乒乓操作模式處理圖像緩存區(qū)中的圖像數(shù)據(jù)。
按照本發(fā)明的另一個(gè)方面,提供了一種衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤方法,包括:
(1)每次從衛(wèi)星紅外圖像生成系統(tǒng)接收預(yù)設(shè)n字節(jié)長(zhǎng)度的數(shù)據(jù)包,并緩存到環(huán)形緩沖區(qū)中;
(2)在環(huán)形緩沖區(qū)內(nèi)對(duì)環(huán)形緩沖區(qū)中的數(shù)據(jù)進(jìn)行幀頭、幀尾檢測(cè),并在檢測(cè)到幀頭后,讀取幀頭后的數(shù)據(jù)緩存到圖像緩存區(qū)中,直至緩存至幀尾位置;
(3)處理圖像緩存區(qū)中的幀圖像數(shù)據(jù),獲取疑似目標(biāo)點(diǎn)信息;
其中,所述圖像緩存區(qū)包括第一圖像緩存區(qū)與第二圖像緩存區(qū),且第一圖像緩存區(qū)與第二圖像緩存區(qū)交替使用,在對(duì)其中一個(gè)圖像緩存區(qū)中已經(jīng)緩存的上一幀圖像數(shù)據(jù)進(jìn)行處理時(shí),向另一個(gè)圖像緩存區(qū)中緩存當(dāng)前幀圖像數(shù)據(jù);
(4)在對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)后,對(duì)該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)在時(shí)空上進(jìn)行關(guān)聯(lián)得到初始軌跡,獲取與該初始軌跡關(guān)聯(lián)的下一幀圖像的真實(shí)目標(biāo)點(diǎn)信息。
優(yōu)選地,所述環(huán)形緩沖區(qū)的大小不小于n字節(jié),所述環(huán)形緩沖區(qū)包括數(shù)據(jù)的讀指針、寫(xiě)指針、檢測(cè)指針,其中,所述寫(xiě)指針用于向所述環(huán)形緩沖區(qū)中寫(xiě)數(shù)據(jù),所述檢測(cè)指針位于所述寫(xiě)指針和所述讀指針之間,用于對(duì)圖像的幀頭、幀尾進(jìn)行檢測(cè),且在所述讀指針與所述檢測(cè)指針之間為已檢數(shù)據(jù),在所述檢測(cè)指針與所述寫(xiě)指針之間為待檢數(shù)據(jù),所述讀指針用于在所述檢測(cè)指針檢測(cè)到幀頭后,移動(dòng)至幀頭位置,并將幀頭后的數(shù)據(jù)從所述環(huán)形緩沖區(qū)中讀出并寫(xiě)入所述圖像緩存區(qū)中。
優(yōu)選地,所述步驟(4)具體包括:
(4.1)緩存對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到的該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn),通過(guò)邏輯法關(guān)聯(lián)得到目標(biāo)初始軌跡;
(4.2)通過(guò)目標(biāo)初始軌跡的末尾4個(gè)目標(biāo)點(diǎn)pt-4,pt-3,pt-2,pt-1估算下一個(gè)目標(biāo)點(diǎn)
(4.3)計(jì)算窗口閾值參數(shù)值
(4.4)檢測(cè)當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)是否存在關(guān)聯(lián)匹配目標(biāo)點(diǎn)
(4.5)對(duì)每一個(gè)疑似目標(biāo)點(diǎn)
(4.6)將p(li,θi)取最大值時(shí)對(duì)應(yīng)的疑似目標(biāo)點(diǎn)作為當(dāng)前第t幀圖像與目標(biāo)初始軌跡匹配的真實(shí)目標(biāo)點(diǎn)pt;
(4.7)將窗口閾值參數(shù)值dth1、dth2、cth擴(kuò)大兩倍,并轉(zhuǎn)至步驟(4.4)檢測(cè)下一幀幀圖像中在擴(kuò)大后的窗口閾值范圍內(nèi)是否存在關(guān)聯(lián)匹配目標(biāo)點(diǎn);
(4.8)在連續(xù)3幀沒(méi)有匹配上目標(biāo)點(diǎn)時(shí),則判定軌跡消失,返回步驟(4.1)。
優(yōu)選地,在所述方法中包括三個(gè)線程,其中,第一線程用于從衛(wèi)星紅外圖像生成系統(tǒng)接收數(shù)據(jù)包,第二線程用于在環(huán)形緩沖區(qū)內(nèi)檢測(cè)幀頭、幀尾,并將檢測(cè)的數(shù)據(jù)緩存至圖像緩存區(qū)中,第三線程用于對(duì)圖像緩存區(qū)中的數(shù)據(jù)進(jìn)行處理得到真實(shí)目標(biāo)點(diǎn)信息,所述第一線程與所述第二線程共享所述環(huán)形緩沖區(qū),所述第二線程與所述第三線程共享第一圖像緩存區(qū)與第二圖像緩存區(qū),利用等停-喚醒方式和交換指針的乒乓操作模式處理圖像緩存區(qū)中的圖像數(shù)據(jù)。
總體而言,通過(guò)本發(fā)明所構(gòu)思的以上技術(shù)方案與現(xiàn)有技術(shù)相比,主要有以下的技術(shù)優(yōu)點(diǎn):
(1)從整個(gè)軟件體系架構(gòu)上,在模塊劃分上分為圖像數(shù)據(jù)接收模塊、圖像幀頭檢測(cè)模塊、單幀圖像目標(biāo)檢測(cè)模塊、序列圖像關(guān)聯(lián)檢測(cè)模塊四大模塊,用到多線程和多緩沖相結(jié)合的處理技術(shù),在保證數(shù)據(jù)完整可靠的同時(shí)顯著地提升了系統(tǒng)實(shí)時(shí)處理能力。
(2)本發(fā)明在圖像幀頭檢測(cè)模塊對(duì)幀圖像數(shù)據(jù)提取和單幀圖像目標(biāo)檢測(cè)模塊對(duì)圖像數(shù)據(jù)處理之間通過(guò)兩個(gè)圖像緩存區(qū)的交替使用,避免了圖像數(shù)據(jù)的等待過(guò)程,大大提高了數(shù)據(jù)的處理速度。
(3)本發(fā)明在環(huán)形緩沖區(qū)中定義檢測(cè)指針,直接在環(huán)形緩沖區(qū)中進(jìn)行幀頭檢測(cè),區(qū)分檢測(cè)和未檢測(cè)數(shù)據(jù),加快了數(shù)據(jù)解析。
(4)本發(fā)明的軌跡關(guān)聯(lián)算法,根據(jù)目標(biāo)的運(yùn)動(dòng)模型,分別通過(guò)目標(biāo)相面移動(dòng)距離和偏移角度估計(jì)目標(biāo)的出現(xiàn)位置,然后通過(guò)計(jì)算疑似目標(biāo)點(diǎn)為實(shí)際目標(biāo)的概率,獲取軌跡關(guān)聯(lián)目標(biāo)點(diǎn)。同時(shí)根據(jù)當(dāng)前幀是否發(fā)現(xiàn)目標(biāo)并結(jié)合目標(biāo)的運(yùn)動(dòng)規(guī)律調(diào)整近鄰搜索窗口和角度閾值,有效解決因丟幀或當(dāng)前未檢測(cè)到目標(biāo)關(guān)聯(lián)不上目標(biāo)的問(wèn)題。
(5)本發(fā)明提出的實(shí)時(shí)目標(biāo)檢測(cè)與跟蹤系統(tǒng),能有效解決高幀頻傳輸下處理大量圖像數(shù)據(jù)的問(wèn)題,并能實(shí)時(shí)檢測(cè)與跟蹤目標(biāo),不存在過(guò)多的計(jì)算復(fù)雜度,因而具有一定的可實(shí)施性及實(shí)用推廣價(jià)值。
附圖說(shuō)明
圖1是本發(fā)明實(shí)施例公開(kāi)的一種衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤系統(tǒng)的結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例中的系統(tǒng)方法流程圖;
圖3是本發(fā)明實(shí)施例中的數(shù)據(jù)接收分流示意圖;
圖4是本發(fā)明實(shí)施例中的數(shù)據(jù)提取解析流程圖;
圖5是本發(fā)明實(shí)施例中的系統(tǒng)數(shù)據(jù)流向圖;
圖6是本發(fā)明實(shí)施例中的交替使用圖像緩存示意圖;
圖7是本發(fā)明實(shí)施例中的數(shù)據(jù)幀頭檢測(cè)線程和數(shù)據(jù)處理線程進(jìn)行數(shù)據(jù)交互流程示意圖;
圖8是本發(fā)明實(shí)施例中的軌跡查找算法流程示意圖;
圖9(a)是本發(fā)明實(shí)施例中的軌跡關(guān)聯(lián)查找目標(biāo)點(diǎn)流程示意圖;
圖9(b)是本發(fā)明實(shí)施例中的序列圖像關(guān)聯(lián)檢測(cè)模塊框圖;
圖10是本發(fā)明實(shí)施例中的軟件程序結(jié)構(gòu)圖;
圖11是本發(fā)明實(shí)施例提供的一種原始圖像;
圖12(a)是對(duì)原始圖像進(jìn)行處理之后的局部圖像;
圖12(b)是對(duì)原始圖像進(jìn)行局部單幀檢測(cè)結(jié)果圖;
圖13(a)是多幀目標(biāo)疊加效果圖;
圖13(b)是多幀檢測(cè)結(jié)果圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個(gè)實(shí)施方式中所涉及到的技術(shù)特征只要彼此之間未構(gòu)成沖突就可以相互組合。
本發(fā)明提供了一種高數(shù)據(jù)率衛(wèi)星序列圖像中點(diǎn)目標(biāo)實(shí)時(shí)檢測(cè)與跟蹤系統(tǒng),包括:圖像數(shù)據(jù)接收模塊、圖像幀頭檢測(cè)模塊、單幀圖像目標(biāo)檢測(cè)模塊、序列圖像關(guān)聯(lián)檢測(cè)模塊四大模塊,其結(jié)構(gòu)框架如圖1所示,圖2為系統(tǒng)數(shù)據(jù)處理流程。
圖像數(shù)據(jù)接收模塊,每次從衛(wèi)星紅外圖像生成系統(tǒng)接收預(yù)設(shè)n字節(jié)長(zhǎng)度的數(shù)據(jù)包,并緩存到環(huán)形緩沖區(qū)中;
圖像幀頭檢測(cè)模塊,用于在環(huán)形緩沖區(qū)內(nèi)對(duì)環(huán)形緩沖區(qū)中的數(shù)據(jù)進(jìn)行幀頭、幀尾檢測(cè),并在檢測(cè)到幀頭后,讀取幀頭后的數(shù)據(jù)緩存到圖像緩存區(qū)中,直至緩存至幀尾位置;
單幀圖像目標(biāo)檢測(cè)模塊,用于處理圖像緩存區(qū)中的幀圖像數(shù)據(jù),獲取疑似目標(biāo)點(diǎn)信息;
其中,圖像緩存區(qū)包括第一圖像緩存區(qū)與第二圖像緩存區(qū),且第一圖像緩存區(qū)與第二圖像緩存區(qū)被圖像幀頭檢測(cè)模塊與單幀圖像目標(biāo)檢測(cè)模塊交替使用,在單幀圖像目標(biāo)檢測(cè)模塊對(duì)其中一個(gè)圖像緩存區(qū)中已經(jīng)緩存的上一幀圖像數(shù)據(jù)進(jìn)行處理時(shí),圖像幀頭檢測(cè)模塊向另一個(gè)圖像緩存區(qū)中緩存當(dāng)前幀圖像數(shù)據(jù);
序列圖像關(guān)聯(lián)檢測(cè)模塊,用于在所述單幀圖像目標(biāo)檢測(cè)模塊對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)后,對(duì)該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn)在時(shí)空上進(jìn)行關(guān)聯(lián)得到初始軌跡,獲取與該初始軌跡關(guān)聯(lián)的下一幀圖像的真實(shí)目標(biāo)點(diǎn)信息。
如圖3所示,為本系統(tǒng)數(shù)據(jù)接收流程:本系統(tǒng)所接收的圖像數(shù)據(jù)來(lái)源外部衛(wèi)星紅外圖像生成系統(tǒng),通過(guò)以太網(wǎng)線發(fā)送到該系統(tǒng)中。圖像數(shù)據(jù)傳輸速率快,達(dá)50-60m/s,數(shù)據(jù)量大,每幀圖像數(shù)據(jù)量接近145mb。為高效實(shí)時(shí)處理數(shù)據(jù),開(kāi)辟一個(gè)能容納一幀圖像大小的環(huán)形緩沖區(qū),接收到的數(shù)據(jù)暫時(shí)緩存到環(huán)形緩沖區(qū)中,起到數(shù)據(jù)平穩(wěn)作用。本系統(tǒng)的圖像數(shù)據(jù)接收模塊是通過(guò)開(kāi)辟一個(gè)線程,循環(huán)訪問(wèn)網(wǎng)卡i/o接口,利用winpcap訪問(wèn)底層網(wǎng)絡(luò),在windows系統(tǒng)平臺(tái)下抓捕數(shù)據(jù)包,當(dāng)有數(shù)據(jù)包發(fā)來(lái)時(shí),便可檢測(cè)到數(shù)據(jù)包并抓獲數(shù)據(jù)包,直接緩存到環(huán)形緩沖區(qū)中。環(huán)形緩沖區(qū)定義了數(shù)據(jù)的讀指針、寫(xiě)指針、檢測(cè)指針。其中檢測(cè)指針位于寫(xiě)指針和讀指針之間,用于對(duì)圖像數(shù)據(jù)幀頭標(biāo)志檢測(cè),讀指針與檢測(cè)指針之間為已檢數(shù)據(jù),檢測(cè)指針與寫(xiě)指針之間為待檢數(shù)據(jù),已檢數(shù)據(jù)可以從讀指針開(kāi)始,直接寫(xiě)入到圖像緩存區(qū)。
如圖4所示,為本系統(tǒng)對(duì)圖像數(shù)據(jù)進(jìn)行幀頭檢測(cè)過(guò)程:圖像數(shù)據(jù)幀頭解析在環(huán)形緩沖區(qū)中進(jìn)行,環(huán)形緩沖區(qū)中定義了檢測(cè)指針,指向待檢測(cè)數(shù)據(jù)的起始位置,將環(huán)形緩沖區(qū)的數(shù)據(jù)分為已檢數(shù)據(jù)和待檢數(shù)據(jù),每次檢測(cè)n字節(jié)。如果待檢數(shù)據(jù)不足,圖像幀頭檢測(cè)線程休眠,等待圖像數(shù)據(jù)接收模塊喚醒。檢測(cè)到幀頭則認(rèn)為找到圖像數(shù)據(jù)的起始位置,同時(shí)將讀指針移動(dòng)到幀頭位置,切換圖像緩存區(qū),將數(shù)據(jù)讀入圖像緩存區(qū)中進(jìn)行處理。
圖像幀頭檢測(cè)使用了字符串快速匹配(knuth-morris-pratt,kmp)算法,與暴力字符串匹配相比,kmp算法在匹配速度上具有明顯的優(yōu)勢(shì)。在數(shù)據(jù)幀頭檢測(cè)問(wèn)題上,檢測(cè)完n字節(jié)后要將檢測(cè)指針回溯幀頭長(zhǎng)度個(gè)字節(jié),主要考慮到幀頭出現(xiàn)在末尾的情況。當(dāng)檢測(cè)到幀頭之后,就可以讀取后續(xù)數(shù)據(jù)進(jìn)入圖像緩存區(qū)中,當(dāng)收完一幀數(shù)據(jù)后,就可以將此幀數(shù)據(jù)提交給圖像處理線程,進(jìn)行圖像數(shù)據(jù)處理,然后繼續(xù)收取下一幀數(shù)據(jù),加載到另一個(gè)圖像緩存區(qū),兩個(gè)圖像緩存區(qū)交替使用,一個(gè)緩存區(qū)進(jìn)行數(shù)據(jù)處理,另一個(gè)緩存區(qū)進(jìn)行數(shù)據(jù)加載。由于數(shù)據(jù)加載和數(shù)據(jù)處理速度存在差異,因此圖像幀頭檢測(cè)線程和圖像處理線程之間會(huì)存在同步機(jī)制。圖像處理線程要等待當(dāng)前緩存區(qū)數(shù)據(jù)加載完成后才做處理。同樣,圖像幀頭檢測(cè)線程也會(huì)等待圖像處理線程處理完當(dāng)前數(shù)據(jù)后才加載當(dāng)前緩存區(qū),其中,圖像處理線程為單幀圖像目標(biāo)檢測(cè)模塊以及序列圖像關(guān)聯(lián)檢測(cè)模塊服務(wù)。
如圖5所示,在系統(tǒng)中圖像數(shù)據(jù)接收流程和圖像幀頭檢測(cè)流程之間通過(guò)環(huán)形緩沖區(qū)橋接,圖像幀頭檢測(cè)流程和圖像處理流程之間通過(guò)兩個(gè)圖像緩存區(qū)進(jìn)行橋接,如此形成數(shù)據(jù)通路。每個(gè)處理流程單獨(dú)放在一個(gè)線程中進(jìn)行數(shù)據(jù)處理。當(dāng)多個(gè)線程共享同一數(shù)據(jù)段時(shí),必須要考慮線程同步問(wèn)題。本系統(tǒng)使用了事件和互斥量?jī)煞N同步機(jī)制。事件是通過(guò)將自身設(shè)置為有信號(hào)或無(wú)信號(hào)來(lái)通知其它線程,與線程相配合能對(duì)消息做出較快反應(yīng),適合于工控程序。互斥量適合用來(lái)協(xié)調(diào)多個(gè)線程對(duì)共享資源的同步訪問(wèn)。
在圖像數(shù)據(jù)接收線程和圖像幀頭檢測(cè)線程中,通過(guò)采用一個(gè)互斥量,當(dāng)進(jìn)行數(shù)據(jù)讀和數(shù)據(jù)寫(xiě)入時(shí),對(duì)數(shù)據(jù)進(jìn)行加鎖保護(hù),防止讀和寫(xiě)線程同時(shí)對(duì)數(shù)據(jù)進(jìn)行訪問(wèn),發(fā)生數(shù)據(jù)錯(cuò)誤。
例如,互斥信號(hào)量為mutex,當(dāng)進(jìn)行寫(xiě)數(shù)據(jù)時(shí):
mutex.lock();
//寫(xiě)數(shù)據(jù)
mutex.unlock();
同樣,當(dāng)對(duì)數(shù)據(jù)進(jìn)行讀時(shí):
mutex.lock();
//讀數(shù)據(jù)
mutex.unlock();
如圖7所示為圖像幀頭檢測(cè)線程與圖像處理線程之間數(shù)據(jù)交互圖。在圖像幀頭檢測(cè)線程和圖像處理線程中,通過(guò)兩線程共享2個(gè)圖像緩存區(qū),交替使用,避免了收集完數(shù)據(jù)再進(jìn)行數(shù)據(jù)處理。而是將圖像數(shù)據(jù)收集和圖像數(shù)據(jù)處理分開(kāi)到不同線程進(jìn)行處理,極大提高了數(shù)據(jù)流的處理速度。
圖像幀頭檢測(cè)線程和圖像處理線程之間共享2個(gè)圖像緩存區(qū),采用線程等待-喚醒方式與改變圖像緩存指針指向的乒乓操作模式相結(jié)合方法,在接收當(dāng)前幀數(shù)據(jù)的同時(shí)可以處理上一幀緩存數(shù)據(jù),并且安全有效,減少不必要的等待時(shí)間,提高數(shù)據(jù)處理速度。其中一個(gè)圖像緩存區(qū)存放待處理的圖像數(shù)據(jù),供圖像處理線程處理,另一個(gè)圖像緩存區(qū)用于寫(xiě)入新的圖像數(shù)據(jù),供圖像幀頭檢測(cè)線程寫(xiě)入數(shù)據(jù)。例如,圖像幀頭檢測(cè)線程寫(xiě)第i+1幀數(shù)據(jù)到第一圖像緩存區(qū)中,此時(shí)圖像處理線程可以處理保存在第二圖像緩存區(qū)中的第i幀(上一幀)數(shù)據(jù)。當(dāng)圖像處理線程處理完數(shù)據(jù)時(shí),如果圖像幀頭檢測(cè)線程沒(méi)有寫(xiě)完第i+1幀,則線程掛起,進(jìn)入休眠等待狀態(tài)。當(dāng)圖像幀頭檢測(cè)線程寫(xiě)完第i+1幀數(shù)據(jù)后,交換兩個(gè)圖像緩存區(qū)的邏輯指向,喚醒圖像處理線程,這樣兩個(gè)圖像緩存區(qū)可以在兩個(gè)線程間交替使用,使得圖像幀頭檢測(cè)和圖像處理能夠在大部分時(shí)間內(nèi)同時(shí)運(yùn)行,避免了先進(jìn)行圖像幀頭檢測(cè)收集完數(shù)據(jù)再進(jìn)行圖像數(shù)據(jù)處理的局面,極大提高了數(shù)據(jù)的處理速度。
圖8和圖9(a)、圖9(b)所示為序列圖像關(guān)聯(lián)檢測(cè)模塊,用于將多幀圖像檢測(cè)的結(jié)果在時(shí)空上進(jìn)行關(guān)聯(lián),剔除噪聲點(diǎn),獲取比較真實(shí)的目標(biāo)點(diǎn)信息。所述序列圖像關(guān)聯(lián)檢測(cè)模塊包括:
初始軌跡獲取模塊,用于緩存所述單幀圖像目標(biāo)檢測(cè)模塊對(duì)多幀圖像數(shù)據(jù)進(jìn)行檢測(cè)得到的該多幀圖像數(shù)據(jù)的疑似目標(biāo)點(diǎn),通過(guò)邏輯法關(guān)聯(lián)得到目標(biāo)初始軌跡,其流程如圖8所示,其中,多幀圖像不小于4幀圖像;
第一計(jì)算模塊,用于通過(guò)目標(biāo)初始軌跡的末尾4個(gè)目標(biāo)點(diǎn)pt-4,pt-3,pt-2,pt-1估算下一個(gè)目標(biāo)點(diǎn)
定義第t幀圖像中的目標(biāo)點(diǎn)pt在相面的移動(dòng)距離為
第二計(jì)算模塊,用于計(jì)算窗口閾值參數(shù)值
對(duì)于第t幀的實(shí)際目標(biāo)點(diǎn)pt,目標(biāo)在相面偏移距離為
其中
點(diǎn)跡匹配模塊,用于獲取當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)與軌跡匹配的目標(biāo)點(diǎn)pt;
第三計(jì)算模塊,用于在當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)存在疑似目標(biāo)點(diǎn)
第四計(jì)算模塊,用于將p(li,θi)取最大值時(shí)對(duì)應(yīng)的疑似目標(biāo)點(diǎn)作為當(dāng)前第t幀圖像與目標(biāo)軌跡匹配的真實(shí)目標(biāo)點(diǎn)pt;
第五計(jì)算模塊,用于在當(dāng)前第t幀圖像中在窗口閾值范圍內(nèi)不存在疑似目標(biāo)點(diǎn)pit時(shí),將窗口閾值參數(shù)值dth1、dth2、cth擴(kuò)大兩倍,并轉(zhuǎn)至所述點(diǎn)跡匹配模塊中檢測(cè)下一幀圖像中在擴(kuò)大后的窗口閾值范圍內(nèi)是否存在關(guān)聯(lián)匹配目標(biāo)點(diǎn);
第六計(jì)算模塊,用于在連續(xù)3幀沒(méi)有匹配上目標(biāo)點(diǎn)時(shí),則判定軌跡消失,重新返回所述初始軌跡獲取模塊。
其中,如圖11為本發(fā)明實(shí)施例提供的一種原始圖像,如圖12(a)是對(duì)原始圖像進(jìn)行處理之后的局部圖像;圖12(b)是對(duì)原始圖像進(jìn)行局部單幀檢測(cè)結(jié)果圖;如圖13是關(guān)聯(lián)檢測(cè)結(jié)果。
如圖10為整個(gè)系統(tǒng)軟件的流程結(jié)構(gòu)。本系統(tǒng)設(shè)計(jì)采用了人機(jī)交互線程,圖像數(shù)據(jù)接收線程,圖像幀頭檢測(cè)線程,圖像處理線程。其中人機(jī)交互線程為主線程,屬于用戶界面線程,主要完成界面管理、功能控制、界面輸入輸出等。圖像數(shù)據(jù)接收線程主要是從外界環(huán)境中通過(guò)以太網(wǎng)線接收?qǐng)D像數(shù)據(jù)包,將圖像數(shù)據(jù)包存到相應(yīng)的環(huán)形緩沖區(qū)中。圖像幀頭檢測(cè)線程主要是將環(huán)形緩沖區(qū)中的數(shù)據(jù)取出,進(jìn)行圖像的幀頭幀尾檢測(cè),將得到的圖像數(shù)據(jù)送到待處理的圖像緩存區(qū)中。圖像處理線程處理圖像緩存區(qū)中的圖像數(shù)據(jù),并將處理結(jié)果發(fā)布。系統(tǒng)運(yùn)行后,圖像數(shù)據(jù)接收線程一直處于運(yùn)行狀態(tài),保證數(shù)據(jù)無(wú)損的收集,如果線程休眠,將會(huì)錯(cuò)過(guò)收取發(fā)來(lái)的數(shù)據(jù)包。圖像數(shù)據(jù)接收線程功能比較單一,主要負(fù)責(zé)收取數(shù)據(jù),除了與主線程存在信號(hào)溝通之外,還與圖像幀頭檢測(cè)線程共享同一個(gè)環(huán)形緩沖區(qū)。在圖像幀頭檢測(cè)線程和圖像處理線程中,通過(guò)兩線程共享2個(gè)圖像緩存區(qū),交替使用,避免了收集完數(shù)據(jù)再進(jìn)行數(shù)據(jù)處理。而是將圖像幀頭檢測(cè)和圖像處理分開(kāi)到不同線程進(jìn)行處理,極大提高了數(shù)據(jù)流的處理速度。
本領(lǐng)域的技術(shù)人員容易理解,以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。