一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Voronoi圖的柵格生成方法研究與分析

算法&編程學(xué)院 ? 來源:網(wǎng)絡(luò)整理 ? 2018-01-31 05:29 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

Voronoi圖是一種空間分割算法。其是對(duì)空間中的n個(gè)離散點(diǎn)而言的,它將平面分割為n個(gè)區(qū)域,每個(gè)區(qū)域包括一個(gè)點(diǎn),此區(qū)域是到該點(diǎn)距離最近的點(diǎn)的集合。由于Voronoi圖具有最鄰近性,鄰接性等眾多性質(zhì)和完善的理論體系,其被廣泛的應(yīng)用在地理學(xué)、氣象學(xué)、結(jié)晶學(xué)、航天、機(jī)器人等領(lǐng)域。

Voronoi圖的生成主要有矢量方法和柵格方法。矢量法中,典型的方法有增量法、分治法和間接法。分治法是一種遞歸方法,算法思路簡(jiǎn)單,但是很難在應(yīng)用過程中實(shí)現(xiàn)動(dòng)態(tài)更新。間接法則是根據(jù)其對(duì)偶圖Delaunay三角網(wǎng)來構(gòu)造Voronoi圖,因此其性能的高低由所采用的Delaunay三角網(wǎng)的構(gòu)造算法所決定。增量法通過不斷向已生成的Voronoi圖中增加點(diǎn)來動(dòng)態(tài)構(gòu)建Voronoi圖。相對(duì)于前兩種方法,增量法構(gòu)造簡(jiǎn)單并且容易實(shí)現(xiàn)動(dòng)態(tài)化,所以被廣泛應(yīng)用。矢量方法的優(yōu)勢(shì)是生成Voronoi圖精度高,但是存在存儲(chǔ)復(fù)雜,生長元只能是點(diǎn)和線,以及難以向三維及高維空間擴(kuò)展等問題。因此本文重點(diǎn)研究了Voronoi圖的柵格生成方法,首先比較了常見的柵格方法生成Voronoi圖的優(yōu)缺點(diǎn),然后結(jié)合CUDA的出現(xiàn),提出一種基于GPU的 Voronoi圖并行柵格生成算法。

1 柵格法簡(jiǎn)介

柵格方法生成Voronoi 圖主要是將二值圖像轉(zhuǎn)化為柵格圖像,然后確定各個(gè)空白柵格歸屬。主要方法有兩類,一類以空白柵格為中心,計(jì)算每個(gè)空白柵格到生長目標(biāo)的距離,以確定其歸屬,常見的方法有代數(shù)距離變換法,逐個(gè)空白柵格確定法等;另一類以生長目標(biāo)為中心,不斷擴(kuò)張生長目標(biāo)的距離半徑,填充其中的空白柵格,直到將整個(gè)圖像填充完成,主要有圓擴(kuò)張法,數(shù)學(xué)形態(tài)學(xué)距離變換法等。代數(shù)距離變換法對(duì)距離圖像進(jìn)行上行掃描(從上到下,從左到右)和下行掃描(從下向上,從右到左)兩次掃描,計(jì)算出每個(gè)空白柵格最鄰近的生長目標(biāo),以此生長目標(biāo)作為其歸屬。此方法中柵格距離的定義直接影響了空白柵格的歸屬和Voronoi圖的生成精度,通常使用的柵格距離定義有街區(qū)距離、八角形距離、棋盤距離等。距離變換的柵格生成方法精度低、耗時(shí)長,所需要花費(fèi)的時(shí)間和柵格的數(shù)量成正比,當(dāng)柵格為n×n大小時(shí),其時(shí)間復(fù)雜度為O(n×n)。圓檢測(cè)法以生長目標(biāo)為圓心,以一定的步長為初始半徑,所有生長目標(biāo)同時(shí)對(duì)其構(gòu)成的圓內(nèi)的空白柵格進(jìn)行覆蓋。通過不斷擴(kuò)大生長目標(biāo)的半徑,將會(huì)有越來越多的空白柵格被各個(gè)圓所覆蓋,直到最終覆蓋完整個(gè)圖像。數(shù)學(xué)形態(tài)學(xué)距離變換法與圓檢測(cè)法類似,其思想來源于數(shù)學(xué)形態(tài)學(xué)中膨脹操作,膨脹操作起到了擴(kuò)大圖像的效果,通過不斷的對(duì)生長目標(biāo)進(jìn)行膨脹操作,最終擴(kuò)張到所有的空白柵格。這兩種方法有個(gè)共同的缺點(diǎn),在每次擴(kuò)張后,都需要判斷整個(gè)柵格圖像是否已完成擴(kuò)張,而這需要遍歷柵格圖像,十分耗時(shí)。

