一種航海雷達模擬器ppi圖像的生成方法
【專利摘要】本發(fā)明公開了一種航海雷達模擬器PPI圖像的生成方法,包括以下步驟:讀取港口的三維模型數(shù)據(jù),將模型中的頂點列表塊中的數(shù)據(jù)存儲到頂點數(shù)組中;調(diào)用微軟開發(fā)庫中的設(shè)置定時器函數(shù);響應(yīng)定時器消息。本發(fā)明采用讀取港口三維模型方法,能夠利用真實世界中的港口、岸線、房屋、碼頭以及山脈等的三維信息,經(jīng)過三維場景的繪制后,生成的深度信息中保留了場景的三維信息,進而生成的雷達回波圖像更加逼真。本發(fā)明中生成的場景深度信息,由計算機的顯卡使用Z-Buffer算法生成的,速度很快。本發(fā)明所生成的場景深度信息的寬度和高度,決定了雷達回波數(shù)據(jù)的方位量化數(shù)和距離量化數(shù),通過提高場景深度信息的大小,可以提高雷達回波數(shù)據(jù)的分辨率。
【專利說明】ー種航海雷達模擬器PPI圖像的生成方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及ー種航海雷達仿真技木,尤其涉及ー種航海雷達模擬器PPI圖像的生成方法。
【背景技術(shù)】
[0002]航海雷達模擬器是大型船舶操縱模擬器的ー個重要組成部分,在人員培訓(xùn)、科研實驗和教學(xué)等領(lǐng)域有重要應(yīng)用。航海雷達是ー種平面位置顯示器(PlanePositionlndicator, PPI),通過向周圍發(fā)射電磁波,并接收目標反射的回波對目標進行顯示。由于雷達電磁波的頻率很高,在目標尺寸遠大于電磁波波長的情況下,可以使用幾何光學(xué)或物理光學(xué)的原理進行近似。
[0003]傳統(tǒng)的航海雷達模擬器,通過數(shù)字化儀和專用的電子海圖數(shù)字化軟件將紙質(zhì)海圖中的岸線或由符合S-57標準的數(shù)字化海圖提取的岸線數(shù)據(jù)等主要信息經(jīng)預(yù)處理后,生成ASCII字符格式的數(shù)據(jù)文件。然后,使用射線與岸線數(shù)據(jù)求交運算實時生成雷達回波。由于數(shù)據(jù)來源于電子海圖,目標數(shù)據(jù)比較簡單,不能完全體現(xiàn)真實世界中的場景(缺少房屋、碼頭建筑物和山型等信息)。另外,電子海圖是ー種ニ維的平面圖,缺少目標的高度信息,因此不能有效的實現(xiàn)目標之間的遮擋關(guān)系。這是采用ニ維數(shù)據(jù)的主要缺點。
[0004]為了解決采用ニ維數(shù)據(jù)圖像逼真度不高的問題,任鴻翔等人通過載入三維場景庫,實時訪問模型的幾何信息,并利用射線組與場景庫中模型表面的三角形求交來計算回波位置,圖像逼真度有很大改善。由于采用了射線組,并且需要實時進行射線與三角形的求交運算,在場景比較復(fù)雜的情況下,該方法的運用受到了限制。在機載雷達PPI圖像模擬領(lǐng)域,D’Amato等采用射線組與場景多邊形求交的方法來模擬雷達回波圖像,通過大量的簡化場景多邊形來提高繪制速度。前面提到的方法實際上都是ー種簡單的射線跟蹤方法。射線跟蹤方法源于計算機圖形學(xué),卻已被廣泛的應(yīng)用在SAR圖像模擬領(lǐng)域。為了解決射線跟蹤在實時應(yīng)用中的速度問題,Balz采用了一種光柵化的方法對SAR圖像進行實時模擬,避免使用了耗時的射線跟蹤算法。
[0005]現(xiàn)有航海雷達模擬器中PPI圖像生成方法主要存在以下不足:
[0006]I)采用數(shù)字化的電子海圖岸線數(shù)據(jù)。由于雷達與真實世界作用時,真實世界的模型是三維的。采用ニ維的海圖岸線數(shù)據(jù),丟掉了真實世界中的高度信息,并且只采用岸線數(shù)據(jù)也不能體現(xiàn)顯示陸地上的回波。
[0007]2)采用射線與場景求交的方法。射線與場景求交實質(zhì)上是ー種簡單的射線跟蹤算法,它最大的缺點就是耗時較多,尤其是在場景復(fù)雜的情況下,需要對場景模型進行簡化或者減少射線個數(shù),這必將導(dǎo)致圖像的逼真度下降。
[0008]3)圖像的分辨率不高?,F(xiàn)有雷達模擬器采用射線與場景求交的方法生成雷達回波圖像,雷達的距離分辨率和方位分辨率取決于采用的射線數(shù)目,導(dǎo)致最終圖像的分辨率不聞。
[0009]本發(fā)明的參考文獻如下:[0010][I]尹勇,劉秀文,李志華:《采用真雷達顯示器的航海雷達模擬器的關(guān)鍵技木》系統(tǒng)仿真學(xué)報,2007.19 (5):第 1014-1017 頁。
[0011][2]尹勇,金一丞:《頁面更新方式雷達/ARPA模擬器圖像生成的研究》大連海事大學(xué)學(xué)報,1996.22 (4):第 32-39 頁。
[0012][3]任鴻翔,馬海洋與劉彤《船舶操縱模擬器中三維場景庫的雷達圖像模擬》中國航海,2010 (001):第 7-10 頁。
[0013][4]D' Amato, J.P., et al., Real - time aircraft radar simulator for a navytraining system.Computer Applications in Engineering Education, 2010。
[0014][5] Coleman, C.J., Araytracingformulationanditsappl icationtosomeproblemsinover - the - horizonradar.RadioScience, 1998.33(4):p.1187-1197。
[0015][6] Balz, T.andU.Sti I la, Hybr i dGPU-basedsing I e-anddoub I e-bounce SAR simulation.GeoscienceandRemoteSensing, IEEETransactionson,2009.47 (10):p.3519-3529。
[0016][7] Franceschetti, G., etal., SARAS: Asyntheticapertureradar (SAR) rawsignalsimulator.GeoscienceandRemoteSensing, IEEETransactionson, 1992.30(1):p.110-123。
[0017][8]Auer, S., S.HinzandR.Bamler, Ray-tracingsimulationtechniquesfor understandinghigh-resolutionSARimages.GeoscienceandRemoteSensing, IEEE Transactionson, 2010.48(3):p.1445-1456。
[0018][9] Balz, T., Real-timeSARsimulationongraphicsprocessingunits.EUSAR2006, 2006。
【發(fā)明內(nèi)容】
[0019]為解決現(xiàn)有技術(shù)存在的上述問題,本發(fā)明要設(shè)計ー種回波圖像速度快、分辨率高和圖像逼真的航海雷達模擬器PPI圖像的生成方法。
[0020]為了實現(xiàn)上述目的,本發(fā)明的技術(shù)方案如下:ー種航海雷達模擬器PPI圖像的生成方法,包括以下步驟:
[0021]A、讀取港口的三維模型數(shù)據(jù),將模型中的頂點列表塊中的數(shù)據(jù)存儲到頂點數(shù)組中。
[0022]B、調(diào)用微軟開發(fā)庫中的設(shè)置定時器函數(shù)。
[0023]C、響應(yīng)定時器消息
[0024]Cl、使用圖形程序開發(fā)庫OpenGL繪制三維場景,具體繪制步驟如下:
[0025]Cl 1、調(diào)用OpenGL的視點設(shè)置函數(shù);
[0026]C12、調(diào)用OpenGL的旋轉(zhuǎn)函數(shù),旋轉(zhuǎn)場景模型;
[0027]C13、調(diào)用OpenGL的透視投影設(shè)置函數(shù);
[0028]C14、調(diào)用OpenGL的視ロ設(shè)置函數(shù)。
[0029]C2、調(diào)用OpenGL的讀取像素函數(shù),從顯卡的內(nèi)存中讀取場景的深度值并保存到深度數(shù)組中。在繪制圖像的過程中,計算機的顯卡使用Z-Buffer算法對場景進行遮擋判斷,并將場景的深度值實時的保存到顯卡的內(nèi)存中。[0030]C3、將保存的深度值的坐標值轉(zhuǎn)換到視坐標系下。
[0031]C4、根據(jù)轉(zhuǎn)換后的深度值生成雷達回波數(shù)據(jù)。
[0032]C5、根據(jù)生成的雷達回波數(shù)據(jù)繪制雷達PPI圖像。
[0033]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下有益效果:
[0034]1、本發(fā)明采用讀取港口三維模型方法,能夠利用真實世界中的港口、岸線、房屋、碼頭以及山脈等的三維信息,經(jīng)過三維場景的繪制后,生成的深度信息中保留了場景的三維信息,進而生成的雷達回波圖像更加逼真。
[0035]2、本發(fā)明中生成的場景深度信息,由計算機的顯卡使用Z-Buffer算法生成的,速度很快。
[0036]3、本發(fā)明所生成的場景深度信息的寬度和高度,決定了雷達回波數(shù)據(jù)的方位量化數(shù)和距離量化數(shù),通過提高場景深度信息的大小,可以提高雷達回波數(shù)據(jù)的分辨率。
[0037]4、綜上所述,本發(fā)明所設(shè)計的雷達PPI圖像生成方法在繪制的實時性及真實感上優(yōu)于其他方法,采用該方法可以科學(xué)、實時、逼真地繪制大規(guī)模場景的雷達回波圖像。
【專利附圖】
【附圖說明】
[0038]本發(fā)明共有附圖4張,其中:
[0039]圖1是本發(fā)明的流程圖。
[0040]圖2是3ds格式文件的結(jié)構(gòu)示意圖。
[0041]圖3是生成雷達回波數(shù)據(jù)的流程圖。
[0042]圖4是繪制雷達PPI圖像的流程圖。
【具體實施方式】
[0043]下面結(jié)合附圖對本發(fā)明做進ー步詳細地描述。如圖1-4所示,ー種航海雷達模擬器PPI圖像的生成方法,包括以下步驟:
[0044]A、讀取港口的三維模型數(shù)據(jù),將模型中的頂點列表塊中的數(shù)據(jù)存儲到頂點數(shù)組中。
[0045]本發(fā)明能夠讀取3ds格式的三維數(shù)據(jù)。3ds格式文件是Autodesk公司制定的ー種存儲三維數(shù)據(jù)的方式。3ds文件由許多塊(chunk)組成。ー個塊包含ー個或多個子塊。每個塊都包括一個頭部和ー個主體。塊的頭部包含了該塊的標識號和長度信息。塊的主體包含了存儲的數(shù)據(jù)。3ds文件的開頭是主塊,主塊包括了 3d編輯程序塊和關(guān)鍵幀塊,標識號分別為0x3D3D和OxBOOO。3d編輯程序塊又包含了若干其他子塊,其中標識號為0x4110的頂點列表子塊包含了場景的頂點坐標。3ds格式文件的結(jié)構(gòu)如圖2所示。該步驟將標識號為0x4110的子塊中的頂點數(shù)據(jù)讀取到數(shù)組中。
[0046]B、調(diào)用微軟開發(fā)庫中的設(shè)置定時器函數(shù)
[0047]在程序中,使用微軟開發(fā)庫中的定時器函數(shù)
[0048]SetTimer(HWNDhffnd, UINT_PTRnIDEvent, UINTnElapse, TIMERPROClpTimerFunc)設(shè)置定時器。
[0049]參數(shù)hWnd為窗ロ句柄,nIDEvent為定時器標識號,nElapse為定時間隔,IpTimerFunc為回調(diào)函數(shù),這里設(shè)置為常量NULL。將定時器間隔記為AT,単位為毫秒。則A T由下式確定,
[0050]A T*360/ Δ A=T
[0051]其中AA為當(dāng)前場景的水平視場角,單位為度汀為雷達的掃描周期,単位為毫秒。
[0052]C、響應(yīng)定時器消息
[0053]在定時器的消息響應(yīng)函數(shù)中,完成以下幾個步驟:
[0054]Cl、使用OpenGL繪制三維場景,該步驟又包括以下幾個分步驟:
[0055]C11、調(diào)用OpenGL的視點設(shè)置函數(shù)
[0056]使用圖形程序開發(fā)庫OpenGL 的函數(shù) gluLookAt (GLdoubleeyex, GLdouble eyey, GLdoubleeyez, GLdoublecenterxjGLdoublecenteryjGLdoubie centerz, GLdoubleupxjGLdoubleupy,GLdoubleupz)設(shè)置視點參數(shù)。
[0057]參數(shù)(eyex, eyey, eyez)為雷達天線在三維場景中的位置;
[0058]參數(shù)(centerx,centery, centerz)為視線方向,指向 OpenGL 的 y 軸;
[0059]參數(shù)(upx, upy, upz)為視線的向上方向,指向OpenGL的z軸。
[0060]C12、調(diào)用OpenGL的平移函數(shù),平移場景模型
[0061]使用OpenGL 的函數(shù) glTranslatef (GLfloatx, GLfloaty, GLf1atz)平移場景模型。參數(shù)(x,y,z)設(shè)置為(0,-h,0)。h表示雷達天線的高度,単位與場景模型的単位一致。
[0062]C13、調(diào)用OpenGL的旋轉(zhuǎn)函數(shù),旋轉(zhuǎn)場景模型
[0063]使用OpenGL 的函數(shù) glRotatef(GLdoubleangle, GLdoublex, GLdoubley, GLdoublez)旋轉(zhuǎn)場景。
[0064]參數(shù)angle為旋轉(zhuǎn)的角度,在本發(fā)明中代表了雷達的方位;每次旋轉(zhuǎn)angle的值都會増大,有如下關(guān)系:
[0065]angle = (angle+A A) %360(I)
[0066]A A表示當(dāng)前場景的水平視場角,%是C語言中的取余操作。
[0067]參數(shù)(X,y, z)為旋轉(zhuǎn)的中心軸,這里設(shè)置為OpenGL的y軸。
[0068]C14、調(diào)用OpenGL的透視投影設(shè)置函數(shù)
[0069]使用OpenGL 的函數(shù) gluPerspective (GLdoublefovy, GLdouble aspect, GLdoublezNear, GLdoublezFar)設(shè)置投影參數(shù)。
[0070]參數(shù)fovy為當(dāng)前場景的垂直視場角,在本發(fā)明中代表雷達的垂直波束寬度;
[0071]參數(shù)aspect表示當(dāng)前場景的水平視場角與垂直視場角的比值;
[0072]參數(shù)zNear為近裁剪平面的距離,在本發(fā)明中代表雷達的盲區(qū)范圍;
[0073]參數(shù)zFar為遠裁剪平面的距離,在本發(fā)明中代表雷達的最大量程。
[0074]C15、調(diào)用OpenGL的視ロ設(shè)置函數(shù)
[0075]使用OpenGL 的函數(shù) glViewport (GLintx, GLinty, GLsizeiwidth, GLsizeiheight)設(shè)置視ロ大小。
[0076]參數(shù)X,y 取 0 ;
[0077]參數(shù)width為視ロ的寬度,單位為像素,在本發(fā)明中代表當(dāng)前視場角范圍內(nèi)雷達的方位量化數(shù);
[0078]參數(shù)height為視ロ的高度,單位為像素,在本發(fā)明中代表當(dāng)前視場角方位內(nèi)雷達的距離量化數(shù)。[0079]C2、調(diào)用OpenGL的讀取像素函數(shù),讀取場景的深度信息并保存到數(shù)組中
[0080]使用OpenGL 的函數(shù) glReadPixels (GLintx, GLinty, GLsizeiwidth, GLsizei height, GLenumformat, GLenumtype, GLvoid*pixels)讀取當(dāng)前場景的深度緩沖區(qū),并存儲到參數(shù)pixels所指向的內(nèi)存中。
[0081]pixels的定義如下:
[0082]GLfloatpixels[ZBUFFER_X*ZBUFFER_Y];
[0083]這里的常量ZBUFFER_X和ZBUFFER_Y分別等于步驟Cl中第5步的width和height。
[0084]C3、將保存的深度信息的坐標值轉(zhuǎn)換到視坐標系下
[0085]循環(huán)取出深度緩沖區(qū)pixels中的深度值,轉(zhuǎn)換到視坐標系下,并保存到buffer中。轉(zhuǎn)換公式為:
[0086]Zv = d*f/ (f_Zs* (f_d))(2)
[0087]Zs為轉(zhuǎn)換前的深度值,Zv為轉(zhuǎn)換后的深度值,d和f分別表示步驟Cl中的步驟C14近裁剪平面和遠裁剪平面的距離。
[0088]buffer 的定義為:
[0089]doubIebuffer[ZBUFFER_X*ZBUFFER_Y];
[0090]C4、根據(jù)轉(zhuǎn)換后的深度信息生成雷達回波數(shù)據(jù)
[0091]一條方位線上的回波數(shù)據(jù)結(jié)構(gòu)定義為:
[0092]structRADAR_RETURNS
[0093]{
[0094]UINTazimuthnum;
[0095]BYTEdata[TOTAL_RANGE_NUM];
[0096]};
[0097]azimuthnum表示該方位的方位號,范圍是O~AZIMUTH_MAX,代表了 O~360°。AZIMUTH_MAX表示雷達總的方位量化數(shù)。
[0098]數(shù)組data用于保存該方位上回波的強度。
[0099]常量TOTAL_RANGE_NUM表示一條方位上的回波個數(shù),與步驟C3中的height參數(shù)相同。
[0100]當(dāng)前視場角范圍內(nèi)包含了 ZBUFFER_X條的方位數(shù)據(jù),它的定義為:
[0101]RADAR_RETURNSradarReturns[ZBUFFER_X];
[0102]生成雷達回波數(shù)據(jù)的流程圖如圖3所示:
[0103]C41、初始化radarReturns中的數(shù)據(jù)為O ;
[0104]C42、循環(huán)取出buffer中的深度數(shù)據(jù)點buffer [n];
[0105]如果深度值小于雷達當(dāng)前的量程Iiangcheng,則當(dāng)前深度數(shù)據(jù)點所對應(yīng)的回波距離量化號r由下式計算:
[0106]r=(buffer[n]-zNear)*TOTAL_RANGE_NUM/(Iiangcheng-zNear)(3)
[0107]將data[r]的值設(shè)置為255。
[0108]如果深度值大于等于雷達當(dāng)前的量程,則不對數(shù)據(jù)做其他處理。
[0109]C43、計算回波對應(yīng)的方位號[0110]方位號azimuthnum由下式計算:
[0111]azimuthnum = angle*AZMUTH_MAX/360-ZBUFFER_X/2+i(4)
[0112]i = n/ZBUFFER_Y(5)
[0113]angle的含義見步驟Cl的第I步,η表示當(dāng)前循環(huán)的索引號。
[0114]C5、根據(jù)生成的雷達回波數(shù)據(jù)繪制雷達PPI圖像
[0115]循環(huán)取出radarReturns中的回波數(shù)據(jù),轉(zhuǎn)換為直角坐標,并顯示。繪制雷達PPI圖像的方法見圖4。
[0116]首先,初始化外層循環(huán)變量i。循環(huán)取出第i條方位線的方位號賦給變量az。然后,初始化內(nèi)層循環(huán)變量r。循環(huán)取出第i條方位線上的回波數(shù)據(jù),初始化變量m和value。每asp個回波數(shù)據(jù)取最大值,賦給變量value。其中asp表示一條方位上雷達的距離點數(shù)與雷達PPI圖像半徑的比:
[0117]asp=T0TAL_RANGE_NUM/WIDTH_2(6)
[0118]WIDTH_2表示雷達PPI圖像的半徑,單位為像素。
[0119]函數(shù)convert將極坐標的雷達回波數(shù)據(jù),轉(zhuǎn)換為直角坐標。轉(zhuǎn)換公式為:
[0120]rl=r/asp; (7)
[0121]x=cenX+rl*sin(az*PI*2.0/AZIMUTH_MAX);(8)
[0122]y=cenY-rl*cos(az*PI*2.0/AZIMUTH_MAX);(9)
[0123](cenX, cenY)為雷達PPI圖像的中`心點的坐標,rl為當(dāng)前回波在PPI圖像上的距離,常量PI為圓周率,(X,y)為回波的直角坐標。
[0124]函數(shù)drawpixel函數(shù)在(x, y)處繪制雷達回波點,強度為value。
【權(quán)利要求】
1.ー種航海雷達模擬器PPI圖像的生成方法,其特征在于:包括以下步驟: A、讀取港口的三維模型數(shù)據(jù),將模型中的頂點列表塊中的數(shù)據(jù)存儲到頂點數(shù)組中; B、調(diào)用微軟開發(fā)庫中的設(shè)置定時器函數(shù); C、響應(yīng)定時器消息; Cl、使用圖形程序開發(fā)庫OpenGL繪制三維場景,具體繪制步驟如下: Cl 1、調(diào)用OpenGL的視點設(shè)置函數(shù); C12、調(diào)用OpenGL的旋轉(zhuǎn)函數(shù),旋轉(zhuǎn)場景模型; C13、調(diào)用OpenGL的透視投影設(shè)置函數(shù); C14、調(diào)用OpenGL的視ロ設(shè)置函數(shù); C2、調(diào)用OpenGL的讀取像素函數(shù),從計算機的顯卡的內(nèi)存中讀取場景的深度值并保存到深度數(shù)組中;在繪制圖像的過程中,計算機的顯卡使用Z-Buffer算法對場景進行遮擋判斷,并將場景的深度值實時的保存到顯卡的內(nèi)存中; C3、將保存的深度值的坐標值轉(zhuǎn)換到視坐標系下; C4、根據(jù)轉(zhuǎn)換后的深度值生成雷達回波數(shù)據(jù); C5、根據(jù)生成的雷達回波數(shù)據(jù)繪制雷達PPI圖像。
【文檔編號】G06T17/00GK103593871SQ201310581827
【公開日】2014年2月19日 申請日期:2013年11月18日 優(yōu)先權(quán)日:2013年11月18日
【發(fā)明者】王進成, 尹勇, 金一丞, 朱忠顯, 劉春雷, 張秀鳳, 孫霄峰, 神和龍, 劉秀文, 任鴻翔, 高帥, 孫昱浩 申請人:大連海事大學(xué)