劉卓帆,袁銳
(廣東海洋大學(xué),廣東湛江 524003)
焊接也稱作熔接,是一種以加熱、高溫或者高壓的方式接合金屬或其他熱塑性材料如塑料的現(xiàn)代工藝過程,它已滲透到制造業(yè)的各個領(lǐng)域,直接影響產(chǎn)品質(zhì)量[1]。在國內(nèi),大部分企業(yè)在焊接完成后,需要人工觀察、檢查焊接點處是否焊接成功。
伴隨經(jīng)濟(jì)的高速發(fā)展,計算機(jī)視覺技術(shù)和它的相關(guān)的產(chǎn)業(yè)在近些年也逐漸興起。計算機(jī)視覺是用機(jī)器代替人眼對圖片進(jìn)行觀察判斷,圖像處理是以計算機(jī)視覺為基石的技術(shù),圖像處理技術(shù)已經(jīng)走入了實際的生產(chǎn)和應(yīng)用中,成為生產(chǎn)環(huán)節(jié)的一種技術(shù)手段。
軟件使用Anaconda編程集成包為開發(fā)工具,基于Python語言中Web框架的Jupyter Notebook設(shè)計與實現(xiàn)一款名為“焊點截取”的圖像處理軟件。程序開發(fā)庫主要包括:Tkinter、OpenCV、PIL、Torchvision、Os等庫和標(biāo)記語言Markdown。開發(fā)環(huán)境為:操作系統(tǒng)Win10(64位)、開發(fā)語言Python3.8.0、Web應(yīng)用程序Jupyter Notebook交互式筆記本。
考慮到運(yùn)行效率和軟件的后期開發(fā)和維護(hù),使用Jupyter Notebook實現(xiàn),在一定程度上提高了可維護(hù)性、可行性,為后續(xù)軟件迭代發(fā)展打下基礎(chǔ)。軟件的主要功能需要使用到可以加載圖片、查看圖片形狀和分辨率、顯示圖片、調(diào)整圖像大小,用于解決計算機(jī)視覺問題的OpenCV庫[2];可以直接創(chuàng)建、排版簡單、可讀、直觀、學(xué)習(xí)成本低、支持插入圖片、輕松地導(dǎo)出HTML、md文件的Markdown;Python的標(biāo)準(zhǔn)GUI庫Tkinter;Python的圖像處理庫PIL庫;Pytorch圖形庫中的torchvision庫,以及Python中整理文件和目錄最為常用的模塊os庫。這些庫函數(shù)很大程度上方便了開發(fā)和優(yōu)化了開發(fā)的代碼,使軟件代碼的使用周期更為長久。利用Mardown標(biāo)記語言,使得軟件的代碼樣式鮮明,增強(qiáng)代碼的可讀性,便于后續(xù)觀察、修改、復(fù)制。
整體界面設(shè)計基于OpenCV計算機(jī)視覺庫實現(xiàn)的圖像處理軟件“焊點截取”的功能模塊圖,見圖1。
圖1 焊點截取的功能模塊圖
在實現(xiàn)功能操作前需要將本設(shè)計用的Python第三方庫全部導(dǎo)入到工程項目中,包括Tkinter、OpenCV、PIL、Os、PIL、numpy、Torchvision等。其中numpy工具包是一個由多維數(shù)組對象和用于處理數(shù)組的例程集合組成的庫,支持大量高維度數(shù)組與矩陣運(yùn)算。而圖片正是龐大的二維或者三維矩陣,圖像處理涉及對數(shù)組的變換和運(yùn)算。
二值化是圖像分割的一種方法,二值化是把灰度圖像轉(zhuǎn)換成為二值圖像[3]。二值化的過程是,設(shè)置一個臨界值,把大于這個臨界值的像素變成預(yù)先設(shè)置好的灰度極大值,把小于這個臨界值的像素變成預(yù)先設(shè)置好的灰度極小值,由此達(dá)到二值化的效果。用這種方法可以簡化數(shù)字圖像信息,提高處理的速度。
飽和度指色彩的鮮艷程度,在色彩學(xué)中,原色飽和度最高,隨著飽和度降低,色彩變得暗淡直至成為無彩色,即失去色相的色彩[4]。色彩作為信息的載體,它不僅適用于設(shè)計形式,還作為傳達(dá)信息的主體??梢酝ㄟ^調(diào)節(jié)飽和度對數(shù)字圖像中的次要信息進(jìn)行過濾。
rect核就是一個小的矩陣,在形態(tài)學(xué)操作過程中,通常是對二值化后的圖像進(jìn)行操作,此過程中的對象一般有兩個,一個是原圖像,即要進(jìn)行處理的圖像,另一個就是核或者結(jié)構(gòu)化元素。核可以看作是一個矩陣,這個矩陣由數(shù)組構(gòu)成可以自由定義,也可以通過getStructuringElement函數(shù)獲得指定rect核的大?。⊿ize(a,b)就是a*b大小的矩陣)和形狀(方形、圓形等)核。核在圖像處理中的作用過程,就是rect核矩陣從原始圖像的左上角開始滑動,遍歷完整個圖像的同時一直進(jìn)行運(yùn)算的過程,這個過程中會給每一個點賦予新的值,從而實現(xiàn)不同的形態(tài)學(xué)處理。
利用核與圖像之間進(jìn)行卷積運(yùn)算來實現(xiàn)圖像處理,在圖片模糊、銳化、凹凸、邊緣檢測等過程中都會用卷積運(yùn)算實現(xiàn)。
介紹開運(yùn)算、閉運(yùn)算前,要先介紹形態(tài)學(xué)處理操作中的腐蝕、膨脹操作。膨脹操作是根據(jù)選擇的核的大小對圖像進(jìn)行膨脹處理,連接起來圖塊的最外圍增加相應(yīng)的圖塊。腐蝕操作則會根據(jù)選擇的核的大小對圖像進(jìn)行腐蝕處理,將連接起來圖塊的最外圍的灰度值或者RGB值變?yōu)?。
閉運(yùn)算先膨脹后腐蝕,把中心比較大的塊連接為一個整體,填補(bǔ)了空白的縫隙,開運(yùn)算先腐蝕后膨脹,它對圖像輪廓進(jìn)行平滑操作,可以達(dá)到去除了邊緣小點,使得焊接點邊緣變得圓潤的作用。
將一幅擁有RGB三通道的彩色圖像轉(zhuǎn)化為只擁有一條灰度通道的圖像這一過程稱為灰度化處理。這種方法會丟失原始圖像的色彩信息,但由于RGB三通道變成了灰度通道后矩陣維數(shù)下降,需要處理的數(shù)據(jù)呈幾何級下降,使得圖像處理的運(yùn)算速度大幅度提高。
亮度是圖像的明暗程度,對比度是指圖像顏色種類的多少,色度劃分是為了便于以一定標(biāo)準(zhǔn)指定各式各樣的顏色,其實質(zhì)上是一個標(biāo)準(zhǔn)系統(tǒng),通過系統(tǒng)中的點來代表每一種顏色。可以對圖像的色調(diào)范圍進(jìn)行調(diào)整,增加亮度或者陰影,將不合適獲取焊接點區(qū)域的圖片進(jìn)行修正。
高斯濾波[5]是線性平滑濾波的一種,對于那些服從正態(tài)分布的噪聲有很好的抑制作用,適用于消除高斯噪聲。在實際場景中,通常都會假設(shè)圖像中包含的噪聲為高斯白噪聲,在許多圖像預(yù)處理的過程中,都會使用高斯濾波進(jìn)行降噪。
高斯濾波和均值濾波相似,都是利用一個掩膜和圖像進(jìn)行卷積求解。高斯濾波的模板系數(shù)會隨著距離模板中心距離的增大而減小并且服從二維高斯分布。所以高斯濾波器相較于均值濾波器而言,對圖像模糊程度比較小。本設(shè)計為了保持圖像的整體細(xì)節(jié),使用高斯濾波對圖像進(jìn)行噪點抑制。
本設(shè)計通過灰度化將圖片變成灰度圖,減小圖像原始數(shù)據(jù)量,便于后續(xù)處理時計算量更少,以此提高焊接點區(qū)域截取的正確性和正確率。使用進(jìn)行圖像分割的二值化方法,用多個閾值和多個二值化方法將焊接區(qū)域和背景分離簡化,便于后期的處理,選取出最優(yōu)的二值化方法進(jìn)一步提高處理速度。在圖像的預(yù)處理中使用圖像增強(qiáng)模塊中的其他功能,它們主要用于提取圖像中的感興趣區(qū)域[6]、對表達(dá)和描繪有意義的區(qū)域。感興趣區(qū)域是指圖片中蘊(yùn)含信息量最密集的區(qū)域。如軟件中的焊接點區(qū)域,使后續(xù)的識別工作能夠抓住圖像焊接點區(qū)域,提高程序區(qū)分形狀特征的能力,成為圖像增強(qiáng)技術(shù)的有力補(bǔ)充。預(yù)處理前后對比見圖2。
圖2 綜合對比圖
設(shè)計圖片的選擇的功能鍵需要使用到前文的提到過的tkinter庫、os庫、Torchvision庫和PIL庫。
os模塊提供Python程序與操作系統(tǒng)進(jìn)行交互的接口,tkinter庫進(jìn)行窗口視窗設(shè)計,Torchvision庫中vision.transforms工具庫將圖片按比例變?yōu)殚L300寬400的圖像方便在圖像顯示區(qū)顯示、PIL庫進(jìn)行圖像的存儲和顯示。
保存圖片的功能鍵,只需要使用到os模塊提供的接口,將程序與操作系統(tǒng)進(jìn)行交互。在os模塊提供的接口前需要定義outfile的路徑。
在本文前面提到的選擇圖片和保存圖片,都需要顯示路徑這項功能將程序與用戶操作相連接來實現(xiàn)。顯示路徑的功能實現(xiàn)只需要用到tkinter庫,事實上它就是一種面向?qū)ο蟮腉UI工具包TK的Python編程接口,提供了快速便利地創(chuàng)建Python GUI應(yīng)用程序的方法。
目前的計算機(jī)桌面應(yīng)用程序大多數(shù)為圖形化的用戶界面,結(jié)束功能通過鼠標(biāo)對菜單、按鈕等圖形化元素觸發(fā)指令,并從標(biāo)簽、對話框等圖形化顯示容器中獲取人機(jī)對話信息。按鈕上的信息就是獲取人機(jī)對話信息,而按鈕就是人機(jī)對話的重要工具。按鈕設(shè)計只需要用到tkinter庫就可以快速便利地實現(xiàn),退出功能只需要將tkinter打開的win窗口關(guān)掉就可以實現(xiàn)。
焊接直接影響產(chǎn)品質(zhì)量、可靠性、壽命、生產(chǎn)成本、效率以及市場反應(yīng)速度。焊接點是金屬焊件或者塑料焊件熔焊時,焊件接觸的位置。通常情況下焊接的質(zhì)量通過焊接點的熔接情況判斷。焊接點區(qū)域獲取的功能鍵需要使用到前文的提到過的findContours函數(shù)找出焊接點輪廓,通過OpenCV計算出最大輪廓的旋轉(zhuǎn)邊界框,提取出輪廓中面積最大的矩形,最后在原圖中進(jìn)行截取。截取效果見圖3。
圖3 整體界面圖
界面的總體設(shè)計如圖3所示,分為三大模塊:圖像增強(qiáng)模塊、基礎(chǔ)模塊、圖像分析模塊。其中圖像分析模塊是整個系統(tǒng)的核心模塊,它的功能是截取處理加工后圖像的焊接點區(qū)域?;A(chǔ)模塊的功能包括:圖像處理前的圖片選擇功能、圖像處理后的保存圖片功能、退出功能。圖像增強(qiáng)模塊的功能包括:分離背景和目標(biāo)的二值化功能、飽和度功能、rect核運(yùn)算功能、開運(yùn)算功能、閉運(yùn)算功能、隨機(jī)灰度化功能、亮度、色度、對比度、調(diào)節(jié)功能。
“焊點截取”進(jìn)行操作后新的圖像立刻呈現(xiàn),處理速度快,使軟件反饋時間短,增強(qiáng)用戶體驗;圖像處理方法可控,處理后的圖片結(jié)果,更加精確;界面極簡,功能界面一目了然,適用于工業(yè)應(yīng)用。
本設(shè)計還可以單獨使用空間域增強(qiáng)模塊對圖片目標(biāo)進(jìn)行縮小、放大、分離、結(jié)合和圖片像素修復(fù),使用戶可以快速得到自己想要的效果圖?!昂更c截取”這款軟件的應(yīng)用具有可平移性,“焊點”區(qū)域可以根據(jù)不同的目標(biāo)問題修改成“感興趣區(qū)域”。如:在醫(yī)學(xué)成像中,測量腫瘤的邊界,判斷腫瘤的大小;在評估心臟功能時,測量心內(nèi)膜邊界,判斷心動周期的不同階段;測量2D地圖中特殊的多邊形區(qū)域,錄入地理信息系統(tǒng)中。在這些應(yīng)用中都可以使用“焊點截取”這款軟件。
實際的測試的過程中,本設(shè)計與運(yùn)用神經(jīng)網(wǎng)絡(luò)的圖片截取焊接點區(qū)域相比,傳統(tǒng)算法實現(xiàn)的圖像處理雖然比較方便,但是魯棒性較差。由于含標(biāo)簽的焊接圖片庫較小,神經(jīng)網(wǎng)絡(luò)算法不適用。這些問題在以后的程序開發(fā)中,可以嘗試人工添加標(biāo)簽后,結(jié)合神經(jīng)網(wǎng)絡(luò)或者傳統(tǒng)算法和神經(jīng)網(wǎng)絡(luò)算法相互結(jié)合等方法進(jìn)行優(yōu)化,實現(xiàn)全自動焊接點質(zhì)檢,完成軟件迭代。