2 GPU下的柵格生成方法

2.1 CUDA編程模型與GPU

CUDA是一個(gè)并行編程模型和一個(gè)軟件編程環(huán)境,其采用了C語言作為編程語言,提供了大量的高性能計(jì)算指令開發(fā)能力,使開發(fā)者能夠在GPU的強(qiáng)大計(jì)算能力上建立起一種更加高效的密集數(shù)據(jù)計(jì)算解決方案。

CUDA將CPU作為主機(jī)端,GPU作為設(shè)備端,一個(gè)主機(jī)端可以有多個(gè)設(shè)備端。其采用CPU和GPU協(xié)同工作的方式,CPU主要負(fù)責(zé)程序中的串行計(jì)算的部分,GPU主要負(fù)責(zé)程序中的并行計(jì)算的部分。GPU上運(yùn)行的代碼被稱為內(nèi)核函數(shù),其能夠被GPU上內(nèi)置的多個(gè)線程并行執(zhí)行。一個(gè)完整的任務(wù)處理程序由 CPU端串行處理代碼和GPU端并行內(nèi)核函數(shù)共同構(gòu)成。當(dāng)CPU中執(zhí)行到GPU代碼時(shí),其首先將相關(guān)數(shù)據(jù)復(fù)制到GPU中,然后調(diào)用GPU的內(nèi)核函數(shù),GPU中多個(gè)線程并行執(zhí)行此內(nèi)核函數(shù),當(dāng)完成計(jì)算后,GPU端再把計(jì)算的結(jié)果返回給CPU,程序繼續(xù)執(zhí)行。通過將程序中耗時(shí)的且便于并行處理的計(jì)算轉(zhuǎn)移到GPU中使用GPU并行處理,以提高整個(gè)程序的運(yùn)行速度。CUDA是以線程網(wǎng)格(Grid),線程塊(Block),線程(Thread)為三層的組織架構(gòu),每一個(gè)網(wǎng)格由多個(gè)線程塊構(gòu)成,而一個(gè)線程塊又由多個(gè)線程構(gòu)成,如圖1所示。在GPU中,線程是并行運(yùn)行的最小單元,由此可見,當(dāng)存在大量的線程時(shí),程序的并行程度將會(huì)十分高。目前的GPU上一個(gè)網(wǎng)格最多包含65535×65535個(gè)線程塊,而一個(gè)線程塊通常有512個(gè)或1024個(gè)線程,所以理論上可以對(duì)65535×65535×512個(gè)柵格同時(shí)進(jìn)行計(jì)算。

2.2 并行Voronoi圖柵格生成算法

傳統(tǒng)的柵格生成算法中,不論是采用以空白柵格為中心確定其歸屬的方法,還是以生長目標(biāo)為中心通過不斷增長生長目標(biāo)半徑對(duì)空白柵格進(jìn)行覆蓋的方法,他們?cè)谟?jì)算每個(gè)空白柵格距離時(shí),只能通過遍歷柵格,逐一處理。而柵格處理過程中的一個(gè)重要特點(diǎn)是,各個(gè)柵格的計(jì)算并不依賴于其他柵格的計(jì)算結(jié)果。即各個(gè)柵格的計(jì)算是相互獨(dú)立的,而由于CPU的串行性,導(dǎo)致了各個(gè)柵格只能順序處理,降低了處理速度。

基于GPU的并行Voronoi圖柵格生成算法

圖1GPU組織架構(gòu)

由于GPU下的多個(gè)線程都是硬件實(shí)現(xiàn)的,各個(gè)線程的處理都是并行的,因此將柵格距離的計(jì)算分散到GPU端各個(gè)線程,必然能夠提高其生成速度。為了并行處理柵格化圖像,可以采用如下的想法,將每一個(gè)柵格點(diǎn)對(duì)應(yīng)于一個(gè)線程,此線程計(jì)算此柵格到所有的生長目標(biāo)的距離,取最小距離的生長目標(biāo)作為其歸屬。即采用一個(gè)線程用來確定一個(gè)空白柵格歸屬的方法。

