本發(fā)明涉及一種基于圖像行數(shù)據(jù)掃描的星空目標(biāo)最大光強(qiáng)位置的識(shí)別方法,屬于一種對(duì)空間目標(biāo)進(jìn)行質(zhì)心提取的圖像處理算法。
背景技術(shù):
空間已成為新時(shí)期各國家政治、軍事、技術(shù)、經(jīng)濟(jì)等競爭的熱點(diǎn),空間攻防是未來太空戰(zhàn)爭的主要作戰(zhàn)手段。為了能夠使得衛(wèi)星自動(dòng)捕獲、跟蹤空間運(yùn)動(dòng)目標(biāo),需要對(duì)衛(wèi)星進(jìn)行快速姿態(tài)計(jì)算,然后使用準(zhǔn)確的光軸指向信息,推導(dǎo)出恒星在星圖中的位置,完成星點(diǎn)映射,最終找到運(yùn)動(dòng)目標(biāo),完成對(duì)目標(biāo)的實(shí)時(shí)捕獲、跟蹤。以上所有的步驟都是基于能夠準(zhǔn)確的找到星空背景下的恒星和目標(biāo)的質(zhì)心位置(即最大光強(qiáng)位置)來實(shí)現(xiàn)的。
恒星為觀測目標(biāo),恒星可以看作無窮遠(yuǎn)的具有一定光譜特性的點(diǎn)光源,因此其在圖像傳感器的感光面上成像為分布在較暗背景上的點(diǎn)狀光斑,光斑的灰度分布反映了星的亮度。
點(diǎn)狀光斑目標(biāo)的細(xì)分定位方法可以分為基于灰度和基于邊緣的兩大類?;诨叶鹊姆椒ㄒ话憷媚繕?biāo)的灰度分布信息,如質(zhì)心法、曲面擬合法等。基于邊緣的方法一般利用目標(biāo)的邊緣形狀信息,這些方法有邊緣圓(橢圓)擬合、Hough變換等。一般而言,基于灰度的方法比較適用于較小的且灰度分布均勻的目標(biāo),而基于邊緣的方法則適合較大的目標(biāo),它對(duì)灰度的分布不太敏感。實(shí)際觀測星圖中星空目標(biāo)的直徑一般為3~5個(gè)像元的大小,且灰度近似成高斯分布。因此,對(duì)于星空目標(biāo),宜采用基于灰度的方法進(jìn)行細(xì)分定位處理。
目前,使用最多是圖像連通域方法,算法步驟是:
(1)從左至右、從上至下掃描圖像;
(2)如果像素點(diǎn)的灰度大于背景閾值(T),則:a.如果上面點(diǎn)或左面點(diǎn)有一個(gè)標(biāo)記,則復(fù)制這個(gè)標(biāo)記;b.如果上面點(diǎn)或左面點(diǎn)有相同的標(biāo)記,則復(fù)制這一標(biāo)記;c.如果上面點(diǎn)或左面點(diǎn)的標(biāo)記不同,則復(fù)制上面點(diǎn)的標(biāo)記并將這兩個(gè)標(biāo)記輸入等價(jià)表作為等價(jià)標(biāo)記,如圖1中的標(biāo)記2與3為等價(jià)標(biāo)記;d.否則給這個(gè)像素點(diǎn)分配一個(gè)新的標(biāo)記;
(3)重復(fù)(2)直到掃描完圖像中所有灰度值大于T的像素點(diǎn);
(4)將等價(jià)表里具有相同標(biāo)記的像素點(diǎn)合并,并重新分配一個(gè)低序號(hào)的標(biāo)記。經(jīng)過連通域分割處理之后,各個(gè)星空目標(biāo)在星圖中表現(xiàn)為相鄰的具有相同標(biāo)記點(diǎn)的像素點(diǎn)的集合。如圖1所示,圖中數(shù)字1為一個(gè)目標(biāo),數(shù)字2和3為另一個(gè)目標(biāo),圖2所示的是上述算法的流程圖。
由于傳統(tǒng)算法中需要把整幅圖像全部接收存儲(chǔ)后才能進(jìn)行計(jì)算,如果圖像分辨率為1024*1024*8bits的話,至少需要兩片1MBits的SRAM來對(duì)圖像同時(shí)進(jìn)行接收存儲(chǔ)和數(shù)據(jù)處理。并且對(duì)圖像處理時(shí),使用連通域算法,需要從SRAM中讀取出圖像,在把處理的圖像存儲(chǔ)到SRAM后,再對(duì)處理后的圖像進(jìn)行掃描計(jì)算后才能完成質(zhì)心提取。
從上面步驟可以看出,對(duì)一副圖像進(jìn)行質(zhì)心提取,至少需要2次圖像數(shù)據(jù)的操作,假設(shè)SRAM的接口速率為40MHz,數(shù)據(jù)位數(shù)位32bits,則接口傳輸需要的時(shí)間為13.1ms,而對(duì)于捕獲模塊的跟蹤速度的要求為20fps,去掉機(jī)構(gòu)運(yùn)動(dòng)和算法余量等時(shí)間后,每幀圖像的處理時(shí)間小于40ms左右,如果在讀取圖像方面花費(fèi)的時(shí)間占用了整個(gè)算法32.75%的時(shí)間,那么對(duì)后面的算法提出了很大的要求。
另外一種是使用卷積的方法,需要固定大小的模板進(jìn)行卷積來完成識(shí)別,這種方法主要針對(duì)已知且固定大小的物體,不能對(duì)任意大小的圖像進(jìn)行識(shí)別,而在星空的目標(biāo)識(shí)別時(shí),目標(biāo)離觀測點(diǎn)的距離會(huì)變化,在像平面上的大小也會(huì)發(fā)生變化,并且變化范圍也很大,幾個(gè)像素到幾百個(gè)像素都有可能,所以該方法不適合。
因此,目前現(xiàn)有的方法難以滿足實(shí)時(shí)地對(duì)大小可變的目標(biāo)最大光強(qiáng)特征位置進(jìn)行識(shí)別的要求。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明所要解決的技術(shù)問題是:克服現(xiàn)有技術(shù)的不足,提供一種基于圖像行數(shù)據(jù)掃描的星空目標(biāo)最大光強(qiáng)位置,簡單,實(shí)現(xiàn)容易,并且運(yùn)算效率高,識(shí)別速度快,同時(shí)可以確保準(zhǔn)確性、可靠性與實(shí)時(shí)性的最大光強(qiáng)位置的識(shí)別方法,以完成識(shí)別恒星和目標(biāo)的最大光強(qiáng)特征位置。
當(dāng)使用CMOS相機(jī)時(shí),圖像背景會(huì)存在一定的噪聲,所以需要確定一個(gè)背景閾值(T)來消除噪聲的影響。根據(jù)CMOS相機(jī)的特點(diǎn),相鄰幀之間噪聲幅值變化較小,時(shí)間間隔較大時(shí),噪聲變化較大,所以本發(fā)明采取了動(dòng)態(tài)背景閾值,即,背景閾值是由前一幀圖像的像素灰度平均值確定的。
本發(fā)明包括如下技術(shù)方案:
一種基于圖像行數(shù)據(jù)掃描的星空目標(biāo)最大光強(qiáng)位置的識(shí)別方法,如圖7所示,步驟如下:
1.接收相機(jī)數(shù)據(jù),所述相機(jī)數(shù)據(jù)是按行傳輸?shù)?,使用乒乓緩沖技術(shù)對(duì)行數(shù)據(jù)進(jìn)行接收;
2.對(duì)緩沖的行數(shù)據(jù)進(jìn)行數(shù)據(jù)掃描,如果某像素的灰度大于背景閾值T,并且該像素左邊相鄰的像素值小于T時(shí),記錄該像素所在列的坐標(biāo)為Ln;如果某像素的灰度小于背景閾值T,并且該像素左邊相鄰的像素值大于T時(shí),記錄該像素的左邊像素所在列的坐標(biāo)為Rn,Ln與Rn成對(duì)出現(xiàn),寫作Ln-Rn。一行數(shù)據(jù)中可以有多個(gè)Ln-Rn對(duì);
3.將步驟2中Ln-Rn對(duì)之間的數(shù)據(jù)定義為行目標(biāo),并且在掃描行數(shù)據(jù)的同時(shí),對(duì)行目標(biāo)按行目標(biāo)計(jì)算方法進(jìn)行計(jì)算;當(dāng)行目標(biāo)掃描完成時(shí),把該行目標(biāo)按行目標(biāo)組合方法進(jìn)行處理和存儲(chǔ),使行目標(biāo)組成星空目標(biāo);
4.重復(fù)步驟2和步驟3,直到掃描完該行數(shù)據(jù);
5.如果某星空目標(biāo)在一行數(shù)據(jù)掃描結(jié)束后,仍然沒有被更新過,說明該星空目標(biāo)已經(jīng)結(jié)束。圖5為一個(gè)星空目標(biāo)的完整的掃描過程,Ln-Rn為當(dāng)前行目標(biāo),由于Ln>R,所以星空目標(biāo)1已經(jīng)結(jié)束,而星空目標(biāo)2仍未結(jié)束;
6.當(dāng)星空目標(biāo)已經(jīng)結(jié)束時(shí),對(duì)星空目標(biāo)進(jìn)行最終判定,對(duì)于符合判定的即為需要的星空目標(biāo),利用公式x0=Ix/I和y0=Iy/I對(duì)星空目標(biāo)進(jìn)行質(zhì)心計(jì)算,即最大光強(qiáng)位置計(jì)算;當(dāng)多個(gè)星空目標(biāo)同時(shí)結(jié)束時(shí),需要順序進(jìn)行質(zhì)心運(yùn)算。在質(zhì)心計(jì)算中,需要用到除法,本發(fā)明為了能夠該算法可以獨(dú)立運(yùn)行在FPGA中,所以使用了試商法完成了除法運(yùn)算;
7.當(dāng)相機(jī)數(shù)據(jù)接收完成后,星空目標(biāo)識(shí)別結(jié)束,當(dāng)完成剩余的質(zhì)心計(jì)算后,星空目標(biāo)質(zhì)心也完成了提取。
在步驟3中,當(dāng)發(fā)現(xiàn)行目標(biāo)后,利用FPGA的并行性,在掃描行目標(biāo)的過程中,需要對(duì)行數(shù)據(jù)進(jìn)行乘累加計(jì)算,對(duì)于第N行數(shù)據(jù),計(jì)算該行中的Ln-Rn之間數(shù)據(jù)的加權(quán)值和In=[F(x,y)-T],其中F(x,y)為圖像的灰度值,T為圖像的背景閾值,x為圖像的行坐標(biāo),y為Ln-Rn之間行數(shù)據(jù)的列坐標(biāo);如果一行有多個(gè)Ln-Rn對(duì),則計(jì)算多個(gè)Ixn、Iyn和In對(duì)。
在步驟3中的行目標(biāo)組合方法為,當(dāng)某個(gè)行目標(biāo)掃描完成后,與已有星空目標(biāo)進(jìn)行目標(biāo)判定,判斷過程為:該行目標(biāo)的Ln和Rn值與已有星空目標(biāo)數(shù)據(jù)中的L和R值比較,如果Ln≤R-k1且Rn≥L-k2時(shí),則該星空目標(biāo)與該行目標(biāo)是連通的,為同一個(gè)星空目標(biāo),如圖3所示,其中k1,k2根據(jù)星空目標(biāo)特性進(jìn)行調(diào)節(jié),否則為兩個(gè)獨(dú)立的星空目標(biāo),如圖4所示,如果該行目標(biāo)的Ln和Rn與所有星空目標(biāo)數(shù)據(jù)中的L和R值都沒有匹配,則記錄該行目標(biāo)為新星空目標(biāo)。如果屬于某個(gè)星空目標(biāo),則對(duì)該星空目標(biāo)數(shù)據(jù)進(jìn)行更新,如果是新星空目標(biāo),則需要在星空目標(biāo)隊(duì)列中建立新的星空目標(biāo)數(shù)據(jù);如圖3所示為同一個(gè)星空目標(biāo),圖4所示為兩個(gè)獨(dú)立星空目標(biāo);星空目標(biāo)數(shù)據(jù)存儲(chǔ)格式如圖6所示,其中L、R、Ix、Iy、I分別是星空目標(biāo)的左邊界,右邊界,行累加值,列列累加值和坐標(biāo)累加值;更新數(shù)據(jù)的過程為:如果某行目標(biāo)與某星空目標(biāo)連通,則把該行目標(biāo)對(duì)應(yīng)的Izn累加到該星空目標(biāo)數(shù)據(jù)的Ix中,該行目標(biāo)對(duì)應(yīng)的Iyn累加到該星空目標(biāo)數(shù)據(jù)的Iy中,該行目標(biāo)對(duì)應(yīng)的In累加到該星空目標(biāo)數(shù)據(jù)的I中,并將該星空目標(biāo)數(shù)據(jù)中的L和R更新為該行目標(biāo)的Ln和Rn。
經(jīng)過上述步驟,當(dāng)整幅圖像按行接收完成后,行掃描數(shù)據(jù)也已經(jīng)完成,所以此算法可以實(shí)現(xiàn)實(shí)時(shí)的處理行數(shù)據(jù),并能在行數(shù)據(jù)中提取出星空目標(biāo)的信息,計(jì)算出星空目標(biāo)質(zhì)心坐標(biāo)。
本發(fā)明與現(xiàn)有技術(shù)相比,具有如下優(yōu)點(diǎn):
(1))實(shí)時(shí)性強(qiáng),運(yùn)算速度快,只需要接收完圖像數(shù)據(jù),就已經(jīng)完成了目標(biāo)質(zhì)心提取,與傳統(tǒng)的連通域相比,大大提升了計(jì)算質(zhì)心的速度
(2)星空目標(biāo)大小可變,不受圖像處理模板大小的限制
(3)可以不使用DSP
(4)由于不需要占用大量的存儲(chǔ)器,圖像分辨率可以很大,并且節(jié)省存儲(chǔ)空間資源,節(jié)省硬件面積。
(5)可以用于高速相機(jī),比如分辨率為4M,像素位數(shù)為12bits,幀頻為500Hz的圖像,需要24Gbit/s的傳輸速率才能把圖像數(shù)據(jù)傳輸完成。當(dāng)使用了本文提到的技術(shù),只需要一個(gè)FPGA在獲得數(shù)據(jù)的同時(shí),使用基于圖像行數(shù)據(jù)掃描的方法,就可以獲得星空目標(biāo)的最大光強(qiáng)位置,然后只需要把最大光強(qiáng)位置傳送出去即可。
附圖說明
圖1為現(xiàn)有技術(shù)中連通域分割處理后的圖像數(shù)據(jù);
圖2為現(xiàn)有技術(shù)中連通域分割處理的步驟;
圖3為本發(fā)明中同一個(gè)星空目標(biāo)時(shí),行數(shù)據(jù)掃描時(shí)星空目標(biāo)與行目標(biāo)的位置關(guān)系;
圖4為本發(fā)明中兩個(gè)獨(dú)立星空目標(biāo)時(shí),行數(shù)據(jù)掃描時(shí)星空目標(biāo)與行目標(biāo)的位置關(guān)系;
圖5為本發(fā)明中基于行數(shù)據(jù)掃描算法下識(shí)別星空目標(biāo)的完整過程;
圖6為本發(fā)明中星空目標(biāo)在FPGA中的存儲(chǔ)格式;
圖7為本發(fā)明中系統(tǒng)整體設(shè)計(jì)框架;
圖8為本發(fā)明中數(shù)據(jù)緩沖模塊框圖;
圖9為本發(fā)明中行數(shù)據(jù)掃描算法實(shí)現(xiàn)流程圖。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本發(fā)明的識(shí)別方法,進(jìn)行詳細(xì)描述。
按照上述步驟,基于圖像行數(shù)據(jù)掃描的方法的具體的實(shí)現(xiàn)的系統(tǒng)整體設(shè)計(jì)框架如圖7、9所示,下面給出了圖7、9中所示的步驟。
(1)首先需要根據(jù)相機(jī)的通信協(xié)議,編寫接口代碼,完成對(duì)相機(jī)數(shù)據(jù)的讀取,一般情況下,相機(jī)的數(shù)據(jù)是行傳輸?shù)?,為了保證數(shù)據(jù)的實(shí)時(shí)接收和處理,采用乒乓緩沖技術(shù)對(duì)行數(shù)據(jù)進(jìn)行接收。
由兩個(gè)RAM組成的,主要是為了使相機(jī)數(shù)據(jù)接收模塊和處理模塊同時(shí)進(jìn)行,當(dāng)相機(jī)接收數(shù)據(jù)模塊向SideA存儲(chǔ)器寫入數(shù)據(jù)時(shí),相機(jī)數(shù)據(jù)處理模塊會(huì)從SideB中讀取數(shù)據(jù),由于數(shù)據(jù)緩沖模塊兩端的時(shí)鐘域不同,所以使用了兩個(gè)雙端口RAM;為了能夠在兩端傳遞控制信號(hào),使用了跨時(shí)鐘域同步的方式,本模塊的整體結(jié)構(gòu)如圖8所示,圖8中給出了上述實(shí)現(xiàn)方法的框圖。
(2)對(duì)緩沖行數(shù)據(jù)進(jìn)行數(shù)據(jù)掃描,需要用到背景閾值,背景閾值的確定需要根據(jù)具體的應(yīng)用環(huán)境來決定采用哪種方法。因?yàn)槭切强毡尘跋碌哪繕?biāo),所以本文中的背景閾值是根據(jù)上一幀數(shù)據(jù)的平均像素值求得的。
根據(jù)得到的背景閾值T,來對(duì)行數(shù)據(jù)的像素值進(jìn)行判斷。如果某像素的灰度大于背景閾值T,并且該像素左邊相鄰的像素值小于T時(shí),記錄該像素所在列的坐標(biāo)為Ln;如果某像素的灰度小于背景閾值T,并且該像素左邊相鄰的像素值大于T時(shí),記錄該像素的左邊像素所在列的坐標(biāo)為Rn,Ln與Rn成對(duì)出現(xiàn),寫作Ln-Rn。一行數(shù)據(jù)中可以有多個(gè)Ln-Rn對(duì)。
(3)當(dāng)步驟2中記錄Ln時(shí),則認(rèn)為已經(jīng)發(fā)現(xiàn)了行目標(biāo),所以可以利用FPG的并行性,在掃描行數(shù)據(jù)的過程中,對(duì)行目標(biāo)數(shù)據(jù)進(jìn)行乘累加計(jì)算。
對(duì)于第N行數(shù)據(jù),利用下列公式計(jì)算該行中的Ln-Rn之間數(shù)據(jù)的加權(quán)值。
In=[F(x,y)-T]
其中F(x,y)為圖像的灰度值,T為圖像的背景閾值,x為圖像的行坐標(biāo),y為行數(shù)據(jù)的列坐標(biāo);如果一行有多個(gè)Ln-Rn對(duì),則計(jì)算多個(gè)Ixn、Iyn和In對(duì)。
當(dāng)步驟2中記錄Rn時(shí),則說明該行目標(biāo)已經(jīng)掃描完成,一行可以有多個(gè)行目標(biāo)。
將本次得到的行目標(biāo),與已有星空目標(biāo)進(jìn)行目標(biāo)判定,判斷過程為:
某個(gè)行目標(biāo)的Ln和Rn值與已有星空目標(biāo)數(shù)據(jù)中的L和R值比較,如果Ln≤R-k1且Rn≥L-k2時(shí),則該星空目標(biāo)與該行目標(biāo)是連通的,為同一個(gè)星空目標(biāo),此處k1,k2均取零,否則為兩個(gè)獨(dú)立的星空目標(biāo),如果該行目標(biāo)的Ln和Rn與所有星空目標(biāo)數(shù)據(jù)中的L和R值都沒有匹配,則記錄該行目標(biāo)為新星空目標(biāo)。
如果此次發(fā)現(xiàn)行目標(biāo)屬于某個(gè)星空目標(biāo),則對(duì)該星空目標(biāo)數(shù)據(jù)進(jìn)行更新,把該行目標(biāo)對(duì)應(yīng)的Ixn累加到該星空目標(biāo)數(shù)據(jù)的Ix中,該行目標(biāo)對(duì)應(yīng)的Iyn累加到該星空目標(biāo)數(shù)據(jù)的Iy中,該行目標(biāo)對(duì)應(yīng)的In累加到該星空目標(biāo)數(shù)據(jù)的I中,并將該星空目標(biāo)數(shù)據(jù)中的L和R更新為該行目標(biāo)的Ln和Rn;
如果是新星空目標(biāo),則需要在星空目標(biāo)隊(duì)列中建立新的星空目標(biāo)數(shù)據(jù),如圖6所示,包括L、R、Ix、Iy、I,它們的初值分別為成為新星空目標(biāo)的行目標(biāo)的Ln、Rn、Ixn、Iyn、In;
如圖3所示為同一個(gè)星空目標(biāo),圖4所示為兩個(gè)獨(dú)立星空目標(biāo);
(4)重復(fù)步驟2和步驟3,直到掃描完該行數(shù)據(jù)。
(5)如果某星空目標(biāo)在一行數(shù)據(jù)掃描結(jié)束后,仍然沒有被更新過,說明該星空目標(biāo)已經(jīng)結(jié)束。圖6為一個(gè)星空目標(biāo)的完整的掃描過程,由于Ln>R,所以星空目標(biāo)1已經(jīng)結(jié)束,而星空目標(biāo)2仍未結(jié)束;
(6)當(dāng)星空目標(biāo)已經(jīng)結(jié)束時(shí),對(duì)星空目標(biāo)進(jìn)行最終判定。判定方法可以根據(jù)需要來設(shè)定,本發(fā)明中認(rèn)為一個(gè)星空目標(biāo)含有的像素個(gè)數(shù)需要大于1,對(duì)于只包含1個(gè)像素的星空目標(biāo),認(rèn)為其是由噪聲引起的誤判斷。
對(duì)于符合判定的即為需要的星空目標(biāo),利用下列公式對(duì)其進(jìn)行質(zhì)心計(jì)算。
x0=Ix/I
y0=Iy/I
其中Ix、Iy和I均為星空目標(biāo)數(shù)據(jù)中的數(shù)據(jù),x0為星空目標(biāo)的行坐標(biāo),y0為星空目標(biāo)的列坐標(biāo),(x0,y0)即為星空目標(biāo)的最大光強(qiáng)位置。
在質(zhì)心計(jì)算中,需要用到除法,本發(fā)明中為了能夠可以獨(dú)立運(yùn)行在FPGA中,所以使用了試商法完成了除法運(yùn)算;當(dāng)多個(gè)星空目標(biāo)同時(shí)結(jié)束時(shí),需要順序進(jìn)行質(zhì)心運(yùn)算。
(7)當(dāng)相機(jī)數(shù)據(jù)接收完成后,星空目標(biāo)識(shí)別結(jié)束,當(dāng)完成剩余的質(zhì)心計(jì)算后,星空目標(biāo)質(zhì)心也完成了提取。
本發(fā)明使用了FPGA實(shí)現(xiàn),亦可使用DSP等高速處理器實(shí)現(xiàn)。該方法主要用于高速相機(jī)的圖像處理、受面積限制的圖像處理系統(tǒng)、對(duì)未知目標(biāo)大小識(shí)別的圖像處理;本發(fā)明中對(duì)星空背景下的恒星和目標(biāo)的最大光強(qiáng)位置進(jìn)行了識(shí)別。