張永杰,陳文建,李武森
(南京理工大學(xué) 電子工程與光電技術(shù)學(xué)院,南京 210094)
可以發(fā)現(xiàn),對(duì)于圓或類圓的檢測已有了深入研究,但在提出或改進(jìn)算法的同時(shí)不能兼顧處理速度是目前最突出的問題之一。不僅如此,現(xiàn)階段很多算法僅使用C語言或Matlab平臺(tái)編寫都存在著運(yùn)行速度緩慢的問題,尤其是大矩陣和大數(shù)據(jù)運(yùn)算。統(tǒng)一計(jì)算設(shè)備架構(gòu)(Compute Unified Device Architecture,CUDA)是一款由英偉達(dá)(NVIDIA)推出的通用并行計(jì)算架構(gòu),該架構(gòu)使圖形處理器(Graphic Processing Unit,GPU)能夠解決復(fù)雜的計(jì)算問題。本文在使用基于歐拉數(shù)(Euler Number)計(jì)算的邊緣優(yōu)化處理算法的基礎(chǔ)之上,對(duì)采集樣本圖像中的光纖數(shù)量進(jìn)行精確檢測,并研究了一種基于CUDA使用C語言編寫算法的軟件系統(tǒng)。實(shí)驗(yàn)結(jié)果表明,使用該系統(tǒng)對(duì)光纖傳像束端面圖像進(jìn)行檢測,能準(zhǔn)確分類光纖輪廓并計(jì)算數(shù)量,同時(shí)大幅度提高了檢測速度。
圖1 圖像采集系統(tǒng)原理示意圖
假設(shè)光纖傳像束端面恰好完整成像于相機(jī)傳感器靶面上。在相機(jī)選型時(shí),記相機(jī)最高分辨率為m×n像素(m和n分別為相機(jī)靶面的長度和寬度),并設(shè)m′×n′為最小像元分辨像素(最小像元是一個(gè)矩陣單元,m′和n′分別為矩陣的長度和寬度),則相機(jī)在該系統(tǒng)里理論上可以一次性完整檢測出的極限光纖數(shù)量N為
例如,本次實(shí)驗(yàn)使用的相機(jī)分辨率為1 920×1 080 pixel。通過測試分析,最小像元分辨像素為4×4 pixel。因此,該相機(jī)理論上可以準(zhǔn)確檢測出完整成像的極限光纖數(shù)量約為5.7萬個(gè)。
通過實(shí)驗(yàn),得到如圖2所示的光纖傳像束端面圖像樣本。
圖2 光纖傳像束端面圖像樣本
該圖像尺寸為1 920×1 080 pixel,單根光纖像元尺寸為26×26 pixel。分析可知,此時(shí)β偏高,導(dǎo)致成像過大;若需得到完整的端面圖像,結(jié)合式(2)可適當(dāng)增大f1或減小f2。該圖像效果基本滿足設(shè)計(jì)要求,本文將主要針對(duì)該類采集不完整的端面圖像做進(jìn)一步研究分析。
對(duì)于圖2所示的樣本圖像,由于β不合適導(dǎo)致圖像邊緣處的光纖輪廓拍攝不完整。在實(shí)際計(jì)數(shù)或者人為判斷時(shí),很難將這些擁有隨機(jī)不完整度的不完整輪廓逐個(gè)分類,因此造成最終計(jì)算結(jié)果存在差異。針對(duì)此類現(xiàn)象,本文提出了一種優(yōu)化處理算法,即針對(duì)每一個(gè)輪廓進(jìn)行歐拉數(shù)計(jì)算,然后對(duì)有著不同歐拉數(shù)計(jì)算結(jié)果的輪廓進(jìn)行不同的處理,最后將輪廓?dú)w為“完整輪廓”和“不完整輪廓”兩種類型并分別標(biāo)記與計(jì)算數(shù)量。
本次研究兩組患者,對(duì)照組遵醫(yī)率77.39%、疾病相關(guān)知識(shí)掌握程度76.52%、護(hù)理滿意度75.65%,觀察組遵醫(yī)率98.26%、疾病相關(guān)知識(shí)掌握程度95.65%、護(hù)理滿意度99.13%;兩組比較可知,觀察組遵醫(yī)率、對(duì)疾病相關(guān)知識(shí)掌握程度、滿意度均顯著高于對(duì)照組,差異均有統(tǒng)計(jì)學(xué)意義(P<0.05),如表1所示;
在二值圖像分析中,歐拉數(shù)作為重要的拓?fù)涮卣髦?,不?huì)因圖像的放大、縮小、旋轉(zhuǎn)和變形而發(fā)生改變,在圖像分析和幾何對(duì)象識(shí)別中有著十分重要的作用[9]。歐拉數(shù)的一般定義為圖像中包含的連通域數(shù)量與孔洞數(shù)量之差,其計(jì)算公式為
式中:M為連通域數(shù)量;H為孔洞數(shù)量;E為相減后得到的歐拉數(shù)。圖3所示為歐拉數(shù)測試樣本,對(duì)于字母A來說,其本身是一個(gè)完整的連通域,并且內(nèi)部有一個(gè)三角形的黑色孔洞,因此“A”的歐拉數(shù)為0;對(duì)于字母B來說,它是一個(gè)完整的連通域并且有兩個(gè)黑色孔洞,因此“B”的歐拉數(shù)為-1;而字母C雖然是一個(gè)完整的連通域卻不存在孔洞,因此“C”的歐拉數(shù)為1。由此可見,依據(jù)連通域和孔洞信息,便可以將3個(gè)不同的英文字母分為3類。
圖3 歐拉數(shù)測試樣本及結(jié)果
本文針對(duì)邊緣檢測后光纖輪廓的特點(diǎn),在此計(jì)算基礎(chǔ)上對(duì)歐拉數(shù)做了新的使用定義:將邊緣檢測后光纖輪廓的外層定義為第1層輪廓即母輪廓,將光纖輪廓的內(nèi)層即孔洞輪廓定義為第2層輪廓即子輪廓,因此歐拉數(shù)新的定義便是母輪廓數(shù)量與子輪廓數(shù)量之差。對(duì)于正常情況下檢測完整的光纖輪廓的歐拉數(shù)計(jì)算,類似于字母“O”的一般定義計(jì)算;而對(duì)于在圖像邊緣處被截?cái)嗟墓饫w輪廓,由于邊界線的存在使其不再具有嚴(yán)格意義上的孔洞,因此這類光纖輪廓僅有第1層輪廓,類似于字母“C”的一般定義計(jì)算。圖4所示為歐拉數(shù)檢測結(jié)果,模擬繪制邊緣檢測后的幾種光纖輪廓示意圖及其歐拉數(shù)檢測結(jié)果。
圖4 歐拉數(shù)檢測結(jié)果
其中,左邊3個(gè)輪廓是為了驗(yàn)證不完整度對(duì)歐拉數(shù)計(jì)算的影響,右邊兩個(gè)輪廓是為了凸顯歐拉數(shù)的計(jì)算方式:當(dāng)輪廓內(nèi)有子輪廓時(shí),將母輪廓標(biāo)記為紅色,子輪廓標(biāo)記為綠色;否則,標(biāo)記為藍(lán)色。可以發(fā)現(xiàn),完整輪廓的歐拉數(shù)計(jì)算結(jié)果都為0(有子輪廓),不完整輪廓的歐拉數(shù)計(jì)算結(jié)果都為1(無子輪廓)。因此,本文便可將所有光纖輪廓依據(jù)新的歐拉數(shù)定義進(jìn)一步分類:若E≤0,將外輪廓填充為紅色,內(nèi)輪廓填充為黑色(背景色);若E>0,將輪廓填充為綠色。具體的邊緣優(yōu)化效果如圖5所示。如圖5(b)所示,紅色輪廓代表檢測到的“完整輪廓”,綠色輪廓代表“不完整輪廓”,實(shí)驗(yàn)結(jié)果基本滿足設(shè)計(jì)要求。為了進(jìn)一步分析該優(yōu)化方法的穩(wěn)定性,通過控制變量改變閾值和形態(tài)學(xué)參數(shù),實(shí)現(xiàn)在不同條件下的光纖數(shù)量檢測,如表1所示。
圖5 邊緣優(yōu)化效果
表1 邊緣優(yōu)化檢測結(jié)果
表中,光纖輪廓數(shù)量和完整輪廓數(shù)量的標(biāo)準(zhǔn)值是通過人工檢測計(jì)算出的實(shí)際值,檢測值是通過本文算法計(jì)算得到的測量值。通過分析數(shù)據(jù)可知,常規(guī)檢測模式(未采取優(yōu)化措施)下的檢測數(shù)量對(duì)閾值和形態(tài)學(xué)參數(shù)的變化比較敏感,不同參數(shù)會(huì)使邊緣處輪廓不同程度地被篩除,導(dǎo)致檢測結(jié)果略不穩(wěn)定;但是,在本文的預(yù)處理操作下,可以將光纖總數(shù)的檢測誤差率控制在0.271%,基本滿足設(shè)計(jì)需求。另一方面,本文主要研究的是“完整輪廓”和“不完整輪廓”的標(biāo)記與計(jì)算,結(jié)合圖5與表1可知,本文采取的基于歐拉數(shù)計(jì)算的邊緣優(yōu)化處理算法可以將完整輪廓的檢測誤差率控制在0.032%,檢測值與標(biāo)準(zhǔn)值幾乎一致,達(dá)到了預(yù)期設(shè)計(jì)要求;同時(shí),該優(yōu)化算法還降低了檢測結(jié)果受參數(shù)變化的影響,提高了穩(wěn)定性。
本文所涉及到的算法主要分為3個(gè)階段,圖6所示為光纖傳像束光纖數(shù)量檢測流程圖。
圖6 光纖傳像束光纖數(shù)量檢測流程圖
(1) 圖像預(yù)處理
針對(duì)性的圖像預(yù)處理技術(shù)可以大幅度提高檢測結(jié)果的準(zhǔn)確性[10]。對(duì)傳輸?shù)诫娔X的樣本圖像,首先進(jìn)行灰度處理及線性灰度增強(qiáng),將圖像中的像素進(jìn)行線性擴(kuò)展,從而有效改善曝光過度或模糊不清的問題。濾波處理選擇的是雙邊濾波,雖然運(yùn)行速度較慢,卻能很好地達(dá)到保邊緣和去噪的雙重目的[11]。再進(jìn)行閾值分割得到所有光纖的二值圖像,以及使用形態(tài)學(xué)運(yùn)算使目標(biāo)光纖的二值圖像特點(diǎn)更加明顯突出。最后進(jìn)行邊緣檢測,由于Canny算子易使邊緣不連續(xù),因此選擇了能用線條較好描述圖像的Sobel邊緣檢測。
(2) 邊緣優(yōu)化處理
針對(duì)邊緣檢測得到的二值圖像,在圖像邊緣處存在具有隨機(jī)不完整度的不完整輪廓,根據(jù)對(duì)輪廓進(jìn)行歐拉數(shù)計(jì)算,將所有輪廓分類處理并計(jì)算數(shù)量(具體操作如2.1節(jié)所示)。
(3) 各模塊調(diào)用CUDA
針對(duì)以上基于常規(guī)預(yù)處理方式得到的結(jié)果,雖然已可以準(zhǔn)確檢測出兩種類型的光纖數(shù)量,但是仍然和文獻(xiàn)中一樣存在著運(yùn)行速度緩慢的問題,尤其是雙邊濾波環(huán)節(jié),在對(duì)高像素圖像進(jìn)行處理時(shí),等待時(shí)間十分漫長。因此,本文研究了一種在Visual Studio的環(huán)境下,使用C++及開源計(jì)算機(jī)視覺庫(Open Source Computer Vision Library,OpenCV),通過使用CUDA調(diào)用GPU來實(shí)現(xiàn)算法加速運(yùn)行[12]的方法。
與中央處理器(Central Processing Unit,CPU)不同,GPU是專門為處理圖形任務(wù)而產(chǎn)生的芯片,一推出就包含了比CPU更大的帶寬和更多的處理單元,使得其在多媒體處理過程中能夠發(fā)揮更大的效能[13]。CPU的串行運(yùn)算與GPU的并行運(yùn)算之間的區(qū)別如圖7所示。
圖7 串行運(yùn)算與并行運(yùn)算的區(qū)別示意圖
傳統(tǒng)的CPU串行運(yùn)算包括以下幾個(gè)特點(diǎn):(1) 運(yùn)行在使用單一處理器的計(jì)算機(jī)上;(2) 一個(gè)問題可以分解成一系列離散的指令;(3) 離散的指令必須一個(gè)接著一個(gè)執(zhí)行;(4) 同一時(shí)刻只能執(zhí)行一條指令。
相比之下,GPU并行計(jì)算做了很多重要的改進(jìn):(1) 運(yùn)行在可以使用多個(gè)處理器的計(jì)算機(jī)上;(2) 一個(gè)問題可以分解成若干無直接關(guān)聯(lián)的指令集部分;(3) 每個(gè)部分可以進(jìn)一步細(xì)分為一系列離散的指令;(4) 這些離散的指令可以同時(shí)在不同處理器上分別執(zhí)行。
為充分利用GPU的計(jì)算能力,NVIDIA在2006年推出了CUDA編程模型,其包含了CUDA指令集架構(gòu)(Instruction Set Architecture,ISA)以及GPU內(nèi)部的并行計(jì)算引擎。CUDA體系結(jié)構(gòu)包含了3個(gè)部分:開發(fā)庫、運(yùn)行期環(huán)境和驅(qū)動(dòng)[13],其中開發(fā)庫提供了兩個(gè)標(biāo)準(zhǔn)的數(shù)學(xué)運(yùn)算庫——CUDA離散快速傅里葉變換(CUDA Fast Fourier Trans,CUFFT)和CUDA離散基本線性計(jì)算(CUDA Basic Linear Algebra Subprograms,CUBLAS),可以解決很多典型的大規(guī)模并行計(jì)算問題。通過這項(xiàng)技術(shù),用戶可以利用NVIDIA GeForce 8以后的GPU和較新的Quadro GPU進(jìn)行計(jì)算。以GeForce 8800 GTX為例,其核心擁有128個(gè)內(nèi)處理器,而利用CUDA技術(shù),就可以將這些內(nèi)處理器串通起來成為線程處理器去解決數(shù)據(jù)密集的計(jì)算,而各個(gè)內(nèi)處理器之間還可以交換、同步和共享數(shù)據(jù)[14]。
圖8所示為本文研究中針對(duì)如圖2所示樣本圖像,在算法流程和性能參數(shù)完全一致的前提下,分別使用CPU和GPU檢測的效果圖。
通過觀察可知,其檢測結(jié)果近乎一致,且“完整輪廓”和“不完整輪廓”均成功標(biāo)記,證實(shí)了該加速功能的可行性。在檢測效果圖中,有個(gè)別位置呈深藍(lán)色或灰色,是因?yàn)樵撐恢玫墓饫w存在斷絲或暗絲現(xiàn)象;同時(shí),有個(gè)別光纖輪廓沒有與實(shí)際輪廓完全重合,是因?yàn)樵撐恢玫墓饫w傳像束端面有污漬,干擾了識(shí)別檢測。表2所示為本文研究中針對(duì)該樣本分別使用兩種檢測方式的運(yùn)行時(shí)間對(duì)比結(jié)果。
圖8 CPU和GPU檢測效果圖
表2 系統(tǒng)加速時(shí)間對(duì)比結(jié)果
表中,濾波處理、閾值分割和邊緣檢測等預(yù)處理算法與現(xiàn)階段最新的算法相比并無實(shí)質(zhì)性的改進(jìn),而邊緣優(yōu)化處理算法則是本文獨(dú)立設(shè)計(jì)的改進(jìn)算法。實(shí)驗(yàn)結(jié)果表明,本文系統(tǒng)所采取的基于CUDA的加速處理方法,不僅檢測結(jié)果與標(biāo)準(zhǔn)值一致,而且加速效果明顯。其中,雙邊濾波提速約20倍,優(yōu)化算法及整體運(yùn)行減少近1/2時(shí)間。實(shí)驗(yàn)結(jié)果基本符合理論設(shè)計(jì)和需求,且檢測結(jié)果符合光纖傳像束的實(shí)際狀況。
本文針對(duì)光纖傳像束端面圖像檢測中圖像采集不完整的情況,提出了一種基于歐拉數(shù)計(jì)算的邊緣優(yōu)化處理算法,將圖像中所有光纖輪廓依據(jù)新的歐拉數(shù)使用定義進(jìn)行分類并計(jì)算數(shù)量,有效增強(qiáng)了檢測結(jié)果的穩(wěn)定性與準(zhǔn)確性。在改進(jìn)算法的同時(shí),針對(duì)常規(guī)的OpenCV圖像處理效率低下的問題,本文研究了一種基于CUDA的并行計(jì)算架構(gòu),通過調(diào)用電腦GPU來加速圖像處理系統(tǒng),在檢測準(zhǔn)確率不下降的前提下大幅度減少了程序運(yùn)行時(shí)間,提高了工作效率。本文提出的檢測思路及方法不僅適用于光纖傳像束的端面檢測研究,也廣泛適用于對(duì)圓或類圓目標(biāo)的定位及數(shù)量檢測。