確定方法后,就需要對(duì)GPU端內(nèi)核函數(shù)進(jìn)行設(shè)計(jì),由于內(nèi)核函數(shù)是并行處理的執(zhí)行單元,其設(shè)計(jì)方式直接決定了GPU端的程序運(yùn)行效率。因此如何設(shè)計(jì)良好的內(nèi)核函數(shù)是提高并行速度的關(guān)鍵。本文采用如下方式進(jìn)行內(nèi)核函數(shù)的設(shè)計(jì),假設(shè)共分配了K個(gè)并行處理線程,柵格規(guī)模為M×N,設(shè)A[i]為第i個(gè)線程處理的柵格編號(hào)。當(dāng)K

基于GPU的并行Voronoi圖柵格生成算法

由于顯卡上的內(nèi)存是動(dòng)態(tài)隨機(jī)存儲(chǔ)(DRAM),因此最有效率的存取方式,是以連續(xù)的方式存取。當(dāng)采用第一種方式時(shí),看似是一種連續(xù)的存取方式,實(shí)際上恰好是非連續(xù)的,當(dāng)?shù)趇個(gè)線程處理第i個(gè)柵格時(shí),由于處理需要一定的時(shí)間,此時(shí)GPU自動(dòng)將下個(gè)一線程i+1需要的內(nèi)存數(shù)據(jù)取出給其使用,此時(shí)下一個(gè)線程的內(nèi)存數(shù)據(jù)卻是在i+C處,內(nèi)存變成了間斷存取。而在使用第二種方式進(jìn)行處理時(shí),恰好是一種連續(xù)的存取方式,由于第i個(gè)線程正在處理第i個(gè)柵格數(shù)據(jù),此時(shí) GPU為第i+1個(gè)線程準(zhǔn)備數(shù)據(jù),而此時(shí)的數(shù)據(jù)正好為第i+1內(nèi)存處。滿足了內(nèi)存的連續(xù)存取特性。因此本文采用第二種方式,內(nèi)核函數(shù)的設(shè)計(jì)偽代碼如下:

基于GPU的并行Voronoi圖柵格生成算法

具體步驟如下:(這里假設(shè)柵格的規(guī)模為M×N):

Step1:根據(jù)柵格圖像的規(guī)模,確定GPU端線程塊和線程的分配方式和分配數(shù)量,初始化GPU端的參數(shù)。

Step2:程序調(diào)用GPU端內(nèi)核函數(shù),同時(shí)將待處理柵格圖像數(shù)據(jù)傳入GPU中。數(shù)據(jù)主要是圖像的柵格距離,一般是二維數(shù)組,0表示空白柵格,其他各生長目標(biāo)可由1,2等不同的數(shù)字定義。

Step3:GPU分配M×N個(gè)thread對(duì)柵格進(jìn)行處理,當(dāng)M×N大于所有的thread的總數(shù)時(shí),可以將M×N個(gè)柵格分塊處理,即將其分成A行×B列×C塊,其中A×B小于thread的總數(shù)。對(duì)于分成了C塊的柵格來說,每個(gè)線程只需要處理C個(gè)柵格。

Step4:當(dāng)生長目標(biāo)數(shù)目不多時(shí),每一個(gè)線程計(jì)算其對(duì)應(yīng)的柵格到所有的生長目標(biāo)點(diǎn)的距離,取距離最小的生長目標(biāo),為此線程對(duì)應(yīng)的空白柵格的歸屬,轉(zhuǎn)Step6。當(dāng)生長目標(biāo)過多時(shí),則轉(zhuǎn)Step5。

Step5:當(dāng)生長目標(biāo)較多時(shí),為了減少遍歷生長目標(biāo)的時(shí)間,通過借鑒王新生的算法,不計(jì)算柵格點(diǎn)到每一個(gè)生長目標(biāo)的距離,通過對(duì)空白柵格不斷的進(jìn)行鄰域擴(kuò)張,直到遇到目標(biāo)生長點(diǎn)的方法確定此柵格的歸屬。

