周葉江 鄭 彬 趙永廷
(中國科學(xué)院重慶綠色智能技術(shù)研究院 重慶 400714)
GPU在活塞銷尺寸快速檢測(cè)中的應(yīng)用研究
周葉江 鄭 彬*趙永廷
(中國科學(xué)院重慶綠色智能技術(shù)研究院 重慶 400714)
近年來,工業(yè)上對(duì)工業(yè)標(biāo)準(zhǔn)件尺寸檢測(cè)的研究重點(diǎn)逐漸轉(zhuǎn)移到關(guān)注其“高速性”策略的研究,其中邊緣信息的檢測(cè)是最為重要且最耗時(shí)的過程。為此,針對(duì)活塞銷尺寸檢測(cè)提出一種基于GPU技術(shù)的方法。選用提取穩(wěn)定、精度高的Hough算法作為檢測(cè)直線的策略,結(jié)合現(xiàn)有邊緣檢測(cè)算法,對(duì)其主要步驟(高斯濾波、梯度計(jì)算、方向角計(jì)算及Otsu閾值化)的計(jì)算流程進(jìn)行并行優(yōu)化。使用相同實(shí)驗(yàn)樣本,該方法能夠在更短的時(shí)間內(nèi)檢測(cè)出活塞銷的尺寸,與傳統(tǒng)CPU實(shí)現(xiàn)方法對(duì)比,其平均效率有近15倍的提升。利用GPU實(shí)現(xiàn)活塞銷尺寸快速檢測(cè)的方法,為工業(yè)上實(shí)現(xiàn)檢測(cè)的高速性提供一個(gè)高效可靠的解決途徑,且有效地控制生產(chǎn)成本。
尺寸檢測(cè) 直線檢測(cè) 邊緣提取 GPU技術(shù) 并行計(jì)算
活塞銷是裝在活塞裙部的圓柱形銷子,廣泛應(yīng)用于轎車、中型車、工程機(jī)械類重型車等。它用來連接活塞和連桿,具有剛度大、強(qiáng)度高和表面質(zhì)量好的特點(diǎn)[1]。然而在制造過程中銷表面會(huì)產(chǎn)生各種尺寸缺陷,因此精確地檢測(cè)出表面尺寸缺陷具有重大意義。由于活塞銷具有嚴(yán)格的尺寸參數(shù),傳統(tǒng)地用萬能工具顯微鏡、三坐標(biāo)測(cè)量機(jī)等進(jìn)行檢測(cè)不僅損壞活塞銷,而且大大降低了生產(chǎn)效率?,F(xiàn)在一般采用機(jī)器視覺的方法,該方法通過工業(yè)相機(jī)采集圖像,然后利用圖像處理技術(shù)識(shí)別被測(cè)物體,最后設(shè)計(jì)算法實(shí)現(xiàn)檢測(cè)。
機(jī)器視覺具有靈敏度高、設(shè)計(jì)靈活、非接觸性、響應(yīng)迅速等優(yōu)點(diǎn),使得其在工業(yè)中得到了廣泛的應(yīng)用,如在空瓶檢測(cè)機(jī)器人、工業(yè)零件測(cè)量系統(tǒng)、工業(yè)機(jī)器人分揀系統(tǒng)、色差檢測(cè)等領(lǐng)域都有應(yīng)用。近年來,有關(guān)工業(yè)應(yīng)用中的機(jī)器視覺技術(shù),已經(jīng)成為解決傳統(tǒng)方法速度慢、精度低等不足的有效途徑。機(jī)器視覺在工業(yè)中的應(yīng)用研究,也引起了國內(nèi)外學(xué)者的關(guān)注。
文獻(xiàn)[1]針對(duì)圓柱形高精密零件曲率表面缺陷檢測(cè)的問題,設(shè)計(jì)并實(shí)現(xiàn)了基于及其視覺的在線檢測(cè)系統(tǒng);文獻(xiàn)[3]設(shè)計(jì)了一種基于三維激光掃描的移動(dòng)大尺寸圓柱體工件長度快速檢測(cè)系統(tǒng);文獻(xiàn)[4]基于水平投影法提取鐵軌表面缺陷,采用邏輯操作組合檢測(cè)結(jié)果,提出了一種鐵軌表面缺陷的視覺檢測(cè)與識(shí)別算法。
近年來GPU技術(shù)快速發(fā)展,由于GPU相比CPU在處理并行數(shù)據(jù)上的巨大優(yōu)勢(shì),有關(guān)于GPU的應(yīng)用研究逐漸成為熱點(diǎn)。文獻(xiàn)[5]使用NVIDIA的并行計(jì)算架構(gòu)將SPH方法的全部處理過程在GPU上實(shí)現(xiàn);文獻(xiàn)[6]提出了一種基于GPU的逆時(shí)偏移并行加速算法。
本文研究了基于機(jī)器視覺的活塞銷尺寸檢測(cè)算法,并設(shè)計(jì)出機(jī)器視覺與尺寸檢測(cè)系統(tǒng)。針對(duì)前期單獨(dú)使用CPU進(jìn)行尺寸檢測(cè)速度慢的不足,有效利用GPU的優(yōu)勢(shì),提出了一種基于GPU的活塞銷尺寸檢測(cè)方法。根據(jù)GPU內(nèi)存的特點(diǎn),各步驟合理分配GPU資源,同時(shí)部分只能串行執(zhí)行的過程使用CPU進(jìn)行處理,最終實(shí)現(xiàn)CPU-GPU協(xié)同工作模式。對(duì)比單獨(dú)使用CPU,在保證精度的前提下檢測(cè)速度具有極大提高。
1.1 CUDA通用并行計(jì)算結(jié)構(gòu)
CUDA(Compute Unified Device Architecture) 是NVIDIA公司推出的一種通用并行計(jì)算平臺(tái)和編程模型,中文名稱即統(tǒng)一計(jì)算設(shè)備架構(gòu)。在CUDA的架構(gòu)下,一個(gè)程序可以分為兩個(gè)部分:host端和device端。host端是程序在CPU上的執(zhí)行部分,而device端是在GPU上的執(zhí)行部分。GPU執(zhí)行時(shí)的最小單位是thread,多個(gè)thread可以組成一個(gè)block,執(zhí)行相同程序的block可以組成一個(gè)grid,如圖1所示為線程組織結(jié)構(gòu)。
圖1 線程結(jié)構(gòu)
CUDA編程模型采用CPU+GPU的異構(gòu)模式。CPU端代碼生成原始數(shù)據(jù),通過CUDA運(yùn)行時(shí)函數(shù)庫將這些原始數(shù)據(jù)傳輸?shù)紾PU上,然后啟動(dòng)CUDA內(nèi)核函數(shù)進(jìn)行運(yùn)算,最后將運(yùn)算結(jié)果從設(shè)備端傳輸?shù)街鳈C(jī)端[7]。
1.2 基于CPU的直線求取
工件檢測(cè)系統(tǒng)中最主要且最耗時(shí)的工作為求取直線,主要分高斯濾波、梯度和方向角計(jì)算、非極大值抑制、Otsu閾值分割和Hough直線檢測(cè)五個(gè)步驟。
1.2.1 高斯濾波
由于工業(yè)攝像頭采集的圖像受環(huán)境等因素的影響,第一步采用高斯濾波進(jìn)行濾波,其平滑函數(shù)為:
(1)
令S[i,j]為平滑后的圖像,用G[i,j;σ]對(duì)圖像I[i,j]進(jìn)行平滑,則圖像與高斯平滑濾波器卷積表示為:
S[i,j]=G[i,j;σ]*I[i,j]
(2)
1.2.2 梯度和方向角的計(jì)算
高斯濾波之后進(jìn)行梯度和方向角的計(jì)算,該過程使用一階有限差分計(jì)算偏導(dǎo)數(shù)的兩個(gè)陣列P與Q,已平滑數(shù)據(jù)陣列S[i,j]的梯度使用2×2的一階有限差分來近似計(jì)算x與y偏導(dǎo)數(shù)的兩個(gè)陣列P[i,j]與Q[i,j][8]:
P[i,j]≈(S[i,j+1]-S[i,j]+S[i+1,j+1]-S[i+1,j]/2)
(3)
Q[i,j]≈(S[i,j]-S[i+1,j]+S[i,j+1]-S[i+1,j+1]/2)
(4)
(5)
θ[i,j]=arctan(Q[i,j]/P[i,j])
(6)
式中,M[i,j]反映了圖像的邊緣強(qiáng)度,θ[i,j]反映了邊緣的方向。使得M[i,j]取得局部最大值的方向角θ[i,j],就是邊緣的方向。
1.2.3 非極大值抑制
圖2 非極大值抑制原理圖
僅得到全局的梯度強(qiáng)度并不足以確定邊緣。為確定邊緣,必須保留局部梯度值最大的點(diǎn),而抑制非極大值。非極大值抑制過程是利用梯度的方向,將待判斷的像素點(diǎn)與鄰域像素的梯度幅值進(jìn)行比較。首先將梯度角的變化范圍離散到圓周的四個(gè)扇區(qū)(0°,45°,90°,135°)之一,對(duì)應(yīng)首3×3鄰域內(nèi)元素的四種可能組合,任何通過鄰域中心的點(diǎn)必須通過其中一個(gè)扇區(qū)。圖2為非極大值抑制原理圖。
在圖2中,黑色斜線方向?yàn)镃點(diǎn)的梯度方向,局部最大值點(diǎn)位于該直線上,其中C點(diǎn)、d1、d2均可能是局部最大值點(diǎn),因此需要首先確定像素點(diǎn)C的灰度值在其8鄰域內(nèi)是否為最大[9]。如若C點(diǎn)小于d1、d2兩點(diǎn)中的其中任一個(gè),即可說明C點(diǎn)不是局部極大值,則排除C點(diǎn)為邊緣。用公式表示為:
N[i,j]=NMS(M[i,j],ζ[i,j])
(7)其中M[i,j]表示點(diǎn)C的位置,ζ[i,j]=Sector(θ[i,j]),即扇區(qū)的梯度值(Sector表示一個(gè)扇區(qū))θ表示梯度值。
1.2.4Otsu閾值分割
由于每一次處理所使用的閾值不盡相同,所以采用自適應(yīng)閾值的Otsu算法來確定其大小。對(duì)于圖像I(x,y),前景和背景的分割閾值記為T,前景點(diǎn)數(shù)占圖像比例為ω0,平均灰度為μ0;背景點(diǎn)數(shù)占圖像比例為ω1,平均灰度為μ1;圖像總平均灰度記為μ,類間方差為g,則有:
μ=ω0×μ0+ω1×μ1
(8)
g=ω0(μ0-μ)×(μ0-μ)+ω1(μ1-μ)×(μ1-μ)
(9)
將式(8)代入式(9)得到g=ω0ω1(μ0-μ1)×(μ0-μ1),采用遍歷的方法得到類間方差最大的閾值T,即為所求[10]。
1.2.5Hough直線檢測(cè)
通過前幾步可以得到圖像的細(xì)邊緣,后面需要檢測(cè)出直線,以便進(jìn)行距離求解。檢測(cè)直線采用Hough變換,其原理為:假設(shè)有一條直線到原點(diǎn)距離為s、方向角為θ,直線上的每一點(diǎn)都滿足方程s=xcosθ+ysinθ,利用該條件找出圖像中的直線[11]。圖3為標(biāo)準(zhǔn)Hough變換基本流程圖。
圖3 標(biāo)準(zhǔn)Hough變換基本流程圖
利用GPU實(shí)現(xiàn)并行加速,即通過CUDA實(shí)現(xiàn)對(duì)現(xiàn)有算法過程的并行改進(jìn)。CUDA是NVIDIA推出的一個(gè)并行計(jì)算架構(gòu),通過該架構(gòu)可實(shí)現(xiàn)利用GPU解決部分復(fù)雜計(jì)算問題[12]。
2.1 算法思想
針對(duì)直線求取過程中的高斯濾波、梯度和方向角計(jì)算、非極大值抑制、Otsu閾值分割和Hough直線檢測(cè)進(jìn)行并行化處理,使其在CUDA架構(gòu)上運(yùn)行,從而達(dá)到加速的目的,主要思想和步驟如下:
1) 在進(jìn)行高斯濾波處理的過程中,常見的有直觀實(shí)現(xiàn)方法、分離濾波(使用紋理內(nèi)存)和FFT卷積。假設(shè)圖像的大小為M×N,濾波核的半徑為r,對(duì)時(shí)間復(fù)雜度分析可得:直觀實(shí)現(xiàn)方法為O(M×N×r2) ,分離濾波器O(M×N×r)。FFT卷積可通過CUDA已經(jīng)封裝好的CUFFT庫實(shí)現(xiàn),但由于卷積核相對(duì)于圖像小得多,故其性能不如分離濾波,最終選擇分離濾波[13]。并行化過程中,使用全局內(nèi)存中的單個(gè)線程加載一個(gè)像素,然后把數(shù)據(jù)復(fù)制到紋理內(nèi)存中,之后執(zhí)行濾波。濾波執(zhí)行過程中,為了提高計(jì)算性能,計(jì)算中的循環(huán)展開成一階表達(dá)式。
2) 下一步是求出圖像X、Y方向的梯度值Gx、Gy及方位角θ。該過程中使用紋理內(nèi)存,數(shù)據(jù)傳遞方式和高斯濾波相同,核函數(shù)中單個(gè)線程加載一個(gè)像素,各像素與卷積因子進(jìn)行卷積求得Gx、Gy,Sobel卷積因子如圖4所示。
圖4 Sobel卷積因子
3) 一旦梯度和邊緣方向計(jì)算出來之后,需要進(jìn)行非極大值抑制。它的作用是跟蹤圖像的邊緣方向且抑制非脊像素,只保留脊像素,從而使輸出圖像邊緣細(xì)化。
4)Otsu的過程分有計(jì)算直方圖并歸一化、計(jì)算圖像灰度均值μ、計(jì)算直方圖的零階和一階距、計(jì)算并找到最大的類間方差,最后根據(jù)找到的閾值進(jìn)行二值化。Otsu算法并行主要體現(xiàn)在直方圖計(jì)算、零階以及一階距的計(jì)算,以及二值化三個(gè)部分均在CUDA平臺(tái)上實(shí)現(xiàn)并行化[14]。該過程使用共享內(nèi)存,因?yàn)楣蚕韮?nèi)存中的數(shù)據(jù)能夠被同一線程塊中的線程共有,在數(shù)據(jù)對(duì)齊的情況下,具有更快的訪問速度。
5) 由圖3可以看出,Hough直線檢測(cè)算法中有明顯的不足之處:累加器矩陣A占用了較大的存儲(chǔ)空間;每一次都需要對(duì)圖像的每一個(gè)邊緣點(diǎn)進(jìn)行判斷,存在大量的循環(huán),會(huì)占用大量的時(shí)間。在CUDA架構(gòu)下完成該算法能夠大大節(jié)約時(shí)間,首先采用一個(gè)線程對(duì)應(yīng)圖像中的一個(gè)像素點(diǎn),判斷各個(gè)像素點(diǎn)是否是圖像的邊緣,若是則該點(diǎn)進(jìn)行Hough變換,若不是則返回[15]。由于單個(gè)線程對(duì)應(yīng)一個(gè)像素點(diǎn),所以省掉了單個(gè)像素點(diǎn)對(duì)θ判斷一次所花費(fèi)的時(shí)間。
2.2 基于CUDA的技術(shù)分析
CUDA技術(shù)的基本框架分為以下5步:1) 分配顯存空間;2) 將數(shù)據(jù)從主機(jī)傳入GPU;3) 在GPU中進(jìn)行具體的并行計(jì)算;4) 將數(shù)據(jù)從GPU傳回主機(jī);5) 釋放顯存空間。
結(jié)合算法設(shè)計(jì)思想和步驟,在并行化算法設(shè)計(jì)時(shí)需要考慮以下關(guān)鍵點(diǎn):
1) 并行化過程中使用了紋理內(nèi)存,共享內(nèi)存和全局內(nèi)存,需要充分考慮數(shù)據(jù)在傳輸時(shí)的異步問題,避免因?yàn)閿?shù)據(jù)的不完全傳輸造成計(jì)算結(jié)果的不正確。在分配線程的時(shí)候沒有必要產(chǎn)生過多超過圖像尺寸的線程,造成計(jì)算的延時(shí)與內(nèi)存的浪費(fèi)。在程序運(yùn)行中由于分配顯存和釋放顯存會(huì)占據(jù)大量的時(shí)間,可以采用把cudaMalloc和cudaFree寫到一個(gè)主函數(shù)當(dāng)中,程序運(yùn)行期間只進(jìn)行單次分配與釋放,從而提高計(jì)算性能。
2) 紋理內(nèi)存使用cudaMemcpy2DToArray將數(shù)據(jù)從主機(jī)傳到GPU,因?yàn)榧y理內(nèi)存針對(duì)2D訪問有優(yōu)化,同時(shí)需要使用cudaBindTexture2D()將數(shù)據(jù)綁定到線性存儲(chǔ)器中,最后需要使用cudaUnbindTexture()來解綁。
3) 根據(jù)共享內(nèi)存的特點(diǎn)可知,共享內(nèi)存的訪問需要提前進(jìn)行初始化,不然計(jì)算結(jié)果不正確。對(duì)共享內(nèi)存中的數(shù)據(jù)進(jìn)行原子操作,可以大大提高原子操作的效率,但是由于原子操作是一個(gè)串行操作,所以可以采用單GPU線程一次處理同一列上連續(xù)32個(gè)像素點(diǎn)的優(yōu)化策略[16]。
4)Hough直線檢測(cè)過程中,在檢測(cè)最大值時(shí),最大值容易被周圍的值干擾,可以采用將累加器矩陣分塊的優(yōu)化策略[17]。
2.3 部分編碼設(shè)計(jì)
結(jié)合2.1節(jié)和2.2節(jié)所述,利用CUDA技術(shù)在VisualStudio2013平臺(tái)下構(gòu)建檢測(cè)系統(tǒng)框架,其軟件流程如圖5所示。利用CUDA處理并行數(shù)據(jù)的優(yōu)勢(shì),將處理過程中可以并行執(zhí)行的數(shù)據(jù)都放到GPU中進(jìn)行計(jì)算,最后計(jì)算結(jié)果返回到CPU中。其中CPU部分使用C++編寫,GPU部分使用CUDAC編寫。
圖5 系統(tǒng)流程框圖
程序運(yùn)行時(shí)由于分配顯存和釋放顯存會(huì)占據(jù)大量時(shí)間,所以把該過程寫在主函數(shù)中,部分代碼如下:
int main(int argc, char **argv){
…cudaMalloc((void**)&d_in, width*height);
cudaMalloc((void**)&d_out, width*height);
cudaMemcpy(d_in, input, width*height*sizeof(unsigned char),cudaMemcpyHostToDevice);
dim3 blocksize(16, 16);
dim3 gridsize((width + blocksize.x - 1) / blocksize.x, (height + blocksize.y - 1) / blocksize.y);
loadConvertData <<
cudaThreadSynchronize();
cudaMemcpy(output,d_out,width*height*sizeof(unsigned char), cudaMemcpyDeviceToHost);
cudaFree(d_in);
cudaFree(d_out);…}
主函數(shù)中首先通過cudaMalloc進(jìn)行顯存的分配,然后cudaMemcpy進(jìn)行數(shù)據(jù)在主機(jī)和設(shè)備之間的傳輸,在本文中blocksize設(shè)置為(16,16),此時(shí)效果最好。gridsize的值根據(jù)待處理像素的值自動(dòng)確定,cudaThreadSynchronize()保證每一個(gè)像素都處理完畢,最后通過cudaFree釋放掉顯存空間。
高斯濾波使用的是5×5矩陣,其中需要把像素的循環(huán)計(jì)算展開成一階表達(dá)式,提高運(yùn)行速度,部分代碼如下:
const float deviceGaussianFilterMask={2, 4, 5, 4, 2,4, 9, 12, 9, 4,5, 12, 15, 12, 5,4, 9, 12, 9, 4,2, 4, 5, 4, 2};
__global__ void GaussianConvolution(float* output, unsigned matrixWidth){
int outputRow = blockIdx.y * blockDim.y + threadIdx.y;
int outputColumn = blockIdx.x * blockDim.x + threadIdx.x;
float accumulator = 0.0;
…accumulator+=deviceGaussianFilterMask[(2+i)*3+(2+j)]* tex2D(deviceMatrixTexture, matrixColumn, outputRow + j);…}
其中outputRow、outputColumn表示分配線程進(jìn)行行列的濾波,accumulator表示單個(gè)像素濾波后的值,通過tex2D(deviceMatrix Texture,matrixColumn,outputRow+j)分配紋理內(nèi)存中的線程。
再之后是梯度與方向角度的計(jì)算,部分代碼如下:
__global__ void deviceComputeGradient(float* outputGradient, unsigned* outputEdgeDirectionClassifications, unsigned matrixWidth){
int outputRow = blockIdx.y * blockDim.y + threadIdx.y;
int outputColumn = blockIdx.x * blockDim.x + threadIdx.x;
…xAccumulator += deviceXGradientMask[maskIndex] * tex2D(deviceMatrixTexture, matrixColumn, outputRow + j);
yAccumulator += deviceYGradientMask[maskIndex] * tex2D(deviceMatrixTexture, matrixColumn, outputRow + j);…
int matrixIndex = outputRow * matrixWidth + outputColumn;
outputGradient[matrixIndex] = abs(xAccumulator) + abs(yAccumulator);
float edgeDirection = atan2(yAccumulator, xAccumulator) * (180 / 3.14159265) + 180.0;
if ((edgeDirection >= 22.5 && edgeDirection < 67.5) || (edgeDirection >= 202.5 && edgeDirection < 247.5)){
outputEdgeDirectionClassifications[matrixIndex] = 1;}…
其中xAccumulator、yAccumulator分別表示每個(gè)像素在X、Y方向的梯度,outputGradient表示像素梯度強(qiáng)度,即G,edgeDirection表示梯度方向,即方位角θ。
實(shí)驗(yàn)平臺(tái)的操作系統(tǒng)是Windows7Ultimatex64,CPU為interCorei3-2120 3.30GHz,GPU為NVIDIAGeForceGTX560SE(1536MB),頻率736MHz,計(jì)算能力2.1,軟件環(huán)境為VisualStudio2013+CUDA6.5+OpenCV2.4.9。待處理的圖像為6張活塞銷圖像,分辨率2592×1944,大小4.80MB,活塞銷標(biāo)準(zhǔn)寬度為1.000cm。如圖6所示,活塞銷被檢測(cè)時(shí)為任意姿態(tài),邊緣信息不盡相同,存在明顯差異,因此運(yùn)行時(shí)間有一定差異。
圖6 活塞銷
如表1所示為6張活塞銷圖像分別在CPU和CPU+GPU模式下的運(yùn)行時(shí)間對(duì)比,可以看出,使用GPU之后的運(yùn)行時(shí)間明顯變短,極大地減少直線求取所需時(shí)間,平均加速比約為13.42。
表1 Canny算法運(yùn)行時(shí)間對(duì)比
通過對(duì)上述單個(gè)樣本圖像進(jìn)行長時(shí)間約上萬次的重復(fù)檢測(cè),可得出如表2所示結(jié)果,其表示分別在CPU和CPU+GPU模式下的精度。從表中可以看出,兩種模式下準(zhǔn)確度均相差不大,能夠達(dá)到檢測(cè)系統(tǒng)的生產(chǎn)要求。
表2 精度對(duì)比
基于GPU并行的方法實(shí)現(xiàn)活塞銷尺寸的快速檢測(cè),綜合利用CUDA架構(gòu)中的共享內(nèi)存、紋理內(nèi)存和全局內(nèi)存,對(duì)比前期單獨(dú)使用CPU的方法,保證精度的前提下能夠明顯縮短檢測(cè)時(shí)間。下一步工作將結(jié)合現(xiàn)在已有的工作進(jìn)展,將檢測(cè)系統(tǒng)和檢測(cè)算法移植到玻管的缺陷檢測(cè)上。
[1] 楊文飛,楊文雄.一種活塞銷管:中國,CN203009815 U[P].2013.
[2] 蘇俊宏,劉勝利.圓柱型高精密零件表面缺陷檢測(cè)及形貌分析[J].激光與光電子學(xué)進(jìn)展,2014,51(4):150-154.
[3] 周森,郭永彩,高潮,等.基于三維激光掃描的移動(dòng)大尺寸圓柱體工件長度快速檢測(cè)系統(tǒng)[J].光學(xué)精密工程,2014,22(6):1524-1530.
[4] 唐湘娜,王耀南.鐵軌表面缺陷的視覺檢測(cè)與識(shí)別算法[J].計(jì)算機(jī)工程,2013,39(3):25-30.
[5] 周煜坤,陳清華,余瀟.基于CUDA的大規(guī)模流體實(shí)時(shí)模擬[J].計(jì)算機(jī)應(yīng)用與軟件,2015,32(1):143-147,170.
[6] 張向陽,馮超敏,趙書貴,等.一種基于GPU的逆時(shí)偏移并行算法[J].計(jì)算機(jī)應(yīng)用與軟件,2013,30(10):304-307.
[7] 夏斌.基于CPU+GPU的外輻射源雷達(dá)自適應(yīng)濾波算法實(shí)現(xiàn)技術(shù)[D].西安:西安電子科技大學(xué),2013.
[8] Gonzalez C I,Melin P,Castro J R,et al.An improved sobel edge detection method based on generalized type-2 fuzzy logic[J].Soft Computing,2014:1-12.
[9] Brown L M,Feris R,Pankanti S.Temporal Non-maximum Suppression for Pedestrian Detection Using Self-Calibration[C]//Pattern Recognition (ICPR),2014 22nd International Conference on. IEEE,2014:2239-2244.
[10] Huang L,Fang Y,Zuo X,et al.Automatic Change Detection Method of Multitemporal Remote Sensing Images Based on 2D-Otsu Algorithm Improved by Firefly Algorithm[J].Journal of Sensors,2015,2015:327123.
[11] Lee J P,Wu Q Q,Park M H,et al.A Study on Modified Hough Algorithm for Image Processing in Weld Seam Tracking System[J].Advanced Materials Research,2015,1088:824-828.
[12] 侯怡婷.基于CUDA的Hough變換并行實(shí)現(xiàn)[D].大連:大連理工大學(xué),2013.
[13] 劉進(jìn)鋒.幾種CUDA加速高斯濾波算法的比較[J].計(jì)算機(jī)工程與應(yīng)用,2013,49(23):14-18,30.
[14] 王媛媛.基于CUDA平臺(tái)的區(qū)域分割并行算法設(shè)計(jì)與實(shí)現(xiàn)[D].大連:大連理工大學(xué),2014.
[15] 徐洋,張清蓉.基于圖像處理的汽車指針儀表檢測(cè)研究[J].計(jì)算機(jī)應(yīng)用與軟件,2014,31(8):219-221,252.
[16] Rahman M N A,Nasir A F A,Mat N,et al.Image Segmentation Using OpenMP and Its Application in Plant Species Classification[J].International Journal of Software Engineering and Its Applications,2015,9(5):135-144.
[17] Yadav V K,Batham S,Acharya A K,et al.Approach to accurate circle detection:Circular Hough Transform and Local Maxima concept[C]//Electronics and Communication Systems (ICECS),2014 International Conference on.IEEE,2014:1-5.
STUDY OF GPU APPLICATION IN RAPID DETECTION OF PISTON PIN DIMENSION
Zhou Yejiang Zheng Bin*Zhao Yongting
(ChongqingInstituteofGreenandIntelligentTechnology,ChineseAcademyofSciences,Chongqing400714,China)
In recent years, the research is more and more focused on high-speed strategy of industrial standard component dimension detection, and edge detection is the most important and the most time-consuming process of the whole running time. Therefore, a novel method based on GPU technology using CUDA is proposed for piston pin dimension detection. Considering the detection stability and high accuracy, Hough algorithm is selected as the strategy of line detection to parallel optimize several major steps, such as Gaussian filter, gradient computation, calculation of orientation angle and Otsu algorithm, combining with edge detection algorithm in present. Eventually, using the same experimental sample, the proposed method is able to detect the piston pin dimension in shorter time, compared with the original CPU implementation, the average efficiency has been accelerated by nearby 15-fold. The proposed approach outperforms the previous methods on CPUs in implementating same detection. It provides an efficient and feasible method to obtain an accurate and high-speed detection in industrial, and controls the production cost effectively.
Dimension detection Line detection Edge extraction GPU technology Parallel computing
2015-09-28。周葉江,碩士生,主研領(lǐng)域:機(jī)器視覺,并行計(jì)算。鄭彬,副研究員。趙永廷,助理研究員。
TP3
A
10.3969/j.issn.1000-386x.2017.01.036