本發(fā)明涉及科學(xué)計(jì)算可視化技術(shù)領(lǐng)域,特別是涉及一種基于Hadoop和CUDA的光線投射可視化多用戶交互處理方法。
背景技術(shù):
隨著MRI、PET、CT等現(xiàn)代醫(yī)療設(shè)備應(yīng)用的快速發(fā)展,三維醫(yī)學(xué)可視化已經(jīng)廣泛應(yīng)用于醫(yī)學(xué)診斷、輔助治療、手術(shù)規(guī)劃等領(lǐng)域。三維醫(yī)學(xué)可視化體繪制技術(shù)因?yàn)槠淞己玫摹氨U嫘浴?,具有很好的?yīng)用價(jià)值與前景。但隨著醫(yī)學(xué)數(shù)字圖像精度和分辨率的顯著提高,醫(yī)學(xué)影像數(shù)據(jù)量快速增加,其超大規(guī)模的醫(yī)學(xué)影像數(shù)據(jù)和超大計(jì)算量成為了計(jì)算機(jī)實(shí)現(xiàn)三維醫(yī)學(xué)體繪制的瓶頸。目前,為了滿足大規(guī)模的醫(yī)學(xué)影像數(shù)據(jù)體繪制的超大計(jì)算量、多用戶交互需要,近年來的研究主要集中于并行體繪制、基于GPU的硬件加速和GPU嵌入MapReduce的高效并行計(jì)算等幾方面。S.Eilemann等通過設(shè)計(jì)并行體繪制來滿足快速繪制的要求。南方醫(yī)科大學(xué)生物醫(yī)學(xué)工程學(xué)院董現(xiàn)玲等和浙江工業(yè)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院秦緒佳等設(shè)計(jì)的基于CUDA(Compute Unified Device Architecture)技術(shù)進(jìn)行數(shù)據(jù)的存儲(chǔ)和處理,實(shí)現(xiàn)了并行化的Ray-casting算法。Vo H T等設(shè)計(jì)的基于MapReduce的計(jì)算框架,實(shí)現(xiàn)了基于MapReduce的z-buffer繪制、并行網(wǎng)格簡化以及等值面抽取等基礎(chǔ)圖形學(xué)算法。
雖然上述幾種方法都達(dá)到了一定加速繪制效果,但均有一定的不足和缺點(diǎn),例如:單一的CUDA處理,必須依靠NVIDIA顯卡硬件提供支持,增加成本,并且單機(jī)繪制對(duì)速度提升有限;另外,大量重復(fù)數(shù)據(jù)的計(jì)算也增加了系統(tǒng)處理負(fù)擔(dān),浪費(fèi)系統(tǒng)資源。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提出一種基于Hadoop和CUDA的光線投射可視化多用戶交互處理方法,能夠快速、高效的實(shí)現(xiàn)三維可視化成像。
為了實(shí)現(xiàn)上述目的,本發(fā)明采用如下技術(shù)方案:
一種基于Hadoop和CUDA的光線投射可視化多用戶交互處理方法,包括如下步驟:
步驟1:不同用戶在本地處理前,需先獲取繪制圖像的數(shù)據(jù)信息;
其中,圖像的數(shù)據(jù)包括如下參數(shù):查詢重復(fù)標(biāo)識(shí)CX、切片數(shù)C、開始編號(hào)D、結(jié)束編號(hào)E、視線方向F、視點(diǎn)位置G、生成圖像寬W、生成圖像高H、重復(fù)類型CTYPE、重復(fù)切片數(shù)量CC、重復(fù)開始編號(hào)CD、重復(fù)結(jié)束編號(hào)CE和數(shù)據(jù)DATA;
步驟2:集群服務(wù)器master機(jī)器獲取圖像的數(shù)據(jù),然后將該圖像的數(shù)據(jù)與master機(jī)器中避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)比對(duì),查詢集群服務(wù)器是否有需要計(jì)算的數(shù)據(jù)結(jié)果;
其中,避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)包括如下參數(shù):開始編號(hào)X、結(jié)束編號(hào)Y、視線方向L、視點(diǎn)位置M、使用次數(shù)N、時(shí)間T、禁替換標(biāo)識(shí)NOREP和數(shù)據(jù)DATA0;
步驟2.1:判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果;
若:判斷結(jié)果是有重復(fù)數(shù)據(jù),則設(shè)置重復(fù)類型CTYPE為部分重復(fù),數(shù)值為1,禁替換標(biāo)識(shí)NOREP值加1,并執(zhí)行步驟2.2;
或判斷結(jié)果是無重復(fù)數(shù)據(jù),則執(zhí)行步驟3;
步驟2.2:判斷數(shù)據(jù)結(jié)果是否為完全重復(fù);
若:判斷結(jié)果是完全重復(fù),則重復(fù)類型CTYPE為完全重復(fù),數(shù)值為2,并執(zhí)行步驟11;
或判斷結(jié)果是部分重復(fù),則執(zhí)行步驟3;
步驟3:讀取對(duì)應(yīng)不重復(fù)圖像切片,建立三維數(shù)據(jù)場(chǎng);
步驟4:使用AABB包圍盒對(duì)三維數(shù)據(jù)場(chǎng)無效體素進(jìn)行裁剪;
步驟5:使用NVIDIA CUDA對(duì)梯度進(jìn)行處理;
步驟6:將處理完的數(shù)據(jù)傳輸至集群服務(wù)器master機(jī)器;
其中,處理完的數(shù)據(jù)包括如下參數(shù):查詢重復(fù)標(biāo)識(shí)cx、切片數(shù)c、開始編號(hào)d、結(jié)束編號(hào)e、視線方向f、視點(diǎn)位置g、生成圖像寬w、生成圖像高h(yuǎn)、重復(fù)類型ctype、重復(fù)切片數(shù)量cc、重復(fù)開始編號(hào)cd、重復(fù)結(jié)束編號(hào)ce和數(shù)據(jù)data;
步驟7:將接收到的步驟6中的數(shù)據(jù)與master機(jī)器中避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)進(jìn)行對(duì)比,查詢集群服務(wù)器中是否有接收到數(shù)據(jù)的計(jì)算結(jié)果;
其中,避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)包括如下參數(shù):開始編號(hào)x、結(jié)束編號(hào)y、視線方向l、視點(diǎn)位置m、使用次數(shù)n、時(shí)間t、禁替換標(biāo)識(shí)norep和數(shù)據(jù)data0;
步驟7.1:判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果;
若:判斷結(jié)果是有重復(fù)數(shù)據(jù),則讀取對(duì)應(yīng)存儲(chǔ)的重復(fù)數(shù)據(jù)data0,禁替換標(biāo)識(shí)norep減1,執(zhí)行步驟7.2;
或判斷結(jié)果是不含重復(fù)數(shù)數(shù)據(jù),則執(zhí)行步驟8;
步驟7.2:判斷數(shù)據(jù)結(jié)果是否為完全重復(fù);
若:判斷結(jié)果是完全重復(fù),此時(shí)將完全重復(fù)數(shù)據(jù)存入數(shù)據(jù)data,禁替換標(biāo)識(shí)norep減1,則執(zhí)行步驟11;
或判斷結(jié)果是部分重復(fù),則執(zhí)行步驟8;
步驟8:集群mapreduce并行計(jì)算處理;
步驟8.1:需要處理的不重復(fù)數(shù)據(jù)data上傳至HDFS;
步驟8.2:master機(jī)器將數(shù)據(jù)以分片方式劃分成多個(gè)子數(shù)據(jù)分發(fā)到各slave機(jī)器處理;
步驟8.3:各slave機(jī)器分別處理光線合成和重采樣任務(wù),保存生成結(jié)果;
步驟8.4:從HDFS下載生成結(jié)果讀取至master機(jī)器內(nèi)存;
步驟9:判斷有無數(shù)據(jù)合并;
若:判斷結(jié)果是有數(shù)據(jù)合并,則重復(fù)數(shù)據(jù)data0與生成結(jié)果合成為最終結(jié)果;
或判斷結(jié)果是沒有數(shù)據(jù)合并,則執(zhí)行步驟10;
步驟10:采用最近最久未使用原則對(duì)重復(fù)數(shù)據(jù)data0進(jìn)行替換;
步驟11:將數(shù)據(jù)data傳回用戶;
步驟12:輸出顯示生成的二維圖像;
步驟13:判斷是否切換視線方向f;
若:判斷結(jié)果是切換視線方向,則執(zhí)行步驟2;
或判斷結(jié)果是不切換視線方向,則結(jié)束。
優(yōu)選地,在步驟2.1中,判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果的具體過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)D≤開始編號(hào)X<結(jié)束編號(hào)Y≤結(jié)束編號(hào)E、視線方向F=視線方向L、視點(diǎn)位置G=視點(diǎn)位置M,即含有重復(fù)數(shù)據(jù);否則,判斷為無重復(fù)數(shù)據(jù);
在步驟2.2中,判斷集群中數(shù)據(jù)結(jié)果是否為完全重復(fù)的具體過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)D=開始編號(hào)X、結(jié)束編號(hào)Y=結(jié)束編號(hào)E、視線方向F=視線方向L、視點(diǎn)位置G=視點(diǎn)位置M,即完全重復(fù);否則,判斷為部分重復(fù)。
優(yōu)選地,在步驟5中,具體包括:
步驟5.1:申請(qǐng)GPU顯存空間cuinArray、cuoutArray;其中,顯存空間cuinArray用于存放傳入數(shù)據(jù),顯存空間cuoutArray用于存儲(chǔ)生成的傳出數(shù)據(jù);
步驟5.2:將裁剪后的三維數(shù)據(jù)場(chǎng)拷貝至GPU顯存空間cuinArray;
步驟5.3:使用紋理存儲(chǔ)器將顯存空間cuinArray內(nèi)的數(shù)據(jù)與3d texture紋理綁定;
步驟5.4:Kernel函數(shù)中進(jìn)行多線程數(shù)據(jù)處理,計(jì)算各像素點(diǎn)梯度值greyxyz,計(jì)算處理完后將結(jié)果存至GPU顯存空間cuoutArray;
步驟5.5:將GPU顯存空間cuoutArray內(nèi)的數(shù)據(jù)拷貝至主機(jī)內(nèi)存,解除紋理綁定,釋放占用的顯存空間cuinArray、cuoutArray。
優(yōu)選地,在步驟7.1中,判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果的具體過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)d≤開始編號(hào)x<結(jié)束編號(hào)y≤結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,即含有重復(fù)數(shù)據(jù);否則,判斷為無重復(fù)數(shù)據(jù);
在步驟7.2中,判斷集群中數(shù)據(jù)結(jié)果是否為完全重復(fù)的具體過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)d=開始編號(hào)x、結(jié)束編號(hào)y=結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,即完全重復(fù);否則,判斷為部分重復(fù)。
優(yōu)選地,在步驟9中,有無數(shù)據(jù)合并的具體判斷過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)d<開始編號(hào)x<結(jié)束編號(hào)y<結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,判斷為有數(shù)據(jù)合并;否則,判斷為沒有數(shù)據(jù)合并。
與現(xiàn)有技術(shù)相比,本發(fā)明方法具有如下優(yōu)點(diǎn):
本發(fā)明方法一方面使用Hadoop MapReduce和NVIDIA CUDA的并行處理能力,進(jìn)行加速繪制,另一方面,針對(duì)多用戶交互環(huán)境,設(shè)計(jì)了一種避免重復(fù)計(jì)算的方法,減少重復(fù)計(jì)算耗時(shí)。本發(fā)明方法實(shí)現(xiàn)了對(duì)各像素點(diǎn)梯度、光線重采樣和數(shù)據(jù)合成的快速運(yùn)算。
附圖說明
圖1為本發(fā)明中基于Hadoop和CUDA的光線投射可視化多用戶交互處理方法的流程圖。
圖2為本發(fā)明中數(shù)據(jù)集的部分切片圖。
圖3為本發(fā)明中三維數(shù)據(jù)場(chǎng)原始部分的數(shù)據(jù)截圖。
圖4為本發(fā)明中使用AABB包圍盒對(duì)三維數(shù)據(jù)場(chǎng)進(jìn)行裁剪的示意圖。
圖5為本發(fā)明中使用NVIDIA CUDA對(duì)梯度計(jì)算后的部分截圖。
圖6為本發(fā)明中光線采樣合成后的部分?jǐn)?shù)據(jù)截圖。
圖7為使用本發(fā)明方法生成的頭骨骨骼圖像。
圖8為使用本發(fā)明方法生成的頭骨表皮圖像。
圖9為圖1中流程圖的A部區(qū)域放大圖。
圖10為圖1中流程圖的B部區(qū)域放大圖。
圖11為圖1中流程圖的C部區(qū)域放大圖。
圖12為圖1中流程圖的D部區(qū)域放大圖。
圖13為圖1中流程圖的E部區(qū)域放大圖。
具體實(shí)施方式
下面結(jié)合附圖以及具體實(shí)施方式對(duì)本發(fā)明作進(jìn)一步詳細(xì)說明:
如圖1所示,一種基于Hadoop和CUDA的光線投射可視化多用戶交互處理方法,包括如下步驟:
步驟1:不同用戶在本地處理前,需先獲取繪制圖像的數(shù)據(jù)cxdata信息。
其中,圖像的數(shù)據(jù)cxdata包括如下參數(shù):查詢重復(fù)標(biāo)識(shí)CX、切片數(shù)C、開始編號(hào)D、結(jié)束編號(hào)E、視線方向F、視點(diǎn)位置G、生成圖像寬W、生成圖像高H、重復(fù)類型CTYPE、重復(fù)切片數(shù)量CC、重復(fù)開始編號(hào)CD、重復(fù)結(jié)束編號(hào)CE和數(shù)據(jù)DATA。
步驟2:集群服務(wù)器master機(jī)器獲取圖像的數(shù)據(jù)cxdata,然后將數(shù)據(jù)cxdata與master機(jī)器中避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)比對(duì),查詢集群服務(wù)器是否有需要計(jì)算的數(shù)據(jù)結(jié)果。
其中,避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)ComposedResult包括如下參數(shù):開始編號(hào)X、結(jié)束編號(hào)Y、視線方向L、視點(diǎn)位置M、使用次數(shù)N、時(shí)間T、禁替換標(biāo)識(shí)NOREP和數(shù)據(jù)DATA0。
步驟2.1:判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果,具體判斷過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)D≤開始編號(hào)X<結(jié)束編號(hào)Y≤結(jié)束編號(hào)E、視線方向F=視線方向L、視點(diǎn)位置G=視點(diǎn)位置M,即含有重復(fù)數(shù)據(jù);否則,判斷為無重復(fù)數(shù)據(jù)。
經(jīng)過判斷,若:判斷結(jié)果是有重復(fù)數(shù)據(jù),則設(shè)置重復(fù)類型CTYPE為部分重復(fù),數(shù)值為1,禁替換標(biāo)識(shí)NOREP值加1,并執(zhí)行步驟2.2;
或判斷結(jié)果是無重復(fù)數(shù)據(jù),則執(zhí)行步驟3。
步驟2.2:判斷數(shù)據(jù)結(jié)果是否為完全重復(fù),具體判斷過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)D=開始編號(hào)X、結(jié)束編號(hào)Y=結(jié)束編號(hào)E、視線方向F=視線方向L、視點(diǎn)位置G=視點(diǎn)位置M,即完全重復(fù);否則,判斷為部分重復(fù)。
經(jīng)過判斷,若:判斷結(jié)果是完全重復(fù),則重復(fù)類型CTYPE為完全重復(fù),數(shù)值為2,并執(zhí)行步驟11;
或判斷結(jié)果是部分重復(fù),則執(zhí)行步驟3。
步驟3:讀取Visible Human數(shù)據(jù)集中頭部CT切片圖像,數(shù)據(jù)集部分切片圖的圖像如圖2所示,建立三維數(shù)據(jù)場(chǎng)pDataField。
步驟4:使用AABB包圍盒對(duì)三維數(shù)據(jù)場(chǎng)pDataField無效體素進(jìn)行裁剪,裁剪后每張切片從587*341減為303*287,原始部分?jǐn)?shù)據(jù)如圖3所示,裁剪示意圖如圖4所示。
步驟5:使用NVIDIA CUDA對(duì)梯度進(jìn)行處理,部分結(jié)果數(shù)據(jù)圖如圖5所示。
該步驟5具體包括:
步驟5.1:申請(qǐng)GPU顯存空間cuinArray、cuoutArray;其中,顯存空間cuinArray用于存放傳入數(shù)據(jù),顯存空間cuoutArray用于存儲(chǔ)生成的傳出數(shù)據(jù)。
步驟5.2:將裁剪后的三維數(shù)據(jù)場(chǎng)pDataField使用cudaMemcpy3D拷貝至GPU顯存空間cuinArray。
步驟5.3:使用紋理存儲(chǔ)器將顯存空間cuinArray內(nèi)的數(shù)據(jù)與3d texture紋理使用cudaBindTextureToArray()函數(shù)綁定,紋理坐標(biāo)方式為非歸一化,紋理尋址方式為cudaAddressModeClamp。
步驟5.4:Kernel函數(shù)中進(jìn)行多線程數(shù)據(jù)處理,計(jì)算各像素點(diǎn)梯度值greyxyz,計(jì)算處理完后將結(jié)果存至GPU顯存空間cuoutArray。
kernel函數(shù)中進(jìn)行多線程數(shù)據(jù)處理,使用tex3D(texRef,x,y,z)拾取紋理,x、y、z為紋理拾取坐標(biāo),采用中心差分方法計(jì)算各像素點(diǎn)梯度值,對(duì)體素voxel(i,j,k),計(jì)算公式為:
式中,f(i,j,k)為體素voxel(i,j,k)處的灰度值,Δs為一特定常量。
步驟5.5:將GPU顯存空間cuoutArray內(nèi)的數(shù)據(jù)拷貝至主機(jī)內(nèi)存,解除紋理綁定,釋放占用的顯存空間cuinArray、cuoutArray。
步驟6:將處理完的數(shù)據(jù)傳輸至集群服務(wù)器master機(jī)器。
其中,處理完的數(shù)據(jù)包括如下參數(shù):查詢重復(fù)標(biāo)識(shí)cx、切片數(shù)c、開始編號(hào)d、結(jié)束編號(hào)e、視線方向f、視點(diǎn)位置g、生成圖像寬w、生成圖像高h(yuǎn)、重復(fù)類型ctype、重復(fù)切片數(shù)量cc、重復(fù)開始編號(hào)cd、重復(fù)結(jié)束編號(hào)ce和數(shù)據(jù)data。
步驟7:將接收到的步驟6中的數(shù)據(jù)與master機(jī)器中避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)進(jìn)行對(duì)比,查詢集群服務(wù)器中是否有接收到數(shù)據(jù)的計(jì)算結(jié)果。
其中,避免重復(fù)計(jì)算存儲(chǔ)的數(shù)據(jù)ComposedResult包括如下參數(shù):開始編號(hào)x、結(jié)束編號(hào)y、視線方向l、視點(diǎn)位置m、使用次數(shù)n、時(shí)間t、禁替換標(biāo)識(shí)norep和數(shù)據(jù)data0。
步驟7.1:判斷集群中有無重復(fù)數(shù)據(jù)結(jié)果,具體判斷過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)d≤開始編號(hào)x<結(jié)束編號(hào)y≤結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,即含有重復(fù)數(shù)據(jù);否則,判斷為無重復(fù)數(shù)據(jù)。
經(jīng)過判斷,若:判斷結(jié)果是有重復(fù)數(shù)據(jù),則讀取對(duì)應(yīng)存儲(chǔ)的重復(fù)數(shù)據(jù)data0,禁替換標(biāo)識(shí)norep減1,執(zhí)行步驟7.2;
或判斷結(jié)果是不含重復(fù)數(shù)數(shù)據(jù),則執(zhí)行步驟8。
步驟7.2:判斷數(shù)據(jù)結(jié)果是否為完全重復(fù),具體判斷過程如下:
若同時(shí)滿足以下條件,即:開始編號(hào)d=開始編號(hào)x、結(jié)束編號(hào)y=結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,即完全重復(fù);否則,判斷為部分重復(fù)。
經(jīng)過判斷,若:判斷結(jié)果是完全重復(fù),此時(shí)將完全重復(fù)數(shù)據(jù)存入數(shù)據(jù)data,禁替換標(biāo)識(shí)norep減1,則執(zhí)行步驟11;
或判斷結(jié)果是部分重復(fù),則執(zhí)行步驟8。
步驟8:集群mapreduce并行計(jì)算處理,采樣合成后部分?jǐn)?shù)據(jù)如圖6所示。
該步驟8具體包括:
步驟8.1:需要處理的不重復(fù)數(shù)據(jù)data上傳至HDFS。
步驟8.2:master機(jī)器將數(shù)據(jù)以分片方式劃分成多個(gè)子數(shù)據(jù)分發(fā)到各slave機(jī)器處理。
每個(gè)子數(shù)據(jù)都含有起始采樣點(diǎn)、采樣間距和圖像中對(duì)應(yīng)像素坐標(biāo)等信息,每個(gè)子節(jié)點(diǎn)對(duì)應(yīng)一個(gè)子任務(wù),子任務(wù)分配給不同的slave機(jī)器節(jié)點(diǎn)進(jìn)行光線合成和重采樣計(jì)算處理,最后進(jìn)行圖像合成。作業(yè)調(diào)度機(jī)制設(shè)置為公平調(diào)度,使提交的作業(yè)均能獲取計(jì)算資源,讓不同用戶公平地共享集群,避免長時(shí)間等待。
步驟8.3:各slave機(jī)器,例如圖1中Slave1、Slave2、Slave3分別處理光線合成和重采樣任務(wù),保存生成結(jié)果dataout1。
光線合成采用從后向前,計(jì)算公式:Cout(i)=Cin(i)*(1-Anow(i))+Cnow(i)*Anow(i);
其中,Cnow(i)是體素i的灰度值,Anow(i)是不透明度,Cin(i)為進(jìn)入采樣點(diǎn)i的灰度值,Cout(i)是經(jīng)過采樣點(diǎn)i后的灰度值。
重采樣采用三線性插值方法,計(jì)算公式:vp=v0(1-x)(1-y)(1-z)+v1(1-x)y(1-z)+v2(1-x)(1-y)z+v3(1-x)yz+v4x(1-y)(1-z)+v5xy(1-z)+v6x(1-y)z+v7xyz;
其中,vp是要計(jì)算的采樣點(diǎn)P(x,y,z)的值,v0到v7是采樣點(diǎn)所在體素的立方體網(wǎng)格單元的8個(gè)頂點(diǎn)上已知的數(shù)值。
步驟8.4:從HDFS下載生成結(jié)果dataout1讀取至master機(jī)器內(nèi)存。
步驟9:判斷有無數(shù)據(jù)合并,具體判斷過程如下:若同時(shí)滿足以下條件,
即:開始編號(hào)d<開始編號(hào)x<結(jié)束編號(hào)y<結(jié)束編號(hào)e、視線方向f=視線方向l、視點(diǎn)位置g=視點(diǎn)位置m,即有部分?jǐn)?shù)據(jù)重復(fù),此時(shí)有數(shù)據(jù)合并;否則,判斷為沒有數(shù)據(jù)合并。
經(jīng)過判斷,若判斷結(jié)果是有數(shù)據(jù)合并,則重復(fù)數(shù)據(jù)data0與生成結(jié)果dataout1合成為最終結(jié)果data;
或判斷結(jié)果是沒有數(shù)據(jù)合并,則執(zhí)行步驟10。
步驟10:采用最近最久未使用原則對(duì)重復(fù)數(shù)據(jù)data0進(jìn)行替換。
集群處理完一次數(shù)據(jù)后,替換一個(gè)之前保存過的數(shù)據(jù)data0。首先讀取禁替換標(biāo)識(shí),數(shù)值大于零,則不予替換。然后,采用使用次數(shù)n最小原則。若使用次數(shù)n相同,則按照最新一次保存或讀取使用的時(shí)間t最久原則替換。
步驟11:將數(shù)據(jù)data傳回用戶;
步驟12:輸出顯示生成的二維圖像;
步驟13:判斷是否切換視線方向f;
若:判斷結(jié)果是切換視線方向,則執(zhí)行步驟2;
或判斷結(jié)果是不切換視線方向,則結(jié)束。
需要說明的是,由于圖1中對(duì)應(yīng)于用戶2以及用戶3中的標(biāo)記有①的框圖內(nèi)處理過程與對(duì)應(yīng)于用戶1的標(biāo)記有①的框圖內(nèi)處理過程相同,因此未示出。
此外,為了便于對(duì)圖1中給出的流程圖進(jìn)行識(shí)別,本發(fā)明還將圖1由上到下分成A、B、C、D、E五塊區(qū)域,并分別給出了各塊區(qū)域的放大圖,如圖9-圖13所示。
結(jié)合實(shí)際情況,本發(fā)明方法實(shí)驗(yàn)所用的計(jì)算機(jī)配置如下:
本機(jī)配置:酷睿i3-370雙核四線程處理器,內(nèi)存3GB,顯卡NVIDIA GeForce GT420M,顯存1GB,Windows 764位操作系統(tǒng);
集群配置:在酷睿i7-4790四核八線程處理器,內(nèi)存8GB,Windows 764位操作系統(tǒng)上使用Vmware Workstation 11虛擬機(jī)建立4個(gè)節(jié)點(diǎn),master機(jī)器配置雙核處理器,1.5GB內(nèi)存,20GB硬盤,3個(gè)slave機(jī)器配置單核處理器,1GB內(nèi)存,20GB硬盤,4個(gè)機(jī)器節(jié)點(diǎn)均使用ubuntu 14.04操作系統(tǒng),安裝hadoop 2.60。
此外,本發(fā)明還給出了單機(jī)處理和本發(fā)明方法處理運(yùn)行時(shí)間對(duì)比表,如表1所示,圖7和圖8是本發(fā)明方法所生成頭骨骨骼和表皮的圖像結(jié)果圖。
表1
由上述實(shí)驗(yàn)結(jié)果對(duì)比可以發(fā)現(xiàn),本發(fā)明的光線投射可視化多用戶交互處理方法,一方面使用NVIDIA CUDA和Hadoop MapReduce的并行處理能力,加速繪制速度,實(shí)現(xiàn)了各像素點(diǎn)梯度、光線重采樣和數(shù)據(jù)合成的快速運(yùn)算;另一方面,針對(duì)多用戶交互環(huán)境,設(shè)計(jì)了一種避免重復(fù)計(jì)算的方法,減少重復(fù)計(jì)算耗時(shí)和系統(tǒng)資源浪費(fèi),提升了繪制效率。
當(dāng)然,以上說明僅僅為本發(fā)明的較佳實(shí)施例,本發(fā)明并不限于列舉上述實(shí)施例,應(yīng)當(dāng)說明的是,任何熟悉本領(lǐng)域的技術(shù)人員在本說明書的教導(dǎo)下,所做出的所有等同替代、明顯變形形式,均落在本說明書的實(shí)質(zhì)范圍之內(nèi),理應(yīng)受到本發(fā)明的保護(hù)。