(東北大學(xué)軟件學(xué)院 沈陽(yáng) 110819)
硬度是材料最重要的參數(shù)之一,其測(cè)試在生產(chǎn)過(guò)程中具有非常重要的意義。布氏硬度以其測(cè)量精確度高、可重復(fù)性好等優(yōu)點(diǎn),得到了廣泛應(yīng)用。布氏硬度試驗(yàn)方法原理為以一定的壓頭和試驗(yàn)力在試樣上壓出壓痕后,測(cè)量試樣表面壓痕的直徑,換算為布氏硬度[1]。
傳統(tǒng)的布氏硬度測(cè)試方法采用讀數(shù)顯微鏡人工測(cè)量壓痕尺寸,基于機(jī)器視覺的測(cè)量具有非接觸式、測(cè)量速度快、精度高、柔性好等特點(diǎn),越來(lái)越受到重視,其關(guān)鍵是檢測(cè)并準(zhǔn)確測(cè)量壓痕圓的直徑。另外圓檢測(cè)在很多方面都有應(yīng)用。如虹膜檢測(cè)[2],細(xì)胞計(jì)數(shù)[3]、圓形器件或圖標(biāo)識(shí)別和定位[4],圓形物計(jì)數(shù)[5],標(biāo)記定位[6~7]等。
目前圓檢測(cè)方法主要有三類:圓霍夫變換、隨機(jī)抽樣一致性(random sampling consistency,RANSAC)和最小二乘法,以及它們的改進(jìn)[8~12]。這些方法在特定領(lǐng)域內(nèi)均取得了良好的效果。但它們均假定邊緣檢測(cè)到的絕大多數(shù)點(diǎn)為圓周上的點(diǎn),而且難以處理圓分裂或者多圓的情況,影響了其實(shí)用價(jià)值。本文根據(jù)分裂圓的特點(diǎn),利用部分圓周與其最緊致矩形的切點(diǎn)關(guān)系、找到三個(gè)確定的切點(diǎn)求初始圓,自動(dòng)判別屬于同一圓的不同部分,且能檢測(cè)多個(gè)圓。利用凸包濾除非圓周點(diǎn),結(jié)合迭代純化最小二乘法,可以得到精確的圓半徑,實(shí)驗(yàn)表明了本方法的有效性。
在實(shí)際應(yīng)用中,尤其是布氏硬度測(cè)量,檢測(cè)圓時(shí)經(jīng)常遇到多個(gè)圓、圓分裂、圓殘缺不全的情況,如圖1所示。一般的做法是,對(duì)圖像進(jìn)行預(yù)處理、閾值化、邊緣檢測(cè)之后,采用圓Hough變換或最小二乘得到圓心和圓半徑。大多數(shù)圓檢測(cè)方法適用于單個(gè)圓檢測(cè),如果是多個(gè)圓的情況,則需要明確給出圓的個(gè)數(shù)或百分比。
對(duì)于圖1中的幾種情況,傳統(tǒng)方法存在以下問(wèn)題:1)對(duì)于多個(gè)圓,一般需要給出準(zhǔn)確的圓個(gè)數(shù)或百分比,難以完全自動(dòng)化;2)如果圓分裂,難以確定哪些分裂部分屬于同一圓,從而影響到圓檢測(cè)的準(zhǔn)確性;3)對(duì)于不完整圓,由于檢測(cè)結(jié)果不可靠,一般采取放棄的策略;4)即使對(duì)于完整的圓進(jìn)行檢測(cè),也嚴(yán)重依賴于邊緣檢測(cè)的精度,而由于實(shí)際采集的圖像中噪聲的影響,邊緣點(diǎn)位置的偏差對(duì)造成最終檢測(cè)到的圓心位置或半徑的偏差。
圖1 布氏硬度壓痕圓圖像
本文提出的方法能很好地解決上述問(wèn)題。本文方法的優(yōu)勢(shì)在于:1)能夠自動(dòng)判斷圓是否分裂,對(duì)于分裂的圓,能夠自動(dòng)將分裂的各部分合并為一個(gè)完整的圓;2)能夠自動(dòng)檢測(cè)多個(gè)圓,而毋需給出圓的個(gè)數(shù)或百分比;3)采用迭代純化最小二乘法,能夠得到亞像素的圓心和半徑,對(duì)部分圓也能夠準(zhǔn)確檢測(cè)。
圖像中的局部區(qū)域,可以用矩形框包圍。這些矩形框可以有多個(gè),其中面積最小的稱為最小外接矩形。
完整圓弧的最小外接矩形為正方形,圓弧與外接矩形的切點(diǎn)是正方形各邊的中點(diǎn)。據(jù)此可以判斷圓是否分裂,同時(shí)估算圓心位置和半徑。
對(duì)于部分圓弧,有如下的定理:
定理1部分圓弧的最小外接矩形邊長(zhǎng)不全相等,最小外接矩形長(zhǎng)邊的中點(diǎn)在圓弧上,且是其與圓弧的切點(diǎn)。
證明:如圖2所示,實(shí)線表示以圓弧的弦為一條長(zhǎng)邊的外接矩形,顯然其另一條長(zhǎng)邊在中點(diǎn)與圓弧相切,設(shè)該矩形的長(zhǎng)和寬分別為L(zhǎng)與W,而其他任意的外接矩形(用虛線表示)的長(zhǎng)和寬分別為L(zhǎng)'與W',兩個(gè)外接矩形的夾角為θ,則有:
以上兩式左右兩邊分別相乘,可得:
因此圓弧的最小外接矩形長(zhǎng)邊的中點(diǎn)是圓弧與矩形的切點(diǎn),短邊與圓弧相交或相切。
根據(jù)此定理,在得到一段曲線的最小外接矩形后,就可以根據(jù)矩形長(zhǎng)邊中點(diǎn)是否為曲線點(diǎn)來(lái)確定該段曲線是否為圓弧,如果是圓弧,則可以得到圓弧上三個(gè)點(diǎn),從而得到相對(duì)確定的候選圓。
圖2 部分圓及其最小外接矩形
如果一個(gè)圓分裂成兩個(gè)或多個(gè)部分,則各個(gè)部分的外接圓之間有交叉,即兩圓半徑之和大于圓心之間的距離。對(duì)于交叉的圓,需要進(jìn)行合并。設(shè)圓Cp、Cq的圓心分別為(xp,yp)、(xq,yq),半徑分別為Rp、Rq,則合并后的圓心和半徑分別為
圖3 輪廓(實(shí)線)及凸包(點(diǎn))
區(qū)域凸包是指區(qū)域的外接凸多邊形,這個(gè)凸多邊形將該區(qū)域所有像素點(diǎn)都包含在內(nèi)[13]。將合并之后的圓的各部分看作一個(gè)區(qū)域,則原來(lái)部分圓的圓弧部分將會(huì)包含在凸包點(diǎn)中,而非圓弧部分由于違反凸包的外凸特性,所以不包含在凸包點(diǎn)中。如圖3所示。圖中實(shí)線為圓區(qū)域輪廓,虛線為其凸包??梢钥闯?,凸包可以將分裂圓上的非圓弧點(diǎn)排除,同時(shí)如果分裂圓內(nèi)有區(qū)域,其輪廓點(diǎn)也不會(huì)保留。但凸包輪廓點(diǎn)中也包含非輪廓點(diǎn),可以通過(guò)凸包與原區(qū)域輪廓點(diǎn)求交集得到合并圓弧點(diǎn)。
如果能夠得到三個(gè)以上同屬一個(gè)圓的圓弧點(diǎn),就可以利用圓Hough變換法或最小二乘擬合,得到較為精確的圓參數(shù)[12]。圓Hough變換要遍歷三維參數(shù)空間,對(duì)內(nèi)存和時(shí)間的消耗特別大,且檢測(cè)結(jié)果精度受參數(shù)離散化程度的影響也大,但近年來(lái)提出了很多改進(jìn)算法。最小二乘法理論嚴(yán)密、精度高,擬合效果佳,是目前圓測(cè)量的主要方法[12]。
在實(shí)際圖像的獲取和處理過(guò)程中,難免會(huì)受到各種干擾,造成檢測(cè)到輪廓點(diǎn)不準(zhǔn)確,或者將噪聲點(diǎn)誤認(rèn)為輪廓點(diǎn),影響最終擬合結(jié)果。而最小二乘法在圓擬合時(shí)盡量去適應(yīng)所有點(diǎn),包括噪聲點(diǎn)和不準(zhǔn)確的輪廓點(diǎn)(本文稱之為離群點(diǎn)),顯然這些離群點(diǎn)會(huì)大大影響擬合精度。為此提出RANSAC圓擬合算法[11],但RANSAC算法中抽樣耗時(shí)占算法總耗時(shí)的比重較大,且RANSAC并不能保證結(jié)果一定正確,為了保證算法有足夠高的合理概率,必須小心的選擇算法的參數(shù)(參數(shù)配置)。但在圓擬合過(guò)程中,特別是在離散點(diǎn)非均勻采集的情況下,經(jīng)常會(huì)出現(xiàn)只運(yùn)用最小二乘法時(shí)擬合精度不高的狀況。
為了克服以上方法的局限性,本文提出迭代純化最小二乘法。與文獻(xiàn)[12]的方法不同,本文方法主要是基于3σ準(zhǔn)則[14]。在前次最小二乘擬合的基礎(chǔ)上,剔除離群點(diǎn)之后再進(jìn)行最小二乘擬合,直到符合設(shè)定條件為止。而文獻(xiàn)[12]提出的迭代優(yōu)化最小二乘圓曲線擬合方法,是為了提高離散點(diǎn)非均勻采集情況下的擬合精度,并不剔除離群點(diǎn)。
根據(jù)3σ準(zhǔn)則,干擾或噪聲造成的奇異數(shù)據(jù)的難以滿足正態(tài)分布。設(shè)μ代表均值,σ代表標(biāo)準(zhǔn)差。根據(jù)數(shù)理統(tǒng)計(jì),觀測(cè)值分布在(μ-3σ,μ+3σ)中的概率為0.9973。因此可以認(rèn)為,觀測(cè)值幾乎全部集中在(μ-3σ,μ+3σ)區(qū)間內(nèi),超出這個(gè)范圍的可能性僅占不到0.3%。如果一組測(cè)量數(shù)據(jù)中某個(gè)測(cè)量值的殘余誤差的絕對(duì)值大于3σ,則可認(rèn)為該測(cè)量值為異常值,應(yīng)剔除,不參加擬合。
本文提出的迭代純化最小二乘圓擬合算法如下。
輸入:N個(gè)輪廓點(diǎn)的坐標(biāo){(Xi,Yi)|1 ≤i≤N},允許標(biāo)準(zhǔn)差σ,迭代次數(shù)j=0。
輸出:圓心坐標(biāo)(xC,yC)和圓半徑R。
步驟2:根據(jù)每一個(gè)輪廓點(diǎn)坐標(biāo)和上一步得到的圓心坐標(biāo),計(jì)算輪廓點(diǎn)和圓心之間的距離(輪廓點(diǎn)半徑),計(jì)算其均值(平均半徑)Rj和標(biāo)準(zhǔn)差;
步驟3:對(duì)每一個(gè)輪廓點(diǎn),計(jì)算輪廓點(diǎn)半徑與平均半徑差的絕對(duì)值
步驟4:若輪廓點(diǎn)數(shù)Nj>10且σj>σ,剔除掉的輪廓點(diǎn),得到新的輪廓點(diǎn)集,重復(fù)步驟1~步驟3。
否則,結(jié)束。
本文方法的流程框圖見圖4。輸入為待檢測(cè)圖像,輸出為一個(gè)或多個(gè)圓心坐標(biāo)和半徑值。算法說(shuō)明如下。
1)由于布氏硬度檢測(cè)的壓痕圓表面平滑,非圓部分一般較為粗糙,其成像結(jié)果表現(xiàn)為壓痕圓部分灰度較低且灰度變化小。因此先進(jìn)行圖像增強(qiáng),強(qiáng)化圖像灰度變化。一般可采用像素局部方差、梯度強(qiáng)度和信息熵,這三種值越大,則灰度變化越大,反之亦然。根據(jù)布氏壓痕圓圖像的形成機(jī)理,也可采用Gabor濾波[15]進(jìn)行增強(qiáng)。
2)對(duì)增強(qiáng)后的圖像采用Otsu法進(jìn)行二值化[16]。由于噪聲干擾,且工件表面不平整,取閾值之后有許多細(xì)小的非圓坑黑點(diǎn),采用數(shù)學(xué)形態(tài)學(xué)運(yùn)算去除孤立小目標(biāo),形成多個(gè)連通區(qū)域。進(jìn)而提取每個(gè)目標(biāo)區(qū)域的輪廓。
3)根據(jù)目標(biāo)區(qū)域輪廓,得到其最小外接矩形。根據(jù)目標(biāo)區(qū)域最小外接矩形的面積和長(zhǎng)寬比,可以排除非圓區(qū)域。
圖4 本文方法流程框圖
4)根據(jù)2.2節(jié)的方法,判斷最小外接矩形長(zhǎng)邊中點(diǎn)是否在圓弧上,如果在,則該輪廓為候選圓弧。由長(zhǎng)邊中點(diǎn)、兩條短邊上與短邊中點(diǎn)最近的圓弧的公共點(diǎn),得到三點(diǎn),根據(jù)這三點(diǎn)得到初步圓。判斷相鄰的兩個(gè)區(qū)域的初步圓是否有交叉,如果有交叉,則按照式(3)進(jìn)行合并。并將它們的輪廓點(diǎn)歸并。
5)圓歸并后,其輪廓點(diǎn)中包含非圓弧點(diǎn),不能直接擬合。為此,對(duì)歸并的區(qū)域,求合并圓的凸包。求合并區(qū)域的輪廓點(diǎn)與凸包點(diǎn)的交集,得到的點(diǎn)大概率為最終所求圓輪廓點(diǎn)上的點(diǎn)。
6)按照第3節(jié)的方法,進(jìn)行迭代純化最小二乘擬合,得到最終所求圓。輸出圓心坐標(biāo)與半徑值。
本文的研究目標(biāo)是準(zhǔn)確檢測(cè)出在實(shí)際生產(chǎn)環(huán)境下布氏硬度測(cè)量圖像中可能分裂的多個(gè)圓,并精確測(cè)量其半徑。為了驗(yàn)證本文方法的有效性,在Windows10平臺(tái)上,采用Python 3.5語(yǔ)言,結(jié)合OpenCV3.0,實(shí)現(xiàn)了本文圓檢測(cè)及擬合算法。計(jì)算機(jī)配置為Intel Core i5-2400處理器,主頻3.10G Hz,內(nèi)存4G。實(shí)驗(yàn)圖像為用布氏硬度計(jì)實(shí)際拍攝的圖像,部分典型圖像如圖1所示,圖像分辨率為1024×1280。由圖中可看出,布氏硬度圖像存在光照無(wú)法統(tǒng)一、背景紋理復(fù)雜多樣、尺度大小不一、圓個(gè)數(shù)不定、圓面光照不均等特點(diǎn),給圓檢測(cè)及測(cè)量造成困難。
圖1(a)中的圓明顯分為兩部分,圖5給出了本文方法的主要中間結(jié)果及最終結(jié)果。由圖5(a)可以看出,紋理增強(qiáng)極大突出了圓坑與周圍背景的對(duì)比度,給后面取閾值帶來(lái)很大方便。雖然經(jīng)過(guò)二值化、形態(tài)學(xué)濾波之后,仍然有少數(shù)噪音點(diǎn),但通過(guò)面積、長(zhǎng)寬比等排除掉幾乎所有的噪音點(diǎn),我們只需要在保留下來(lái)的目標(biāo)區(qū)域求最小外接矩形,并判斷長(zhǎng)邊中點(diǎn)是否為圓弧切點(diǎn),如圖5(c)所示。圖5(d)中的細(xì)線圓為各目標(biāo)區(qū)域的初步圓,同一圓分裂后的各部分之間有交叉,可以被合并。粗線圓為合并后的圓。圖5(e)為圓弧輪廓點(diǎn)與區(qū)域凸包點(diǎn)求交集后的結(jié)果,可以看出,只有區(qū)域的最外圍的輪廓點(diǎn)被保留下來(lái),但此時(shí)輪廓中仍然可能包含小突起噪聲點(diǎn)。對(duì)此我們采用迭代純化最小二乘擬合,逐步排除這些離群點(diǎn)的影響,就可以得到精確的圓半徑。
檢測(cè)到圓并得到亞像素的圓半徑值之后,結(jié)合攝像機(jī)標(biāo)定值,可以得到實(shí)際圓坑半徑大小,進(jìn)而得到布氏硬度值。
執(zhí)行效率方面,平均每幅圖像處理時(shí)間為29.4ms,滿足硬度計(jì)的實(shí)際要求。
為了檢驗(yàn)本文方法的性能,在實(shí)拍的28幅布氏硬度壓痕圖像(每幅圖像可能有一個(gè)或多個(gè)圓,共47個(gè)圓)上,將本文方法與目前常用的典型方法做了對(duì)比。這三種方法分別是曲率輔助的霍夫變換(CACD)[5],經(jīng)典霍夫變換(CHT),和隨機(jī)霍夫變換(RHT)[11],四種方法的檢測(cè)結(jié)果見表1,其中準(zhǔn)確率=正確檢測(cè)數(shù)/(實(shí)際數(shù)+誤撿數(shù))。圖6是四種方法對(duì)圖1(f)的檢測(cè)結(jié)果。
圖5 圖1(a)圓檢測(cè)的主要中間結(jié)果及最終結(jié)果
圖6 各方法對(duì)圖1(f)圓檢測(cè)的效果
表1 四種方法的平均準(zhǔn)確率及運(yùn)行時(shí)間
用于比較的三種方法均是在閾值化之后的基礎(chǔ)上檢測(cè)圓的,可以看出三種方法均不能檢測(cè)到所有圓,具有隨機(jī)性。CACD方法由于要進(jìn)行弧長(zhǎng)歸一化,傾向于檢測(cè)小圓,CHT方法檢測(cè)多圓個(gè)數(shù)不能確定,RHT方法傾向于檢測(cè)完整圓。本文方法可以處理多圓、分裂圓、部分圓的情況。
對(duì)28幅實(shí)拍圖像統(tǒng)計(jì),四種方法的平均準(zhǔn)確率和平均每幅運(yùn)行時(shí)間對(duì)比如表1所示,可以看出本文方法運(yùn)行效率最高。
圓檢測(cè)在很多方面都有應(yīng)用,尤其在布氏硬度測(cè)量中,壓痕圓的提取與測(cè)量是其關(guān)鍵。本文方法在紋理增強(qiáng)二值化的基礎(chǔ)上,采用最小外接矩形切點(diǎn)判斷,準(zhǔn)確得到圓弧上的三個(gè)點(diǎn),得到了基本確定的候選圓。圓交叉和合并能夠處理圓分裂的情況,求凸包有效保留最外圓弧點(diǎn),迭代純化最小二乘擬合更進(jìn)一步剔除了非圓弧點(diǎn),并且得到亞像素半徑值,為布氏硬度的精確測(cè)量打下了基礎(chǔ)。今后將研究本文圓檢測(cè)方法在其他領(lǐng)域的應(yīng)用,以及維氏硬度壓痕圖的提取等。