華夏等



摘要摘要:論述了圖像校正算法的并行集群實現(xiàn)方法。針對圖像復(fù)原問題,對復(fù)原算法結(jié)構(gòu)與流程的并行處理進(jìn)行研究,提出了整體數(shù)據(jù)傳輸、按行分片計算復(fù)原的并行處理方法。該方法在基于MPI的計算機(jī)并行集群系統(tǒng)中的8個計算節(jié)點上通過了測試,給出了集群校正實驗結(jié)果和MPI并行計算時空圖。實驗結(jié)果表明,基于集群計算的并行復(fù)原方法十分有效,可縮短計算時間,提高計算效率。
關(guān)鍵詞關(guān)鍵詞:圖像復(fù)原;并行處理;MPI;集群計算
DOIDOI:10.11907/rjdk.151061
中圖分類號:TP317.4
文獻(xiàn)標(biāo)識碼:A文章編號
文章編號:16727800(2015)004014203
0引言
退化圖像的快速復(fù)原是成像探測研究的重要課題。傳統(tǒng)的復(fù)原方法是在目標(biāo)圖像點擴(kuò)展函數(shù)確定的情況下,用去卷積的方法來實現(xiàn)圖像復(fù)原。然而,在復(fù)雜條件下,點擴(kuò)展函數(shù)很難測定與預(yù)先獲得[1]。基于極大似然估計準(zhǔn)則的正則化圖像復(fù)原算法利用序列多幀退化圖像數(shù)據(jù),采用極大似然估計方法來尋找最相似于退化圖像的點擴(kuò)展函數(shù)和目標(biāo)圖像,從概率意義上達(dá)到極大程度恢復(fù)圖像的目的[2,3]。由于該復(fù)原算法采用迭代的方式,因此計算量大,計算速度較慢。為了縮短計算時間,加快計算速度,人們對算法的結(jié)構(gòu)優(yōu)化和計算方法進(jìn)行了研究[4],但要將計算負(fù)擔(dān)降低一半以上仍存在困難。因此,對該算法采用高性能并行化處理值得深入研究。
高性能計算技術(shù)在國內(nèi)外受到高度重視,其在科學(xué)研究、工程技術(shù)以及軍事技術(shù)方面的應(yīng)用已取得了巨大成果。目前,利用相對廉價的微機(jī)和高速網(wǎng)絡(luò)構(gòu)建高性能的并行與分布式集群計算系統(tǒng)來完成高性能計算任務(wù)已越來越普遍[5]。集群計算在圖像校正方面有著廣闊的應(yīng)用前景。建立算法并行模型的問題即是解決算法如何并行的問題,如何把單機(jī)運行的圖像處理算法改造成在并行集群上運行的算法。并行計算的目的是充分利用計算集群系統(tǒng)資源,縮短計算時間,提高計算效率。并行計算的實現(xiàn)方法是將一個大計算量的計算任務(wù)分解成多個子任務(wù),分配給各個節(jié)點進(jìn)行并行計算。由于計算上的內(nèi)在關(guān)聯(lián)性,計算節(jié)點之間必須進(jìn)行數(shù)據(jù)交換,然而圖像復(fù)原校正處理中圖像的數(shù)據(jù)量通常較大,所以并行計算不可避免地會引入額外的節(jié)點間的通信時間。額外的通信時間過大,將降低并行計算的運行效率。如果通信時間大于算法并行計算節(jié)省的計算時間,并行集群計算系統(tǒng)運行速度將低于一臺計算機(jī)的運行速度,并行計算則失去了意義。因此,建立算法的并行模型,需要確定算法哪一部分運算需要進(jìn)行并行計算,哪一部分不并行,如何并行處理直接決定著并行計算的運行效率。
建立算法并行模型過程分為3步:①對算法模型與流程進(jìn)行分析,找出算法中運算量最大的幾個計算量或步驟,也即需要并行計算的部分;②對需要并行計算的計算量進(jìn)行分析,找出并行實現(xiàn)的方法;③分析并行計算的可行性,如果計算耗時遠(yuǎn)大于并行計算需要的額外通信耗時,并行計算則是高效和可行的;如果計算耗時小于額外通信耗時,或者與通信耗時相當(dāng),并行計算則是低效的。
MPI(Message Passing Interface)是目前比較流行的并行計算開發(fā)環(huán)境之一。MPI是一個并行計算消息傳遞接口標(biāo)準(zhǔn),其現(xiàn)已成為被產(chǎn)業(yè)界廣泛支持的并行計算標(biāo)準(zhǔn),具有可移植性,因此選擇MPI來構(gòu)建并行校正計算系統(tǒng)。
1基于空間域按行分片的并行計算處理方法
流場點擴(kuò)展函數(shù)具有衰減性質(zhì),有意義的支撐區(qū)域(其值大于零)集中在峰值附近[6]。點擴(kuò)展函數(shù)的支撐區(qū)域一般比圖像的支撐區(qū)域小得多。因此,對點擴(kuò)展函數(shù)而言,只需要估計點擴(kuò)展函數(shù)空間支撐域范圍內(nèi)的有效值。
由復(fù)原校正算法可知,若圖像大小為N×N,點擴(kuò)展函數(shù)支撐域為M×M,則在每次迭代中,計算點擴(kuò)展函數(shù)和目標(biāo)圖像的加法和乘法運算量正比于N2M2,在圖像空間域進(jìn)行計算時,計算工作量較大,圖像恢復(fù)較慢。為了縮短計算時間,加快計算速度,有必要對基于EM計算的最大似然估計復(fù)原校正算法(簡稱EM算法)進(jìn)行并行化處理。
從算法流程可知,EM算法是一個多次迭代過程,每一次迭代過程都包含多個計算步驟。因此沒有必要把每一個計算步驟都并行化,因為并不是每個計算步驟都需要并行化,對計算量過小的計算步驟并行化,引入的通信時間會大于并行計算節(jié)省的計算時間,反而會降低算法運行速度。所以,只需選取計算量較大的計算步驟進(jìn)行并行化,計算量小的部分在根節(jié)點上單機(jī)計算,在實現(xiàn)并行計算的同時達(dá)到減少節(jié)點間通信量的目的。
對單機(jī)上運行的串行EM算法每一次迭代過程中的各個步驟計算時間進(jìn)行了記錄。從單機(jī)運行的時間結(jié)果來看,一次迭代過程中a、b、c三個計算步驟(見表1)用時占一次迭代計算總時間的99%以上,只要把這三個計算步驟進(jìn)行并行化,則可以大大降低計算耗時。其它幾個步驟計算量較低,沒必要分配到各節(jié)點進(jìn)行并行計算,否則節(jié)點間的數(shù)據(jù)通信和計算同步需要的時間可能會大于3ms,反而降低計算速度。所以,現(xiàn)將a、b、c三個計算步驟分配到各個節(jié)點上進(jìn)行并行計算,其它步驟在根節(jié)點(進(jìn)程號為0的節(jié)點)上用單機(jī)計算。
并行計算即把計算任務(wù)分配到各個計算節(jié)點上,a、b、c三個計算步驟需并行處理的計算值ik、hk及Ux,均可看成具有M行和N列的二維圖像(見圖1)。由于每一塊的計算涉及到整體圖像數(shù)據(jù),所以提出整體數(shù)據(jù)傳輸、分塊計算復(fù)原的并行處理方法:即將整個圖像數(shù)據(jù)傳輸?shù)矫恳粋€計算節(jié)點上,在每一個節(jié)點上計算每一塊的數(shù)據(jù)值,然后傳回到根節(jié)點上,再整體傳輸?shù)礁鞴?jié)點上進(jìn)行分塊計算,直至計算結(jié)束為止。采用的分配方法是細(xì)粒度任務(wù)劃分方法,把圖像分成若干個子塊圖像并按行存放,為便于分片并行計算處理,按行對圖像進(jìn)行分配計算。把整個圖像根據(jù)并行計算節(jié)點數(shù)量按行平均分為n個子塊圖像,計算任務(wù)分配如圖1所示。按行分片,每個子塊圖像的計算在同一個計算節(jié)點上進(jìn)行,不同子塊圖像計算在不同計算節(jié)點上進(jìn)行。具體方法如圖2所示。
2基于MPI環(huán)境的并行計算與實現(xiàn)
利用內(nèi)部局域網(wǎng)把各臺獨立的計算機(jī)連接起來組成一個并行計算集群。集群系統(tǒng)采用并行計算方法,把圖像處理中計算量大的計算任務(wù)分解成各個子任務(wù),然后分配給各個節(jié)點進(jìn)行并行計算。由于計算上的內(nèi)在關(guān)聯(lián)性,節(jié)點之間必然存在數(shù)據(jù)交換,而由于圖像的數(shù)據(jù)量相當(dāng)大,內(nèi)部網(wǎng)絡(luò)傳輸數(shù)據(jù)的速率是整個系統(tǒng)計算速度的瓶頸。盡量高的傳輸帶寬和盡量低的傳輸延時 (Latency)是圖像處理集群系統(tǒng)高并行效率的基本要求[7]。因此,采用千兆光纖網(wǎng)絡(luò)來傳輸內(nèi)部網(wǎng)絡(luò)數(shù)據(jù)。
MPI并行計算進(jìn)程必須由mpirun命令啟動[7],mpirun命令只支持以命令提示符的方式啟動并行計算進(jìn)程。因此,無法在軟件的主界面中調(diào)用MPI函數(shù),只能通過命令行調(diào)用mpirun命令啟動并行計算進(jìn)程。主程序和MPI并行計算程序是兩個獨立的進(jìn)程,各個進(jìn)程的存儲區(qū)獨立,進(jìn)程與進(jìn)程之間不能直接傳遞數(shù)據(jù)。并行計算輸入?yún)?shù)和輸入圖像的傳遞利用共享內(nèi)存映射方法實現(xiàn)。建立共享內(nèi)存映射即建立一段共享內(nèi)存,該內(nèi)存不屬于某個進(jìn)程獨有,每個進(jìn)程都可以通過這段內(nèi)存的名字來訪問它。在MFC中CreateFileMapping函數(shù)可用來建立一段內(nèi)存映射。主進(jìn)程創(chuàng)建了共享內(nèi)存以后,MPI進(jìn)程和主進(jìn)程都可以使用這段內(nèi)存空間,主進(jìn)程首先把并行計算需要的參數(shù)和輸入圖像都拷貝到共享內(nèi)存空間,然后啟動MPI進(jìn)程進(jìn)行并行計算,MPI進(jìn)程計算完畢后仍然把計算結(jié)果圖像拷貝到這段共享內(nèi)存,主程序讀取共享內(nèi)存后將其釋放。通過這個過程完成了算法的MPI并行計算。
Windows提供了程序調(diào)用命令,可以在一個進(jìn)程中創(chuàng)建另一個進(jìn)程。程序調(diào)用命令為:int system( const char *command ),其中command即為要調(diào)用的程序及參數(shù)。在軟件系統(tǒng)中編制程序代碼啟動MPI命令,調(diào)用并行計算命令,啟動并行程序。EM算法的MPI并行程序名稱設(shè)為EMRec_MPI.exe,該文件和應(yīng)用程序存放在一個目錄下,用GetModuleFileName命令獲得當(dāng)前應(yīng)用程序所在路徑,即可得到并行程序所在路徑。在mpirun命令中,使用了-np與-localroot參數(shù)。變量nodeNum指定參與并行計算節(jié)點的數(shù)目,該變量由用戶通過校正軟件人機(jī)交互界面設(shè)置。現(xiàn)使用默認(rèn)節(jié)點設(shè)置,參與計算的節(jié)點在圖像校正軟件系統(tǒng)啟動之前配置完成。
圖像復(fù)原軟件系統(tǒng)主程序進(jìn)程和圖像恢復(fù)并行計算程序進(jìn)程是兩個獨立的進(jìn)程,各個進(jìn)程的存儲區(qū)獨立,進(jìn)程和進(jìn)程之間不能直接通過變量或內(nèi)存地址的方式傳遞數(shù)據(jù)。用共享內(nèi)存文件映射的方法實現(xiàn)主進(jìn)程和并行計算進(jìn)程間的數(shù)據(jù)傳遞。共享內(nèi)存文件由某一個進(jìn)程創(chuàng)建,該文件映射對象的內(nèi)容能夠為多個其它進(jìn)程所映射,這些進(jìn)程共享的是物理存儲器的同一個頁面。因此,當(dāng)一個進(jìn)程將數(shù)據(jù)寫入此共享文件映射對象的內(nèi)容時,其它進(jìn)程可以立即獲取數(shù)據(jù)變更情況。
首先,主進(jìn)程通過CreateFileMapping()函數(shù)創(chuàng)建一個內(nèi)存映射文件對象,并把該文件對象命名為EM_rec_mem,在并行計算進(jìn)程中,即可通過這個名字找到該內(nèi)存文件。如果創(chuàng)建成功,則通過MapViewOfFile()函數(shù)將此文件映射對象的視圖映射到地址空間,同時得到此映射視圖的首地址。首先,計算需要創(chuàng)建的內(nèi)存文件大小。其中40個為頭信息,并保存算法的輸入?yún)?shù)等信息。內(nèi)存文件創(chuàng)建成功以后,把輸入數(shù)據(jù),包括圖像恢復(fù)參數(shù)、輸入圖像幀數(shù),擴(kuò)展函數(shù)行、列數(shù),迭代次數(shù)、多幀輸入圖像數(shù)據(jù)等,寫入共享文件內(nèi)存。完成了初始化工作,即可調(diào)用并行計算程序。并行計算進(jìn)程由mpirun命令啟動以后,首先用CreateFileMapping()函數(shù)創(chuàng)建一個名稱為EM_rec_mem的內(nèi)存文件,然后獲得輸入數(shù)據(jù),并把輸入數(shù)據(jù)用MPI_Bcast的方法廣播到各個計算節(jié)點上的進(jìn)程,開始并行計算。并行計算完成后把處理結(jié)果寫入共享內(nèi)存文件,完成算法的MPI并行計算。
3實驗結(jié)果與分析
實驗以空間域按行分片復(fù)原算法為基礎(chǔ),引入并行計算,用VC6.0編程進(jìn)行實現(xiàn)。將并行系統(tǒng)校正方法在計算機(jī)并行集群系統(tǒng)(微機(jī)主要配置均為CPU Intel Pentium IV,2.66 GHz,1024 MB內(nèi)存)上運行。以紅外直升機(jī)目標(biāo)圖像的并行集群校正為例,下面給出在該并行集群系統(tǒng)運行通過的兩個并行校正實驗結(jié)果。3幀退化圖像如圖3所示,為便于對比,分別采用1~8個節(jié)點進(jìn)行并行復(fù)原校正,其中迭代次數(shù)均為80次。不同節(jié)點復(fù)原圖像如圖4所示,當(dāng)節(jié)點數(shù)設(shè)置不同時,由從輸入相同的模糊圖像中復(fù)原出來的結(jié)果圖像相同,說明各個節(jié)點并不改變算法參數(shù)和圖像數(shù)據(jù),只參與并行計算,以提高計算效率。不同節(jié)點數(shù)耗費時間對比見表2。由表2可知,隨著節(jié)點數(shù)增加,計算耗時幾乎成比例地減少,這是由于各個節(jié)點平均分擔(dān)了計算任務(wù)。不同節(jié)點數(shù)并行運算的時空圖如圖5所示,其中橫向細(xì)實線寬度表示計算所用時間,橫向塊寬度表示數(shù)據(jù)傳輸及廣播所用時間。分析時空圖可知,節(jié)點之間數(shù)據(jù)通信所耗費的時間相對于整個計算時間較短。但隨著節(jié)點數(shù)目增加,通信量增多,數(shù)據(jù)通信耗費時間增加。因此,節(jié)點數(shù)并不是越多越好,當(dāng)節(jié)點數(shù)目達(dá)到一定數(shù)量(8節(jié)點)時,復(fù)原算法耗費時間將達(dá)到穩(wěn)定。
4結(jié)語
針對圖像校正算法迭代次數(shù)多、耗時長等問題,為提高計算效率,本文引入了并行集群計算。對復(fù)原校正算法的結(jié)構(gòu)與流程進(jìn)行了研究,提出了整體數(shù)據(jù)傳輸、按行分片計算復(fù)原的并行處理方法,有效解決了校正算法的并行集群處理問題。并行集群實驗計算結(jié)果表明,本文提出的并行方法十分有效,可縮短計算時間,提高計算效率。通過研究了解圖像處理算法MPI并行化方法,實現(xiàn)了基于MPI的并行計算集群,解決了MPI并行程序與Windows窗口的集成連接問題,建立了一個并行計算圖像校正軟件平臺。由此證實MPI并行計算在氣動光學(xué)效應(yīng)圖像校正處理中具有實用價值。
參考文獻(xiàn)參考文獻(xiàn):
[1]張?zhí)煨颍闈h玉,張新宇.氣動光學(xué)效應(yīng)校正[M].合肥:中國科學(xué)技術(shù)大學(xué)出版社,2013.
[2]洪漢玉,張?zhí)煨颍鄧?航天湍流退化圖像的極大似然估計規(guī)整化復(fù)原算法[J].紅外與毫米波學(xué)報,2005,24(2):130134.
[3]洪漢玉,張?zhí)煨颍鄧?基于Poisson模型的湍流退化圖像多幀迭代復(fù)原算法[J].宇航學(xué)報,2004,25(6):649654.
[4]洪漢玉,王進(jìn),張?zhí)煨颍?紅外目標(biāo)圖像循環(huán)迭代復(fù)原算法的加速技術(shù)研究[J].紅外與毫米波學(xué)報,2008,27(1):433436.
[5]都志輝.高性能計算之并行編程技術(shù)—MPI并行程序設(shè)計[M].北京:清華大學(xué)出版社,2001.
[6]J G NAGY,R J PLEMMONS,T C TORGERSEN.Iterative image RESToration using approximate inverse preconditioning[J].IEEE Trans.on Image Processing,1996,5(7):11511162
[7]呂捷.并行與分布式圖像處理系統(tǒng)的實現(xiàn)與應(yīng)用[D].武漢:華中科技大學(xué),2004.
責(zé)任編輯(責(zé)任編輯:黃健)