席偉光,童大為,費(fèi)玉杰,徐天柏
(海鷹企業(yè)集團(tuán)有限責(zé)任公司,江蘇無(wú)錫,214115)
高頻多波束圖像聲納因其卓越的圖像質(zhì)量,在海洋工程、環(huán)境監(jiān)測(cè)等民用領(lǐng)域以及反水雷、反潛等軍用領(lǐng)域都得到了廣泛的應(yīng)用[1]。
高頻多波束圖像聲納的探測(cè)頁(yè)面是一個(gè)以聲基陣[2]開(kāi)角為圓心角的扇形區(qū)域,只有采用扇形顯示方式,才能最大限度地還原水下環(huán)境的真實(shí)面貌,因此需要將信號(hào)處理輸出的二維矩陣圖像轉(zhuǎn)換成扇形圖像。聲納作為一種專用設(shè)備,集成度較高,配備的軟硬件資源有限,很難適配通用扇形插值軟件[3],且大部分通用軟件的扇形插值功能非專為聲納設(shè)計(jì),在圖像質(zhì)量和實(shí)時(shí)性[4]方面無(wú)法滿足使用要求。
RTheta數(shù)字掃描變換算法[5]的插值效果逼真,能滿足聲納圖像質(zhì)量要求,但其復(fù)雜的計(jì)算過(guò)程無(wú)法滿足聲納的實(shí)時(shí)性要求,故優(yōu)化算法是本文研究的重要內(nèi)容。
本文以高頻多波束聲納圖像為研究對(duì)象,以R-Theta數(shù)字掃描變換算法為基礎(chǔ)建立扇形插值的數(shù)學(xué)模型;使用“查表法”[6]“圖形對(duì)稱法”“通用化設(shè)計(jì)”優(yōu)化數(shù)學(xué)模型;使用面向?qū)ο蟮某绦蛟O(shè)計(jì)方法完成了軟件設(shè)計(jì);最后通過(guò)聲納設(shè)備的試驗(yàn)結(jié)果,說(shuō)明方法的有效性。
本文討論的扇形插值原理基于R-Theta數(shù)字掃描變換算法,它是一種二維線性插值算法[7],該算法最先應(yīng)用于B超儀,其原理是利用極坐標(biāo)與直角坐標(biāo)的轉(zhuǎn)換關(guān)系,將B超探頭掃描獲得的波束數(shù)據(jù)[8]映射到矩形的顯示區(qū)域中。
高頻多波束圖像聲納與B超儀的工作原理類似。本文以某型前視聲納為例進(jìn)行說(shuō)明,該聲納的探測(cè)開(kāi)角為100度,探測(cè)扇面內(nèi)均勻分布了200個(gè)波束,波束寬度[9]為0.5°,每個(gè)波束上等間隔分布600個(gè)樣本點(diǎn),假設(shè)扇形的右側(cè)半徑為角度參考線,即θ=0°,由此可求得任意波束上的任意樣本點(diǎn)的徑向距離R和波束偏移角(波束與參考線的夾角)θ。
算法的目的是把如圖1所示的扇形波束圖映射到存貯器矩陣中。為了說(shuō)明上的方便,將圖1中的局部存貯空間進(jìn)行放大,局部放大圖見(jiàn)圖2,每個(gè)存貯單位(+號(hào)所在位置)中應(yīng)填入合適的像素值。
圖1 扇形波束圖
圖2 扇形圖像的局部放大圖
對(duì)于處在相鄰兩個(gè)波束之間的所有像素值,使用下列3個(gè)方程來(lái)插值。
(x,y)是扇形顯示區(qū)域內(nèi)的任意一點(diǎn),s(*,*)是(x,y)相鄰的四個(gè)樣本點(diǎn)的值。而z(i)和z(i+1)是計(jì)算f(x,y)的過(guò)渡值,Rerr是徑向距離誤差,θerr是方位角相對(duì)誤差,由下式確定:
其中R'為點(diǎn)(x,y)的徑向距離,θ'為(x,y)與角度參考線的夾角,ΔR為同一波束上相鄰采樣點(diǎn)(遠(yuǎn)端)的徑向距離差,Δθ為波束寬度。
綜上,將(x,y)相鄰兩個(gè)波束上的4個(gè)樣本點(diǎn)s(i,j)、s(i,j+1)、s(i+1,j)、s(i+1,j+1)代入公式⑴⑵⑶,可得:
由公式⑹可求得顯示區(qū)域扇形范圍內(nèi)任意一點(diǎn)的像素值。
結(jié)合某型前視聲納,以扇形的圓心為原點(diǎn)建立直角坐標(biāo)系,如圖3所示。
圖3 建立直角坐標(biāo)系的扇形波束圖
在直角坐標(biāo)系中,矩形顯示區(qū)中的任意一點(diǎn)都可以用(x,y)表示。根據(jù)扇形插值原理:
直角坐標(biāo)系內(nèi)的任意一點(diǎn)(x,y)可以轉(zhuǎn)化為極坐標(biāo)形式(R',θ')。
θ'的取值范圍為根據(jù)圖2設(shè)s(i+1,j+1)對(duì)應(yīng)點(diǎn)的極坐標(biāo)為(R,θ),則s(i,j+1)對(duì)應(yīng)的極坐標(biāo)為(R,θ-Δθ),(i,j)對(duì)應(yīng)的極坐標(biāo)為(R-ΔR,θ-Δθ),(i+1,j)對(duì)應(yīng)的極坐標(biāo)為(R-ΔR,θ),根據(jù)圖2中(x,y)和s(i+1,j+1)的位置關(guān)系易推出:
將⑺⑻⑼⑽代入⑾⑿可知s(i+1,j+1)的極坐標(biāo)可由(x,y)確定,同理f(x,y)周圍的其余三個(gè)樣本點(diǎn)的極坐標(biāo)均可由(x,y)確定。
將⑺⑻⑼⑽⑾⑿代入⑷⑸可知Rerr和θerr由(x,y)確定。由⑹式可知,f(x,y)的值可由周圍四點(diǎn)s(*,*)的值、Rerr和θerr確定,因此只需求得s(*,*)的值,即可得到f(x,y)的值。下文介紹了通過(guò)s(*,*)的極坐標(biāo)獲取s(*,*)的值的方法。
如圖4所示,將待進(jìn)行扇形插值的200×600(W×H)個(gè)樣本點(diǎn)的聲納波束數(shù)據(jù)按順序分布到內(nèi)存中。
設(shè)圖2中點(diǎn)s(i+1,j+1),s(i,j+1),s(i,j),s(i+1,j)對(duì)應(yīng)圖4中點(diǎn)A、B、C、D;波束樣本點(diǎn)j的取值范圍為(0,599),波束號(hào)i的取值范圍為(0,199)。
設(shè)內(nèi)存中波束數(shù)據(jù)的起始地址為pBmembuf[0],則圖4中點(diǎn)A、B、C、D對(duì)應(yīng)的內(nèi)存值如下:
圖4 聲納波束數(shù)據(jù)內(nèi)存分布圖
A:pBmembuf[200(j + 1)+ 200 - i - 1];
B:pBmembuf[200(j + 1)+ 200 - i ];
C:pBmembuf[200j + 200 - i];
D:pBmembuf[200j + 200 - i - 1];
上文設(shè)s(i+1,j+1)對(duì)應(yīng)的極坐標(biāo)為(R,θ),且由⑾⑿可知R是ΔR的整數(shù)倍,θ是Δθ的整數(shù)倍,結(jié)合⑺⑻⑼⑽可進(jìn)一步推出:
由⒀⒁可知i和j可通過(guò)(x,y)計(jì)算獲得,則點(diǎn)A、B、C、D的內(nèi)存序號(hào)也可通過(guò)(x,y)計(jì)算獲得。
由此可實(shí)現(xiàn)將直角坐標(biāo)系的扇形波束圖中的任意一點(diǎn)(x,y)周圍的四點(diǎn)映射為波束域數(shù)據(jù)中對(duì)應(yīng)的內(nèi)存值,再根據(jù)公式⑹計(jì)算得到f(x,y)的值。
將圖3扇形顯示區(qū)內(nèi)的像素點(diǎn)按此方法逐一賦值,即可完成扇形插值。
在用軟件實(shí)現(xiàn)R-Theta算法中,需要多次調(diào)用三角函數(shù)、浮點(diǎn)運(yùn)算等大開(kāi)銷算子,為了節(jié)省運(yùn)算資源,提高圖像刷新率和系統(tǒng)實(shí)時(shí)性,需優(yōu)化數(shù)學(xué)模型。由⒀⒁可知,計(jì)算任意一個(gè)f(x,y)的值,至少需要進(jìn)行一次和一次計(jì)算,以圖3顯示區(qū)尺寸為800×650(W×H)為例,需分別進(jìn)行52萬(wàn)次計(jì)算,采用查表法和圖形對(duì)稱法可大幅降低計(jì)算量。通過(guò)上述優(yōu)化,在奔4處理器上測(cè)試扇形插值算法,150米量程的單圖刷新時(shí)間從140ms降為80ms,性能明顯提高。
本例列舉的數(shù)學(xué)模型是根據(jù)某型前視聲納的專用需求設(shè)計(jì)的,不同聲納對(duì)扇形顯示的需求不同,具體體現(xiàn)在扇形圓心角、扇形半徑、顯示區(qū)尺寸、顯示量程等參數(shù)有差異。為了使數(shù)學(xué)模型更具通用性,應(yīng)進(jìn)行通用化設(shè)計(jì)。
2.2.1 查表法
查表法的原理是通過(guò)預(yù)處理[10]的方式提前計(jì)算復(fù)雜算法在一定范圍的運(yùn)算結(jié)果,并按規(guī)律儲(chǔ)存到指定內(nèi)存中,當(dāng)程序需要調(diào)用算法時(shí),查詢并訪問(wèn)內(nèi)存中的運(yùn)算結(jié)果即可,因計(jì)算機(jī)訪問(wèn)內(nèi)存地址的速度遠(yuǎn)高于執(zhí)行算法本身[11],故可達(dá)到降低計(jì)算量的目的。使用查表法的約束條件是:算法輸入值的范圍有限且可確定。
圖3顯示區(qū)尺寸為800×650(W×H),則x的取值范圍為[-400,400],y的取值范圍為[0,650],可通過(guò)以下方法將取值范圍內(nèi)的進(jìn)行預(yù)處理。
初始化預(yù)處理結(jié)果存儲(chǔ)數(shù)組:float m_sqrtTable [401][651]; float m_atanTable [401][651];
預(yù)處理偽代碼如下:
2.2.2 圖形對(duì)稱法
圖形對(duì)稱法的原理是利用顯示區(qū)左右兩側(cè)以y軸對(duì)稱的特性,首先使用數(shù)學(xué)模型計(jì)算得到顯示區(qū)一側(cè)像素點(diǎn)相鄰四點(diǎn)的內(nèi)存序號(hào)以及Rerr和θerr的值,再利用軸對(duì)稱性質(zhì),推算出另一側(cè)對(duì)稱點(diǎn)相鄰四點(diǎn)的內(nèi)存序號(hào)及Rerr和θerr的值,該方法可將復(fù)雜算法和的運(yùn)算次數(shù)降低50%,大幅提升運(yùn)算效率。
舉例說(shuō)明:圖4中點(diǎn)A、B、C、D為(x,y)的四個(gè)相鄰點(diǎn),由軸對(duì)稱性質(zhì)可知,一定存在對(duì)稱點(diǎn)A'、B'、C'、D'、(x',y'),已知點(diǎn)A對(duì)應(yīng)的內(nèi)存序號(hào)為200(j+1)+200-i-1,則很容易推出點(diǎn)A'的內(nèi)存序號(hào)為200(j+1)+i,同理可推出點(diǎn)B'、C'、D'的內(nèi)存序號(hào),且R'err=Rerr;θ'err=θerr。然后根據(jù)公式⑹計(jì)算得到,f(x',y')的值。
2.2.3 通用化設(shè)計(jì)
高頻多波束圖像聲納的探測(cè)開(kāi)角、波束數(shù)、采樣點(diǎn)數(shù)均為聲納固有參數(shù),不同型號(hào)的聲納設(shè)備或有差異;而顯示量程為聲納工作參數(shù),可在聲納使用過(guò)程中根據(jù)按需設(shè)置。以上參數(shù)均為扇形插值的輸入值,參與了扇形插值的計(jì)算過(guò)程,只有將這些參數(shù)對(duì)用戶開(kāi)放,才能使扇形插值算法更具通用性。
下文介紹了聲納固有參數(shù)通用化和顯示量程參數(shù)通用化的詳細(xì)設(shè)計(jì)方法。
2.2.3.1 聲納固有參數(shù)通用化
本節(jié)只討論顯示起始量程為0米的情況,非0情況在“顯示量程參數(shù)通用化”中介紹。
探測(cè)開(kāi)角決定了扇形圓心角,扇形圓心角結(jié)合波束數(shù)決定了Δθ,采樣點(diǎn)數(shù)決定了扇形半徑和ΔR,聲納圖像顯示區(qū)尺寸可通過(guò)以上參數(shù)估算獲得。
在程序中,聲納固有參數(shù)的用戶接口,可通過(guò)宏定義設(shè)定:
2.2.3.2 顯示量程參數(shù)通用化
圖像聲納的距離分辨率[12]較高,可達(dá)厘米級(jí),假設(shè)某聲納的距離分辨率為2.5cm,則在200m量程下每個(gè)波束包含的采樣點(diǎn)數(shù)為8000,遠(yuǎn)高于普通顯示器的分辨率,為了實(shí)現(xiàn)滿量程下的圖像顯示,一般會(huì)對(duì)樣本點(diǎn)進(jìn)行抽點(diǎn)處理,以輸出符合圖像顯示區(qū)尺寸的圖像數(shù)據(jù),即犧牲了距離分辨率來(lái)滿足全量程顯示的需求;但也可通過(guò)縮小顯示量程范圍的方法,提升聲納圖像的距離分辨率。
如圖5中(1)所示,聲納全量程為0~200m,當(dāng)目標(biāo)處于50~100m范圍內(nèi)時(shí),為了提高目標(biāo)的距離分辨率,可將50~100m量程區(qū)間(陰影部分)的圖像進(jìn)行放大顯示,50m量程定義為顯示起始量程,100m量程定義為顯示終止量程。
圖5 顯示量程放大圖
一般有兩種方法實(shí)現(xiàn)顯示量程范圍內(nèi)的圖像放大:
方法1:如圖5中(2)所示,首先將顯示量程內(nèi)的樣本點(diǎn)重新抽點(diǎn)處理,使之與扇形半徑的像素點(diǎn)一致,然后將顯示量程內(nèi)的數(shù)據(jù)按照扇形的半徑、圓心角進(jìn)行插值,從圖上可以發(fā)現(xiàn),顯示起始量程50m處的圓弧已縮小成了一個(gè)點(diǎn),丟失了大量有效數(shù)據(jù),越接近顯示起始量程,丟失的有效數(shù)據(jù)元素越多,同時(shí)顯示終止量程100m處的圓弧被拉伸了一倍,降低了方位分辨率??梢?jiàn)本方法與聲納實(shí)際應(yīng)用場(chǎng)景有較大差異,容易造成目標(biāo)變形。
方法2:如圖5中(3)所示,同樣,首先將顯示量程內(nèi)的樣本點(diǎn)重新抽點(diǎn)處理,使之與原扇形半徑的像素點(diǎn)一致,然后保持顯示起始量程50m處的弧長(zhǎng)和顯示終止量程100m處的弧長(zhǎng)不變,并將兩圓弧間的環(huán)寬拉伸至與原扇形半徑一致,如陰影部分所示,陰影部分是新生成扇形中的一部分,根據(jù)上文數(shù)學(xué)模型,只需知道扇形的圓心角、半徑、波束數(shù)即可完成扇形插值。新扇形的波束數(shù)不變,圓心角β和半徑R可通過(guò)以下方法計(jì)算獲得:
r為原扇形半徑,endrange為顯示終止量程,startrange為顯示起始量程,α為原扇形圓心角。由公式(15)可知endrange與startrange越接近新扇形的半徑R越大,應(yīng)用中可確定endrange與startrange間的最小差值,即聲納在最大距離分辨率時(shí),顯示區(qū)能夠顯示的最大量程范圍。
方法2最大限度還原了聲納探測(cè)扇面,聲納目標(biāo)變形小。
軟件設(shè)計(jì)基于C++編程語(yǔ)言,建立了扇形圖像插值類:PolarImage。共由三個(gè)文件組成:PolarImage.h、PolarImage.cpp、UsrIf.h,PolarImage.h聲明了PolarImage類,PolarImage.cpp實(shí)現(xiàn)了類成員函數(shù),UsrIf.h為用戶提供了聲納固有參數(shù)和顯示尺寸的配置接口。
如圖6所示為PolarImage類的結(jié)構(gòu)組成。
從圖6可知transform()函數(shù)是PolarImage類提供的唯一用戶接口,其完整聲明應(yīng)為:static bool transform (unsigned char *InBuf,unsigned char *OutBuf, float startrange, float endrange);InBuf為待插值的波束數(shù)據(jù)所在的內(nèi)存地址,OutBuf為插值結(jié)果存放地址,startrange為顯示起始量程,endrange為顯示終止量程。
圖6 PolarImage類結(jié)構(gòu)圖
如圖7所示為聲納應(yīng)用程序及PolarImage類成員之間調(diào)用關(guān)系。聲納應(yīng)用程序利用UsrIf.h完成對(duì)靜態(tài)成員變量的初始化。
圖7 函數(shù)調(diào)用關(guān)系圖
聲納應(yīng)用程序需要進(jìn)行扇形插值時(shí)調(diào)用transform()函數(shù),該函數(shù)先對(duì)輸入?yún)?shù)進(jìn)行有效性檢查,通過(guò)后調(diào)用instance()函數(shù)獲取PolarImage類對(duì)象(若對(duì)象不存在,則instance()函數(shù)創(chuàng)建對(duì)象再返回,創(chuàng)建對(duì)象時(shí)調(diào)用構(gòu)造函數(shù)PolarImage()對(duì)m_sqrtTable和m_atanTable表空間進(jìn)行初始化),再利用獲取的PolarImage類對(duì)象調(diào)用_transform()函數(shù),該函數(shù)完成了扇形插值數(shù)學(xué)模型的代碼實(shí)現(xiàn),是核心函數(shù)。
聲納應(yīng)用程序刪除PolarImage類對(duì)象時(shí)調(diào)用析構(gòu)函數(shù)~PolarImage(),該函數(shù)釋放了m_sqrtTable和m_atan Table表空間。
本文研究的扇形插值方法已成功應(yīng)用于多個(gè)型號(hào)的聲納設(shè)備。
通過(guò)水池試驗(yàn)[13]驗(yàn)證了扇形顯示效果,試驗(yàn)水池為矩形,長(zhǎng)寬約為20×6m,在聲基礎(chǔ)陣正前方約15m處放置了一個(gè)直徑約60cm的環(huán)型鐵塊,正前方1m處放置了一個(gè)直徑約2cm的鐵球,分別采用矩形顯示和扇形顯示兩種方式進(jìn)行了對(duì)比。
從圖8矩形顯示圖可見(jiàn),原本矩形的水池壁,被顯示成塔形,且越接近基陣目標(biāo)變形越明顯,1m處的小球尺寸已嚴(yán)重失真,遠(yuǎn)大于實(shí)際尺寸,15m處的環(huán)型鐵塊失真不明顯。說(shuō)明在矩形顯示模式下,目標(biāo)越近失真越明顯。
圖8 前視聲納矩形顯示圖
從圖9扇形顯示圖可見(jiàn),矩形的水池壁無(wú)變形,1m處的小球呈現(xiàn)為1個(gè)亮點(diǎn),15m處的環(huán)型鐵塊與矩形圖差別不大。可見(jiàn)扇形模式下,近距離目標(biāo)無(wú)失真。
圖9 前視聲納扇形顯示圖
經(jīng)測(cè)試,在奔四處理器上完成圖像扇形插值時(shí)間約為80ms;在i7 2.4G處理器上完成圖像扇形插值時(shí)間約為30ms。均能滿足前視聲納的實(shí)時(shí)性要求。
該型聲納的固定參數(shù)如下:
探測(cè)開(kāi)角:30°;
波束數(shù):512;
波束上樣本點(diǎn)數(shù):1024;
扇形圖像顯示區(qū)大?。?40×1038(W×H);
矩形圖像顯示區(qū)大小:512×1024(W×H);
通過(guò)湖試[14]驗(yàn)證了扇形顯示效果,試驗(yàn)?zāi)繕?biāo)為一根φ0.066m×64m的陣?yán)|[15],將陣?yán)|懸?。ɡ酶∏颍┯谒?,兩端用繩子固定,使其姿態(tài)保持直線,左端距離聲基陣40余米,右端距離聲基陣60余米。
圖10為全量程[16](0~350m)下的矩形顯示圖和扇形顯示圖,圖中白圈標(biāo)注部分為目標(biāo)陣?yán)|,可見(jiàn)在全量程模式下聲納圖像顯示的范圍較大,但距離分辨率較低;矩形顯示模式下的陣?yán)|圖像被拉伸發(fā)生了變形,扇形顯示模式下的陣?yán)|目標(biāo)圖像較小,真實(shí)還原了聲基陣的水中姿態(tài)。
圖10 識(shí)別聲納全量程顯示圖
圖11 為顯示量程 (0~80m)下的矩形顯示圖和扇形顯示圖。通過(guò)減小顯示量程范圍提升了目標(biāo)的距離分辨率;矩形顯示模式下的陣?yán)|圖像被拉伸發(fā)生了一定程度的變形,呈現(xiàn)為弧形;扇形顯示模式下能夠還原基陣的真實(shí)姿態(tài)。
圖11 識(shí)別聲納0~80m顯示量程顯示圖
圖12 為顯示量程(30~80m)下的矩形顯示圖和扇形顯示圖。顯示量程范圍進(jìn)一步縮小,距離分辨率得到更大提高;矩形顯示模式下的陣?yán)|圖像被拉伸發(fā)生了一定程度的變形,呈現(xiàn)為弧形,扇形顯示模式下基本能夠還原基陣的真實(shí)姿態(tài),但較之圖11的扇形圖像有了些許彎曲。
圖12 識(shí)別聲納30~80顯示量程圖
經(jīng)測(cè)試在TMS320C6678處理器[17]上完成圖像扇形插值的時(shí)間約為50ms。
本文以高頻多波束聲納圖像為研究對(duì)象,采用R-Theta數(shù)字掃描變換算法建立了扇形插值的數(shù)學(xué)模型;根據(jù)裝備實(shí)際使用要求,提出三種優(yōu)化模型的方法:(1)查表法;(2)圖形對(duì)稱法;(3)通用化設(shè)計(jì);并針對(duì)數(shù)學(xué)模型完成了軟件設(shè)計(jì)。通過(guò)兩型聲納設(shè)備的試驗(yàn)驗(yàn)證結(jié)果表明,該扇形插值方法平臺(tái)適應(yīng)性強(qiáng),且圖像質(zhì)量和實(shí)時(shí)性均能滿足聲納使用要求,可在行業(yè)內(nèi)進(jìn)一步推廣應(yīng)用。