Step6將生成后的數(shù)據(jù)返回CPU端,CPU端完成柵格圖像的顯示與后處理。

3 實(shí)驗(yàn)與總結(jié)

在CPU參數(shù)為IntelXeonCPUE5-2609,2.4GHz,2處理器8核心,GPU參數(shù)為TeslaC2075,448CUDA核心,顯存 5.25GB的試驗(yàn)平臺(tái)下,做了不同方法在不同柵格規(guī)模下生成Voronoi圖的對(duì)比試驗(yàn),試驗(yàn)中生長目標(biāo)的個(gè)數(shù)定義為100個(gè)。由于不同的方法都采用了相同的距離定義,因此各種方法的Voronoi圖生成結(jié)果都是相同的,即他們之間的生成精度是相同的,所以這里重點(diǎn)比較了不同方法的生成耗時(shí)。表1列出了不同方法生成Voronoi圖的用時(shí),圖2為表1的折線圖,從圖2中可以明顯看出,當(dāng)柵格數(shù)量較少時(shí),GPU并行技術(shù)的使用并不能提升生成速度,但是當(dāng)柵格點(diǎn)數(shù)量增加時(shí),逐點(diǎn)法和距離變換法用時(shí)明顯增加,但GPU并行算法用時(shí)幾乎不變。

基于GPU的并行Voronoi圖柵格生成算法

4 結(jié)語

