• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看

      ?

      Numba 下自適應(yīng)雙閾值的Canny 邊緣檢測并行算法

      2024-12-01 00:00:00朱超
      電腦知識與技術(shù) 2024年31期

      摘要:針對自適應(yīng)雙閾值的Canny邊緣檢測算法中運算量大、耗時長的特點,提出了一種基于CUDA架構(gòu)的GPU環(huán)境下的自適應(yīng)雙閾值的Canny邊緣檢測并行算法。針對算法過程中的尋找梯度幅值極大值操作,設(shè)計了一種基于CUDA的并行化梯度幅值極大值統(tǒng)計方案,并使用Anaconda推出的Python編譯器Numba實現(xiàn)基于CUDA架構(gòu)的Canny并行算法。在不同尺寸圖像上進行串行算法與并行算法的對比實驗,實驗結(jié)果表明,并行算法在能夠滿足檢測精度的同時可獲得較高加速比,最高加速比可達(dá)95.27,加速效果顯著,具有良好的數(shù)據(jù)可擴展性。

      關(guān)鍵詞: 邊緣檢測;圖形處理器;統(tǒng)一計算設(shè)備架構(gòu);并行算法;自適應(yīng)雙閾值

      中圖分類號:TP391 文獻標(biāo)識碼:A

      文章編號:1009-3044(2024)31-0034-06

      開放科學(xué)(資源服務(wù))標(biāo)識碼(OSID) :

      0 引言

      邊緣檢測被廣泛應(yīng)用于目標(biāo)物體識別、目標(biāo)追蹤、農(nóng)作物檢測、醫(yī)學(xué)成像等領(lǐng)域,在計算機視覺領(lǐng)域中具有非常重要的地位。在邊緣檢測算法中,由JohnF. Canny于1986年提出的Canny邊緣檢測算法[1],由于其良好的檢測效果,一直作為一種標(biāo)準(zhǔn)的邊緣檢測算法,此后也出現(xiàn)了多種基于Canny算法的改進算法。Canny算法及其改進算法近年來被廣泛應(yīng)用于圖像的邊緣檢測中。然而,Canny邊緣檢測算法存在計算量大、耗時較多及計算效率低的問題。

      針對Canny邊緣檢測中的效率問題,唐斌等人[2]提出了一種基于GPU+CPU的快速實現(xiàn)Canny算子的方法,獲得的最高加速比為5.39;郭恒亮等人[3]設(shè)計了一種面向FT-M7002 平臺的Canny 梯度計算并行算法,將運行速度提升了1.490至2.112倍;劉振濤等人[4]設(shè)計了一種將Hyper-Q技術(shù)應(yīng)用于雙站位相機圖像Canny邊緣提取算法的方案,實現(xiàn)了11.6倍的速度提升;吳進等人[5]基于SDSoC開發(fā)環(huán)境,選用ZC706作為開發(fā)平臺對Canny邊緣檢測進行加速,顯著降低了檢測用時;藍(lán)貴文等人[6]設(shè)計了一種基于CUDA的改進Canny邊緣檢測算法,獲得的最高加速比為24;張帆等人[7]利用GPU流處理器數(shù)量眾多的優(yōu)勢以及強大的多線程并發(fā)執(zhí)行能力對Canny算法進行并行加速,使執(zhí)行速度從80毫秒降至6毫秒以內(nèi);查志勛等人[8]利用FPGA在并行和高速處理數(shù)據(jù)方面的特點,采用結(jié)合灰度變換的改進型Canny算法,設(shè)計出了一種實時邊緣檢測系統(tǒng)。

      非自適應(yīng)雙閾值的Canny邊緣檢測算法在雙閾值過濾操作中需手動指定高低閾值,因此一般情況下該邊緣檢測算法不具備很強的自適應(yīng)性。相反,在自適應(yīng)雙閾值Canny算法中,高低閾值是根據(jù)梯度幅值大小自動計算的,這樣不僅能檢測到更多邊緣細(xì)節(jié),還具有較強的自適應(yīng)性。然而,在高低閾值的計算過程中需要涉及尋找梯度幅值極大值的操作,然而根據(jù)GPU架構(gòu)的特點,GPU并不擅長執(zhí)行極值等統(tǒng)計操作。針對這一問題,一種可行的解決方案是在程序運行到計算高低閾值時將數(shù)據(jù)傳回主機,由主機完成計算后再將結(jié)果傳回GPU端。這樣會增加一次數(shù)據(jù)在主機端與設(shè)備端之間的傳輸,從而延長整個檢測算法的耗時。因此,本文提出了一種基于CUDA 架構(gòu)的GPU環(huán)境中并行化二維規(guī)約梯度幅值極大值統(tǒng)計方案,使整個操作在GPU中完成,避免了GPU與主機間的數(shù)據(jù)來回傳輸,從而提高了算法的整體運行效率。

      Python語言是一種廣泛應(yīng)用的腳本語言,涵蓋數(shù)據(jù)分析、自然語言處理、機器學(xué)習(xí)、科學(xué)計算以及推薦系統(tǒng)構(gòu)建等多個領(lǐng)域[9]。近年來,隨著人工智能與大數(shù)據(jù)的快速發(fā)展,Python的應(yīng)用逐漸增加,已成為最受歡迎的編程語言之一。本文使用Python語言,首先在CPU主機端實現(xiàn)Canny串行算法,然后對算法進行并行化設(shè)計,利用由Anaconda 推出的Python編譯器Numba實現(xiàn)基于CUDA架構(gòu)的Canny并行算法,并將所提出的并行算法封裝為函數(shù),提供調(diào)用接口,以便用戶能夠直接使用Python語言進行調(diào)用,從而提升邊緣檢測效率。

      1 Canny 算法

      Canny邊緣檢測的基本原理有三條[1]:

      1) 良好的信噪比,即將非邊緣點判定為邊緣點的概率應(yīng)低,同時將邊緣點判定為非邊緣點的概率也應(yīng)低。

      2) 高的定位性能,即檢測出的邊緣點應(yīng)盡可能位于實際邊緣的中心。

      3) 對單一邊緣僅產(chǎn)生唯一響應(yīng),即單個邊緣產(chǎn)生多個響應(yīng)的概率應(yīng)低,且虛假響應(yīng)的邊緣應(yīng)得到最大程度的抑制。

      Canny邊緣檢測算法主要由四個步驟組成,依次為:高斯濾波、梯度幅值和方向計算、非極大值抑制以及自適應(yīng)雙閾值過濾處理。這四個步驟均基于灰度圖像完成,當(dāng)讀入的圖像為彩色圖像時,首先應(yīng)將其進行灰度化處理。

      1.1 高斯濾波

      由于圖像中存在的噪聲點會對邊緣檢測產(chǎn)生很大影響,因此在進行邊緣檢測前,需要先去除灰度圖中的噪聲點。在Canny算法中,采用高斯濾波對圖像進行平滑,以去除圖像中的噪聲點。首先,利用二維高斯函數(shù)生成高斯卷積核,其二維高斯函數(shù)如下所示:

      式中:σ為高斯模糊因子,使用所生成的二維高斯卷積核與圖像進行卷積操作,完成高斯濾波,公式如下所示:

      Is (x,y ) = I (x,y ) × G (x,y ) (2)

      式中: I (x,y )為原始圖像;Is (x,y )為經(jīng)過卷積后的圖像。

      1.2 計算梯度

      在對圖像完成高斯濾波后,接下來進行梯度計算。梯度計算包括梯度幅值的計算和梯度方向的計算。在圖像處理中,通常使用一階有限差分近似來求取灰度值的梯度值。具體的公式如下所示:

      式中:I 為圖像灰度值,Gx為X方向的偏導(dǎo)數(shù),Gy為Y方向的偏導(dǎo)數(shù),M 為當(dāng)前點梯度的幅值,θ 是當(dāng)前點梯度的方向,即角度。圖像中梯度方向與邊緣方向互相垂直,其關(guān)系如圖1所示。

      1.3 非極大值抑制

      計算出圖像的梯度后,還須進一步選擇局部真實邊緣點,非極大值抑制能夠保留局部最大梯度值點而抑制所有非局部最大梯度值的點。即只保留梯度變化中最劇烈的點。方法是將梯度方向依次分為0°、45°、90°、135°4個方向。將當(dāng)前像素點M(i,j)的梯度幅值與其梯度方向上兩個像素點的梯度幅值進行比較,若當(dāng)前像素點的梯度幅值最大,則保留該點梯度幅值,否則將該點梯度幅值置零。

      1.4 自適應(yīng)雙閾值

      經(jīng)過非極大抑制后,圖像中仍存在許多噪聲點。在 Canny 算法中,使用了一種雙閾值處理技術(shù),即分別設(shè)置高閾值TH和低閾值TL來區(qū)分邊緣像素點。如果邊緣點的梯度值大于高閾值TH,則判定該點為強邊緣點并予以保留。若邊緣點的梯度值小于高閾值TH且大于低閾值TL,則標(biāo)記為弱邊緣點。小于低閾值的點則被抑制,即將該點的梯度幅值置為零。

      在自適應(yīng)雙閾值處理中,高低閾值的選擇按照3∶1的比例來選取。即首先找到圖像中所有像素點的梯度幅值的最大值,然后高閾值TH和低閾值TL的計算公式如下所示:

      TH = MAX (M [i,j ]) × 0.3 (7)

      TL = MAX (M [i,j ]) × 0.1 (8)

      對于被標(biāo)記為弱邊緣的像素點,需要進行進一步處理。具體方法是檢查該弱邊緣點的 8 鄰域中的所有像素點。如果該鄰域中存在被標(biāo)記為強邊緣的點,則該弱邊緣點被判定為真邊緣并予以保留;否則,該點被判定為假邊緣點并被剔除,即將該點的梯度幅值置為零。

      2 Canny 算法的并行化設(shè)計

      2.1 算法步驟

      在進行 Canny 算法的并行化之前,首先需要在主機端設(shè)計并實現(xiàn)串行算法。本文中串行算法的步驟如算法 1 所示。

      算法1: Canny串行算法。

      輸入:圖像數(shù)據(jù),高斯卷積核尺寸Ksize=5,高斯模糊因子=0.1。

      輸出:邊緣二值圖像。

      步驟1:將圖像轉(zhuǎn)換為灰度圖,并進行零填充。在進行高斯濾波操作之前,為了使圖像邊界處的點也能夠參與卷積運算,需要對圖像的上下左右邊界各進行pad=Ksize/2的零填充。本文中設(shè)置Ksize=5,因此pad=2,如圖2所示。

      步驟 2:生成大小為5×5,模糊因子為 0.1的高斯卷積核。

      步驟 3:進行高斯卷積運算。

      步驟 4:圖像裁剪。由于在步驟 1 中對圖像進行了零填充,因此在卷積完成后,需要將圖像恢復(fù)為原始大小。為此,需要將上下左右邊界處各裁剪掉pad 大小的像素點??梢岳肗umPy中的切片功能完成圖像裁剪。

      步驟 5:梯度計算。本文采用邊緣差分算子 So?bel 來計算每個像素點在水平方向的差分Gx和垂直方向的差分Gy,進而計算出梯度的幅值和方向。Sobel 卷積因子如圖 3 所示。

      步驟 6:非極大值抑制。在 Canny 原算法中,非極大值抑制僅在0°、45°、90°、135°四個梯度方向上進行。這樣做的優(yōu)點是簡單,但如果邊緣點的梯度方向不沿這四個方向,結(jié)果可能不夠準(zhǔn)確。然而,由于在實際存儲中,像素點是離散的二維矩陣,故沿當(dāng)前點梯度方向兩側(cè)的點不一定存在,這類點稱作亞像素點。為了處理這類情況,可以使用線性插值法來計算亞像素點的梯度值,如圖 4 所示。

      在圖 4 中,(1) 和 (2) 兩種情況表示|Gy|>|Gx|,即該點的梯度方向更靠近 Y 軸方向,因此權(quán)重w = |Gx|/|Gy|。其中,情況 (1) 表示Gx與Gy的方向相同,其插值可以表示為:

      gu[i,j]= w × g[i - 1,j - 1]+ (1 - w) × g[i - 1,j] (9)

      gd[i,j]= w × g[i + 1,j + 1]+ (1 - w) × g[i + 1,j] (10)

      情況(2)表示Gx與Gy方向相反,插值表示為:

      gu[i,j]= w × g[i - 1,j + 1]+ (1 - w) × g[i - 1,j] (11)

      gd[i,j]= w × g[i + 1,j - 1]+ (1 - w) × g[i + 1,j] (12)

      在圖4中,(3)和(4)兩種情況表示|Gx|>|Gy|,即該點梯度方向更靠近X軸方向, 則權(quán)重w = |Gy|/|Gx|。其中,情況(3)表示Gx與Gy的方向相同,其插值可表示為:

      gl[i,j]= w × g[i + 1,j - 1]+ (1 - w) × g[i + 1,j] (13)

      gr [i,j]= w × g[i - 1,j + 1]+ (1 - w) × g[i,j + 1] (14)

      情況(4)表示Gx與Gy方向相反,插值表示為:

      gl[i,j]= w × g[i - 1,j - 1]+ (1 - w) × g[i,j - 1] (15)

      gr [i,j]= w × g[i + 1,j + 1]+ (1 - w) × g[i,j + 1] (16)

      若Gx、Gy都為0,則說明該點不是邊緣點。

      步驟7:自適應(yīng)雙閾值處理。首先,對經(jīng)過非極大值抑制后的所有點進行兩兩比較,找到梯度值最大值Gmax,根據(jù)公式(7)和(8)計算出高閾值TH,低閾值TL。然后,依次對每一個點進行雙閾值判斷,流程如圖5 所示。

      2.2 CUDA 并行算法及優(yōu)化

      計算機統(tǒng)一設(shè)備架構(gòu)(CUDA) 是由 NVIDIA 公司推出的一種 GPU 并行計算架構(gòu),能夠利用 GPU 的計算能力提供一套高效的密集型數(shù)據(jù)計算解決方案[10]。

      在 CUDA 程序架構(gòu)中,主機端負(fù)責(zé)串行程序的運行及整體調(diào)度工作,而 GPU 端負(fù)責(zé)多個線程并行執(zhí)行內(nèi)核函數(shù)以完成計算任務(wù)。GPU 中的線程采用塊狀劃分方式,即所有線程以一維、二維及三維的方式組織。在本文的算法中,線程與圖像像素點一一對應(yīng)。首先由 CPU 端將數(shù)據(jù)拷貝至 GPU 端,調(diào)用內(nèi)核函數(shù)進行計算,計算完成后將結(jié)果拷貝回 CPU 端。基于 CUDA 的 Canny 邊緣檢測算法過程如圖 6 所示。

      在圖像處理過程中,一個像素點可以通過與其對應(yīng)的一個線程進行處理,多個線程可以視作對多個像素點并行處理。CUDA 架構(gòu)下的線程是一種輕量級線程,適合處理小粒度的并行問題?;谶@一特點,可以將圖像中的一個像素點與其對應(yīng)的處理線程一一映射,從而對問題進行細(xì)粒度分解。Canny 邊緣檢測并行算法的詳細(xì)步驟如算法2所示。

      算法2 :基于CUDA的并行邊緣檢測算法

      輸入:圖像數(shù)據(jù),高斯卷積核大小Ksize=5,高斯模糊因子=0.1。

      輸出:邊緣二值圖像。

      步驟1:將圖像轉(zhuǎn)換為灰度圖,并進行零填充。

      步驟2:生成高斯卷積核。根據(jù)輸入?yún)?shù),生成大小為5×5,模糊因子為0.1的高斯卷積核G(x,y)。

      步驟3:配置塊(block) 。設(shè)置每個塊的線程數(shù)TPB=16,即一個塊的大小為16×16,包含256 個線程(thread) 。調(diào)用GPU端計算每個線程的全局坐標(biāo),與其將要處理的對應(yīng)像素點的關(guān)系,可表示為:

      tdx, tdy = cuda.grid (2) (17)

      式中:tdx, tdy為當(dāng)前線程在全局空間中的位置,即其對應(yīng)處理像素點在圖像中的位置。

      步驟4:分配顯存空間,將灰度圖及高斯核數(shù)據(jù)傳輸至GPU端中的顯存。

      步驟 5:在 GPU 端進行高斯濾波。在串行算法中,濾波前對圖像的上下左右邊界處進行了大小為pad的零填充,濾波完成后需要對圖像進行裁剪以恢復(fù)到原始大小。如果將濾波完成后的圖像傳回主機端進行裁剪再傳回 GPU 端,會造成傳輸延遲。因此,需要計算出濾波前后圖像像素點的對應(yīng)關(guān)系,使得在濾波的同時便完成圖像裁剪,從而在 GPU 端完成整個過程,如圖 7 所示。

      在圖中,箭頭所指向的即為濾波前后像素點的對應(yīng)關(guān)系,其對應(yīng)關(guān)系可表示為:

      Ia [i,j ] = Ib [i + pad,j + pad ] (18)

      式中:Ia表示進行高斯濾波后的圖像,Ib表示進行高斯濾波前的圖像,pad=Ksize/2。該步驟最終得到進行高斯濾波并且經(jīng)過裁剪恢復(fù)大小后的圖像gauss_out。

      步驟6:在GPU端進行梯度計算。首先在主機端生成Sobel梯度算子,即X方向差分算子與Y方向差分算子,并傳輸至GPU端,計算得到每一個線所對應(yīng)處理的數(shù)據(jù)點,并行在GPU端進行X方向梯度算子與圖像的卷積運算及Y方向梯度算子與圖像的卷積運算,分9Y7qzhrCDFhFF6fov8XSYQ==別計算每一個像素點的X方向偏導(dǎo)數(shù)及Y方向偏導(dǎo)數(shù)。依據(jù)公式(5)和(6)計算出當(dāng)前點梯度幅值及方向。最終得到圖像中所有點的X方向偏導(dǎo)數(shù)gradX、Y 方向偏導(dǎo)數(shù)gradY以及梯度幅值grad。

      步驟 7:在 GPU 端進行非極大值抑制。根據(jù)梯度計算得到的結(jié)果,計算得到每一個線程所對應(yīng)處理的數(shù)據(jù)點。所有線程并行根據(jù)梯度計算所得結(jié)果判斷當(dāng)前線程所對應(yīng)的數(shù)據(jù)點屬于圖 4 中的何種情況,然后依據(jù)該點Gx與Gy的方向是否相同,選取公式 (9) 至公式 (16) 計算沿當(dāng)前點梯度方向兩側(cè)點的線性插值,并與當(dāng)前點的梯度幅值進行比較。若當(dāng)前點的梯度幅值較大,則保留該點,否則剔除。該步驟最終得到所有點經(jīng)過非極大值抑制后的結(jié)果NMS。

      步驟 8:在 GPU 端進行自適應(yīng)雙閾值處理。在自適應(yīng)雙閾值處理中,高閾值TH與低閾值TL的確定依據(jù)公式 (7) 和公式 (8)。首先需找出非極大值抑制后結(jié)果 NMS中梯度幅值的最大值。在串行算法中,可以直接調(diào)用 Numpy 類的max()函數(shù)實現(xiàn)。計算得到每一個線程所對應(yīng)處理的數(shù)據(jù)點。在 CUDA 核函數(shù)中,通過雙循環(huán)結(jié)構(gòu)將 NMS中的值依次進行兩兩比較能夠找到最大值,但該算法的時間復(fù)雜度為O(n2) 。經(jīng)測試發(fā)現(xiàn),若采用此方案,并行算法的耗時不僅沒有降低,反而遠(yuǎn)遠(yuǎn)大于串行算法的耗時。如果將 NMS數(shù)據(jù)傳至主機端,通過 Numpy 類的max()函數(shù)完成求取最大值,然后再將數(shù)據(jù)傳至 GPU 端,會產(chǎn)生傳輸延遲,從而降低算法整體效率。本文設(shè)計了一種稱為二維規(guī)約的方法來求取梯度幅值的最大值,如圖 8 所示。其中,stride 為規(guī)約步長,即每一輪比較中兩個對應(yīng)比較線程之間的跨度。首先,對圖像中的垂直方向進行規(guī)約比較。對應(yīng)的行中的線程進行兩兩比較,即第i 行中的所有線程分別獲取圖像中本行線程所對應(yīng)處理的數(shù)據(jù)點以及圖像中第i+stride行的數(shù)據(jù)點進行梯度幅值比較。如果第i 行中點的梯度幅值小于第i+stride行中點的梯度幅值,則交換兩行的梯度幅值,否則不進行交換。由于線程是并發(fā)執(zhí)行的,每一輪比較中所有對應(yīng)線程的比較計算都是并發(fā)進行的。當(dāng)垂直方向規(guī)約比較完成后,結(jié)果數(shù)據(jù)的首行中數(shù)據(jù)為所有行中的最大值。

      接著進行水平方向規(guī)約比較。第j 個線程分別獲取圖像中本線程所對應(yīng)處理的數(shù)據(jù)點以及第j+stride 個數(shù)據(jù)點進行梯度幅值比較。如果第j 個點的梯度幅值小于第j+stride個點的梯度幅值,則交換數(shù)據(jù),否則不進行交換。當(dāng)水平方向規(guī)約比較完成后,結(jié)果數(shù)據(jù)中的首元素為所有數(shù)據(jù)中的最大值。

      在此方案中,垂直方向和水平方向進行規(guī)約比較的輪數(shù)各為log(n),算法的時間復(fù)雜度為O(log(n))。相較于前面的O(n2),時間復(fù)雜度大大降低。當(dāng)?shù)玫教荻茸畲笾岛螅總€線程并行執(zhí)行后續(xù)的雙閾值處理,最終得到經(jīng)過雙閾值處理的結(jié)果DT。

      步驟 9:將結(jié)果傳送至主機端,輸出邊緣二值圖像。

      3 實驗測試與結(jié)果分析

      3.1 實驗環(huán)境

      硬件平臺:處理器:Intel(R) Core(TM) i7-10710UCPU @ 1.10GHz 1.61 GHz;顯卡:NVIDIA GeForceMX350。

      軟件平臺:操作系統(tǒng):Windows 10;程序設(shè)計語言:Python 3.8.9;開發(fā)環(huán)境:PyCharm、CUDAToolkit10.2、Numba。

      3.2 測試結(jié)果與分析

      本文選取了圖像處理標(biāo)準(zhǔn)測試圖像集中的 air?plane、peppers 及 lena 三張圖像,并分別生成尺寸為256×256、512×512、1 024×1 024 和 2 048×2 048 共五張圖像。實例如圖 9 所示。

      針對不同尺寸的圖像,首先進行 Canny 串行算法的運行耗時統(tǒng)計,然后進行并行算法的運行耗時統(tǒng)計,并計算并行算法相對于串行算法的加速比。為保證測試耗時的準(zhǔn)確性,實驗結(jié)果取 10 次測試耗時的平均值。實驗結(jié)果如表 1 所示。

      為直觀展示不同尺寸圖像下串行算法與在CUDA 架構(gòu) GPU 環(huán)境下并行算法的運行時間,繪制了柱狀圖 如圖10所示。從圖10中可以看出,Canny 并行邊緣檢測算法的運行時間相比于串行算法有了大幅度的降低。

      為直觀展現(xiàn)并行算法在不同尺寸圖像下的加速性能,計算出算法在不同圖像尺寸上的檢測加速比,并繪制加速比曲線圖,如圖 11 所示。

      從圖 11 中可以看出,在一定的圖像尺寸范圍內(nèi),加速比隨著圖像尺寸的增加呈上升趨勢,這表明本文的并行算法表現(xiàn)出了較好的數(shù)據(jù)可擴展性。在速度獲得大幅度提升的同時,Canny 邊緣檢測并行算法必須確保檢測精度。本文中 Canny 串行算法和并行算法的檢測效果如圖 12 所示。

      從圖 12 中可以看出,本文的 Canny 并行算法相對于 Canny 串行算法而言,能夠完整地檢測到串行算法所能檢測到的邊緣,并且保留了更多的細(xì)節(jié)邊緣信息。這表明本文的并行算法能夠滿足檢測精度的要求。

      4 結(jié)論

      本文首先在 Python 環(huán)境中實現(xiàn)了自適應(yīng)雙閾值的 Canny 邊緣檢測算法的串行版本,然后設(shè)計了一種基于 CUDA 架構(gòu)的 Canny 邊緣檢測并行算法,并對其進行了優(yōu)化,通過 Numba 編譯器實現(xiàn)。在尋找梯度幅值極大值的過程中,設(shè)計了一種基于 CUDA 架構(gòu)的并行化二維規(guī)約的梯度幅值極大值尋找方法,使整個操作都在 GPU 中完成,全程只有一次主機端與 GPU 端的數(shù)據(jù)傳輸。實驗結(jié)果表明,在保證邊緣檢測精度的同時,基于 CUDA 的 Canny 邊緣檢測并行算法相比于串行算法能夠大幅度提升檢測效率,并且隨著圖像尺寸的增加,算法加速比也呈現(xiàn)出上升趨勢,表現(xiàn)出良好的數(shù)據(jù)可擴展性。在 2 048×2 048 圖像尺寸下,基于 CUDA 的 Canny 邊緣檢測并行算法的最高加速比可達(dá) 95.27,具備良好的數(shù)據(jù)可擴展性。

      參考文獻:

      [1] CANNY J.A computational approach to edge detection[J].IEEE Transactions on Pattern Analysis and Machine Intelligence,1986,8(6):679-698.

      [2] 唐斌,龍文.基于GPU+CPU的CANNY算子快速實現(xiàn)[J].液晶與顯示,2016,31(7):714-720.

      [3] 郭恒亮,柴曉楠,韓林,等.Canny邊緣檢測算法在飛騰平臺上的實現(xiàn)與優(yōu)化[J].計算機工程,2021,47(7):37-43.

      [4] 劉振濤,燕必希,董明利,等.并行計算在動態(tài)攝影測量邊緣提取算法中應(yīng)用[J].計算機工程與設(shè)計,2019,40(1):97-102.

      [5] 吳進,趙雋,李聰,等.機器視覺中邊緣檢測算法的SDSoC加速實現(xiàn)[J].計算機工程與應(yīng)用,2019,55(12):208-214.

      [6] 藍(lán)貴文,吳昊錚,張強,等.一種基于CUDA的改進Canny邊緣檢測算法[J].桂林理工大學(xué)學(xué)報,2018,38(3):494-500.

      [7] 張帆,韓樹奎,張立國,等.Canny算法的GPU并行加速[J].中國光學(xué),2017,10(6):737-743.

      [8] 查志勛,葉兵.結(jié)合圖像增強的實時邊緣檢測系統(tǒng)[J].現(xiàn)代電子技術(shù),2022,45(14):169-174.

      【通聯(lián)編輯:唐一東】

      南丹县| 辉南县| 德兴市| 蒙自县| 乌什县| 明光市| 鄂尔多斯市| 镇赉县| 汝城县| 新营市| 敦煌市| 岳西县| 滕州市| 海盐县| 昌乐县| 大安市| 桓仁| 保靖县| 汕头市| 岳阳市| 镶黄旗| 万荣县| 宾川县| 长垣县| 赣榆县| 东海县| 宕昌县| 阳春市| 监利县| 高青县| 德令哈市| 怀集县| 玉环县| 自贡市| 惠来县| 常州市| 志丹县| 伊川县| 时尚| 永兴县| 禹城市|