通過實(shí)驗(yàn)結(jié)果可以看出,采用GPU對(duì)Voronoi圖的生成進(jìn)行并行加速,能夠很好的提高生成速度。其生成Voronoi圖所需時(shí)間與只與生長目標(biāo)的數(shù)量有關(guān),而與柵格規(guī)模沒有關(guān)系,當(dāng)生長目標(biāo)數(shù)量為n時(shí),其時(shí)間復(fù)雜度近似于O(n),為線性的生成時(shí)間。相對(duì)于前面的幾種CPU下串行算法,尤其是在柵格規(guī)模過大的情況下,能夠很好的提高Voronoi圖的生成速度。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 算法
    +關(guān)注

    關(guān)注

    23

    文章

    4710

    瀏覽量

    95380
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    UML狀態(tài)和Petri網(wǎng)絡(luò)在類測(cè)試用例生成的應(yīng)用

    【作者】:陳志德;曾凡平;【來源】:《小型微型計(jì)算機(jī)系統(tǒng)》2010年03期【摘要】:分析研究UML狀態(tài)、擴(kuò)展?fàn)顟B(tài)機(jī)和Petri網(wǎng)在類測(cè)試用例生成的特點(diǎn),提出結(jié)合三者優(yōu)勢(shì)的類測(cè)試用例
    發(fā)表于 04-24 09:52

    求大佬分享一種基于GPU的Voronoi并行柵格生成算法

    本文重點(diǎn)研究Voronoi柵格生成方法,首先比較了常見的柵格
    發(fā)表于 06-01 06:44

    PWM生成方法

    目錄一.PWM簡(jiǎn)介PWM生成方法二、PWM控制單色LED—單色呼吸燈硬件說明代碼分析進(jìn)行驗(yàn)證示波器查看波形呼吸燈一.PWM簡(jiǎn)介PWM是 Pulse Width Modulation 的縮寫,中文
    發(fā)表于 08-09 08:34

    基于TPS54x60的電壓軌生成方法

    1 所示參考設(shè)計(jì)便使用了 TPS54x60,其顯示了一種更為簡(jiǎn)單的清潔電壓軌生成方法。利用這種電路,通過一個(gè)開關(guān)轉(zhuǎn)換器來構(gòu)建正負(fù)電壓軌。
    發(fā)表于 12-29 16:56 ?1653次閱讀
    基于TPS54x60的電壓軌<b class='flag-5'>生成方法</b>

    降雨量等值面生成方法研究

    在對(duì)降雨量等值面生成方法研究的基礎(chǔ)上,對(duì)比了徑向基函數(shù)法、反距離權(quán)重法和克里金法等常用的空間數(shù)據(jù)內(nèi)插方法。根據(jù)降雨量監(jiān)測(cè)站的觀測(cè)數(shù)據(jù),比較3種方法的降雨量等值面
    發(fā)表于 12-18 16:03 ?6次下載

    兩種空間矢量脈寬調(diào)制生成方法分析與比較

    兩種空間矢量脈寬調(diào)制生成方法分析與比較
    發(fā)表于 03-30 18:24 ?11次下載

    一種多尺度多視點(diǎn)特性視圖生成方法研究和應(yīng)用_謝冰

    一種多尺度多視點(diǎn)特性視圖生成方法研究和應(yīng)用_謝冰
    發(fā)表于 03-15 09:27 ?0次下載

    一種工作流技術(shù)實(shí)現(xiàn)的應(yīng)急預(yù)案生成方法研究_胡飛虎

    一種工作流技術(shù)實(shí)現(xiàn)的應(yīng)急預(yù)案生成方法研究_胡飛虎
    發(fā)表于 03-14 16:47 ?0次下載

    一種新穎的自動(dòng)化攻擊生成方法_武健

    一種新穎的自動(dòng)化攻擊生成方法_武健
    發(fā)表于 03-19 11:45 ?0次下載

    基于UML依權(quán)限有序的Web鏈接測(cè)試用例生成方法

    針對(duì)傳統(tǒng)Web測(cè)試用例生成方法因缺少權(quán)限性和時(shí)序性考慮而產(chǎn)生的誤判斷問題,提出結(jié)合基于統(tǒng)一建模語言(UML)活動(dòng)與狀態(tài),根據(jù)不同用戶權(quán)限及交互活動(dòng)流程分析Web頁面鏈接而
    發(fā)表于 01-07 12:25 ?0次下載
    基于UML<b class='flag-5'>圖</b>依權(quán)限有序的Web鏈接測(cè)試用例<b class='flag-5'>生成方法</b>

    一種新的DEA公共權(quán)重生成方法

    針對(duì)傳統(tǒng)數(shù)據(jù)包絡(luò)分析(DEA)公共權(quán)重生成方法不同時(shí)具備線性、規(guī)模無關(guān)優(yōu)點(diǎn)的問題,根據(jù)軍事訓(xùn)練績效評(píng)估需求,提出了一種新的DEA公共權(quán)重生成方法。該方法以DEA有效單位為計(jì)算基礎(chǔ),首先
    發(fā)表于 01-13 11:03 ?0次下載

    基于視覺注意力的全卷積網(wǎng)絡(luò)3D內(nèi)容生成方法

     由于在某些特殊場(chǎng)景中獲取深度線索的難度較高,使得已有3D內(nèi)容生成方法的應(yīng)用受到限制。為此,以顯著代替深度進(jìn)行2D-3D轉(zhuǎn)換,提出一種3D內(nèi)容生成方法。使用全卷積網(wǎng)絡(luò)(FCN)
    發(fā)表于 05-13 16:13 ?12次下載

    基于Python-casacore的射電測(cè)量集文件生成方法

    基于Python-casacore的射電測(cè)量集文件生成方法(開關(guān)電源技術(shù)試卷)-該文檔為基于Python-casacore的射電測(cè)量集文件生成方法講解文檔,是一份很不錯(cuò)的參考資料,具有較高參考價(jià)值,感興趣的可以下載看看………………
    發(fā)表于 09-15 13:11 ?3次下載
    基于Python-casacore的射電測(cè)量集文件<b class='flag-5'>生成方法</b>

    altium designer原理生成方法

    以下是關(guān)于Altium Designer原理生成方法的步驟: 準(zhǔn)備工作 在開始繪制原理之前,需要進(jìn)行一些準(zhǔn)備工作,包括: 1.1 安裝Altium Designer軟件:首先,確保您的計(jì)算機(jī)
    的頭像 發(fā)表于 09-02 16:25 ?2212次閱讀

    PWM信號(hào)生成方法 PWM調(diào)制原理講解

    PWM(脈沖寬度調(diào)制,Pulse Width Modulation)是一種重要的模擬信號(hào)電平數(shù)字編碼方法,在電子技術(shù)和控制領(lǐng)域具有廣泛應(yīng)用。以下是對(duì)PWM信號(hào)生成方法和PWM調(diào)制原理的介紹: PWM
    的頭像 發(fā)表于 11-28 16:34 ?4829次閱讀