一種基于gpu并行運(yùn)算的印刷品缺陷檢測(cè)方法及系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法及系統(tǒng),方法包括:采集產(chǎn)品圖像;將產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分;對(duì)差分圖像進(jìn)行二值化處理;對(duì)二值化圖像相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置;將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置0;根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置確定填充范圍并進(jìn)行填充;對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作;將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置。本發(fā)明具有適用性廣、檢測(cè)準(zhǔn)確和處理速度快的優(yōu)點(diǎn),可廣泛用于機(jī)器視覺(jué)和工業(yè)檢測(cè)技術(shù)領(lǐng)域。
【專利說(shuō)明】
一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法及系統(tǒng)
技術(shù)領(lǐng)域
[0001]本發(fā)明涉及于機(jī)器視覺(jué)和工業(yè)檢測(cè)技術(shù)領(lǐng)域,尤其是一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法及系統(tǒng)。
【背景技術(shù)】
[0002]近年來(lái),隨著人們生活水平的不斷提高,人們對(duì)印刷品的質(zhì)量要求越來(lái)越高。傳統(tǒng)的人工目檢方式由于疲勞、個(gè)體差異等原因會(huì)造成誤檢或漏檢的情況。而印刷品質(zhì)量自動(dòng)檢測(cè)技術(shù)憑借其高速、非接觸、穩(wěn)定等優(yōu)點(diǎn),有效地避免了誤檢或漏檢的問(wèn)題,并提高了檢測(cè)效率和檢測(cè)速度,降低了企業(yè)的生產(chǎn)成本。
[0003]隨著印刷品質(zhì)量檢測(cè)系統(tǒng)的廣泛應(yīng)用,針對(duì)印刷品的缺陷檢測(cè),已出現(xiàn)了各種各樣的方法。缺陷的形態(tài)各種各樣,常見的有套色誤差、飛墨、文字模糊、漏印、黑點(diǎn)、偏色等,然而目前的這些檢測(cè)方法都只能在一定程度上識(shí)別出缺陷,在實(shí)際的工程應(yīng)用中仍存在著較大的改善空間。隨著對(duì)印刷品質(zhì)量的要求越來(lái)越高,檢測(cè)精度不斷地提高,所需檢測(cè)圖片的分辨率越來(lái)越高,圖片也越來(lái)越大,現(xiàn)有的基于CPU的印刷品缺陷檢測(cè)方法在面對(duì)如此大規(guī)模的數(shù)據(jù)時(shí),處理速度和檢測(cè)精度都不能滿足要求。
[0004]國(guó)外對(duì)機(jī)器視覺(jué)在印刷工業(yè)的應(yīng)用研究開展得比較早,因此,機(jī)器視覺(jué)系統(tǒng)在國(guó)外的應(yīng)用很普遍,相反地,國(guó)內(nèi)對(duì)這方面的研究起步較晚,還是處于一個(gè)發(fā)展階段。國(guó)內(nèi)能夠開發(fā)出相關(guān)的成熟視覺(jué)檢測(cè)系統(tǒng)的公司不多,比較有代表性的有北京大恒圖像公司開發(fā)的針對(duì)人民幣印刷質(zhì)量的印刷在線質(zhì)量檢測(cè)系統(tǒng)和上海利盟德有限公司開發(fā)的高速字符/條碼在線識(shí)別的RA YMONDE系統(tǒng)。此外國(guó)內(nèi)的也對(duì)商業(yè)票證的缺陷識(shí)別算法進(jìn)行了研究。在國(guó)外,檢測(cè)票據(jù)類比較有名的視覺(jué)檢測(cè)系統(tǒng)有法國(guó)Axode公司的安全印務(wù)質(zhì)量監(jiān)測(cè)系統(tǒng),它在日本彩票、韓國(guó)彩票、歐元等印刷號(hào)碼的檢測(cè)中有廣泛的應(yīng)用,但是由于Axode公司的系統(tǒng)價(jià)格昂貴,限制了它在國(guó)內(nèi)的普及。
[0005]而在產(chǎn)品包裝材料方面的印刷品缺陷檢測(cè)的視覺(jué)檢測(cè)系統(tǒng),則以日本FUTEC公司研發(fā)的全自動(dòng)印品檢測(cè)和監(jiān)控系統(tǒng)以及以色列AVT公司研發(fā)的該類監(jiān)控設(shè)備比較有名。而日本的DAC、T0IQMEC和Keyence公司也有類似的產(chǎn)品。在國(guó)內(nèi),對(duì)印刷品缺陷檢測(cè)的相關(guān)研究也不少,有人提出了一種利用行程長(zhǎng)編碼對(duì)印刷品缺陷進(jìn)行檢測(cè)的方法,也有人對(duì)整個(gè)檢測(cè)系統(tǒng)的實(shí)現(xiàn)進(jìn)行了研究。但是目前國(guó)內(nèi)對(duì)印刷品缺陷檢測(cè)方法由于在檢測(cè)速度上達(dá)不到要求,大部分相關(guān)技術(shù)的公司都是以代理外國(guó)的產(chǎn)品為主,并沒(méi)有自主研發(fā)的成熟的視覺(jué)檢測(cè)系統(tǒng)。而國(guó)外的相關(guān)系統(tǒng)大多價(jià)格昂貴,嚴(yán)重制約了其在國(guó)內(nèi)的推廣和應(yīng)用。
[0006]GPU在2007年6月英偉達(dá)公司推出了⑶DA之后得到了迅速的發(fā)展。CUDA是C語(yǔ)言的一種擴(kuò)展,采用了類C語(yǔ)言進(jìn)行開發(fā);同時(shí),CUDA采用了統(tǒng)一處理架構(gòu),降低了編程的難度。而且相比AMD公司的GPU,NVIDIA公司的GPU加入了片內(nèi)共享存儲(chǔ)器,提高了效率。這些改進(jìn)使得CUDA架構(gòu)非常適合進(jìn)行GPU通用計(jì)算。CUDA平臺(tái)采用的是異構(gòu)的并行計(jì)算平臺(tái),S卩CPU+GHJ的計(jì)算平臺(tái),⑶DA認(rèn)為CPU可以控制和指揮GPU進(jìn)行工作,GPU是CPU的協(xié)處理器?;贑PU和GPU的設(shè)計(jì)特點(diǎn),這樣的異構(gòu)計(jì)算平臺(tái)可以讓CPU去處理邏輯復(fù)雜的事務(wù)和一些簡(jiǎn)單的計(jì)算任務(wù),而大規(guī)模的數(shù)據(jù)運(yùn)算則可以交給GPU來(lái)進(jìn)行,這樣子就大大提高了處理的效率。
[0007]目前,GPU通用計(jì)算已經(jīng)在科學(xué)計(jì)算、石油勘測(cè)、金融、圖像處理、視頻編碼等領(lǐng)域有了廣泛的應(yīng)用,但在印刷品缺陷檢測(cè)方面,還沒(méi)有相關(guān)的基于GPU的印刷品缺陷檢測(cè)方法出現(xiàn)。
【發(fā)明內(nèi)容】
[0008]為解決上述技術(shù)問(wèn)題,本發(fā)明的目的在于:提供一種適用性廣、檢測(cè)準(zhǔn)確和處理速度快的,基于GHJ并行運(yùn)算的印刷品缺陷檢測(cè)方法。
[0009]本發(fā)明的另一目的在于:提供一種適用性廣、檢測(cè)準(zhǔn)確和處理速度快的,基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng)。
[0010]本發(fā)明所采取的技術(shù)方案是:
一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,包括以下步驟:
51、采集產(chǎn)品圖像;
52、將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像;
53、對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分;
54、對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同;
55、將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O;
56、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充;
57、對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形;
58、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置。
[0011]進(jìn)一步,所述步驟S3包括:
531、將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為O,從而得到二值化圖像;
532、分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和h然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和A從而將二值化圖像劃分為cX 個(gè)區(qū)域。
[0012]進(jìn)一步,所述步驟S4具體為:
先將二值化圖像區(qū)域內(nèi)的奇數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置;再將二值化圖像區(qū)域內(nèi)的偶數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置。
[0013]進(jìn)一步,所述步驟S5具體為:
若緩存圖像中第i行第j列的像素值在設(shè)定閾值范圍之內(nèi),而且第i行第j-1列的像素值以及第i行第j+Ι列的像素值均不在設(shè)定閾值范圍之內(nèi),則將緩存圖像中第i行第j列的像素值由255置為O。
[0014]進(jìn)一步,所述步驟S6包括: 561、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置;
562、根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充;
563、判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則執(zhí)行步驟S7,反之,則返回步驟S4。
[0015]進(jìn)一步,所述步驟S7具體為:
判斷填充后的二值化圖像中待合并的兩個(gè)區(qū)域的邊界之間是否有缺陷連接,若是,則返回步驟S6,確定填充的范圍并進(jìn)行填充;反之,則直接將待合并的兩個(gè)區(qū)域進(jìn)行合并。
[0016]進(jìn)一步,所述步驟S8包括:
581、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,得到偏移后的圖像;
582、將偏移后的圖像與合并后的圖像進(jìn)行差分,得到包圍著缺陷的最小矩形的長(zhǎng)、寬和缺陷在產(chǎn)品圖像中的位置。
[0017]本發(fā)明所采取的另一技術(shù)方案是:
一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng),包括以下模塊:
采集模塊,用于采集產(chǎn)品圖像;
差分模塊,用于將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像;
二值化與區(qū)域劃分模塊,用于對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,用于確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分;
與運(yùn)算模塊,用于對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同;
消除模塊,用于將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O;
填充模塊,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充;
合并模塊,用于對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形;
偏移差分模塊,用于將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置;
所述采集模塊的輸出端依次通過(guò)差分模塊、二值化與區(qū)域劃分模塊、與運(yùn)算模塊、消除模塊、填充模塊和合并模塊進(jìn)而與偏移差分模塊的輸入端連接。
[0018]進(jìn)一步,所述二值化與區(qū)域劃分模塊包括:
二值化單元,用于將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為0,從而得到二值化圖像;
區(qū)域劃分單元,用于分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和仏然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和d,從而將二值化圖像劃分為c Xe/個(gè)區(qū)域;
所述二值化單元的輸入端與差分模塊的輸出端連接,所述二值化單元的輸出端與區(qū)域劃分單元的輸入端連接,所述區(qū)域劃分單元的輸出端和與運(yùn)算模塊的輸入端連接。
[0019]進(jìn)一步,所述填充模塊包括:
搜索單元,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置;
填充單元,用于根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充;
判斷單元,用于判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則轉(zhuǎn)至合并模塊,反之,則返回與運(yùn)算模塊;
所述搜索單元的輸入端與消除模塊的輸出端連接,所述搜索單元的輸出端通過(guò)填充單元進(jìn)而與判斷單元的輸入端連接,所述判斷單元的輸出端分別與合并模塊的輸入端以及與運(yùn)算模塊的輸入端連接。
[0020]本發(fā)明的方法的有益效果是:綜合應(yīng)用了差分、二值化處理、與運(yùn)算、干擾像素置
0、填充和合并操作來(lái)找到包圍著缺陷的最小矩形,進(jìn)而通過(guò)偏移和差分得到缺陷在產(chǎn)品圖像中的位置,能適應(yīng)多種形狀的缺陷檢測(cè)要求,大大提高了缺陷檢測(cè)的準(zhǔn)確性和增加了所能檢測(cè)的缺陷種類,適用性更廣且檢測(cè)更準(zhǔn)確;使用了基于GPU并行運(yùn)算的缺陷檢測(cè)方法來(lái)取代基于CPU的缺陷檢測(cè)方法,在面對(duì)高分辨率的圖像時(shí),仍然能保持較高的運(yùn)算速度;且專門針對(duì)CUDA的并行架構(gòu),對(duì)缺陷檢測(cè)算法進(jìn)行了優(yōu)化,進(jìn)一步提高了算法的運(yùn)算效率。
[0021]本發(fā)明的系統(tǒng)的有益效果是:綜合應(yīng)用了差分、二值化處理、與運(yùn)算、干擾像素置
0、填充和合并操作來(lái)找到包圍著缺陷的最小矩形,進(jìn)而通過(guò)偏移和差分得到缺陷在產(chǎn)品圖像中的位置,能適應(yīng)多種形狀的缺陷檢測(cè)要求,大大提高了缺陷檢測(cè)的準(zhǔn)確性和增加了所能檢測(cè)的缺陷種類,適用性更廣且檢測(cè)更準(zhǔn)確;使用了基于GPU并行運(yùn)算的缺陷檢測(cè)方法來(lái)取代基于CPU的缺陷檢測(cè)方法,在面對(duì)高分辨率的圖像時(shí),仍然能保持較高的運(yùn)算速度;且專門針對(duì)CUDA的并行架構(gòu),對(duì)缺陷檢測(cè)算法進(jìn)行了優(yōu)化,進(jìn)一步提高了算法的運(yùn)算效率。
【附圖說(shuō)明】
[0022]圖1為本發(fā)明一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法的整體流程圖;
圖2為本發(fā)明一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng)的結(jié)構(gòu)框圖;
圖3為本發(fā)明實(shí)施例一在印刷品質(zhì)量檢測(cè)系統(tǒng)中使用的基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法的流程圖;
圖4為相鄰兩行進(jìn)行與運(yùn)算以及填充的過(guò)程示意圖;
圖5為區(qū)域合并時(shí)邊界之間有缺陷連接的結(jié)構(gòu)示意圖;
圖6為區(qū)域合并時(shí)邊界之間沒(méi)有缺陷連接的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0023]參照?qǐng)D1,一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,包括以下步驟:
51、采集產(chǎn)品圖像;
52、將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像;
53、對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分;
54、對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同; 55、將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O;
56、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充;
57、對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形;
58、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置。
[0024]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S3包括:
531、將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為O,從而得到二值化圖像;
532、分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和h然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和A從而將二值化圖像劃分為cXt/個(gè)區(qū)域。
[0025]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S4具體為:
先將二值化圖像區(qū)域內(nèi)的奇數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置;再將二值化圖像區(qū)域內(nèi)的偶數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置。
[0026]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S5具體為:
若緩存圖像中第i行第j列的像素值在設(shè)定閾值范圍之內(nèi),而且第i行第j-Ι列的像素值以及第i行第j+Ι列的像素值均不在設(shè)定閾值范圍之內(nèi),則將緩存圖像中第i行第j列的像素值由255置為O。
[0027]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S6包括:
561、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置;
562、根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充;
563、判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則執(zhí)行步驟S7,反之,則返回步驟S4。
[0028]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S7具體為:
判斷填充后的二值化圖像中待合并的兩個(gè)區(qū)域的邊界之間是否有缺陷連接,若是,則返回步驟S6,確定填充的范圍并進(jìn)行填充;反之,則直接將待合并的兩個(gè)區(qū)域進(jìn)行合并。
[0029]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述步驟S8包括:
581、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,得到偏移后的圖像;
582、將偏移后的圖像與合并后的圖像進(jìn)行差分,得到包圍著缺陷的最小矩形的長(zhǎng)、寬和缺陷在產(chǎn)品圖像中的位置。
[0030]參照?qǐng)D2,一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng),包括以下模塊:
采集模塊,用于采集產(chǎn)品圖像;
差分模塊,用于將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像;
二值化與區(qū)域劃分模塊,用于對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,用于確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分; 與運(yùn)算模塊,用于對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同;
消除模塊,用于將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O;
填充模塊,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充;
合并模塊,用于對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形;
偏移差分模塊,用于將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置;
所述采集模塊的輸出端依次通過(guò)差分模塊、二值化與區(qū)域劃分模塊、與運(yùn)算模塊、消除模塊、填充模塊和合并模塊進(jìn)而與偏移差分模塊的輸入端連接。
[0031]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述二值化與區(qū)域劃分模塊包括:
二值化單元,用于將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為0,從而得到二值化圖像;
區(qū)域劃分單元,用于分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和仏然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和d,從而將二值化圖像劃分為c Xe/個(gè)區(qū)域;
所述二值化單元的輸入端與差分模塊的輸出端連接,所述二值化單元的輸出端與區(qū)域劃分單元的輸入端連接,所述區(qū)域劃分單元的輸出端和與運(yùn)算模塊的輸入端連接。
[0032]進(jìn)一步作為優(yōu)選的實(shí)施方式,所述填充模塊包括:
搜索單元,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置;
填充單元,用于根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充;
判斷單元,用于判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則轉(zhuǎn)至合并模塊,反之,則返回與運(yùn)算模塊;
所述搜索單元的輸入端與消除模塊的輸出端連接,所述搜索單元的輸出端通過(guò)填充單元進(jìn)而與判斷單元的輸入端連接,所述判斷單元的輸出端分別與合并模塊的輸入端以及與運(yùn)算模塊的輸入端連接。
[0033]下面結(jié)合說(shuō)明書附圖和具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步詳細(xì)說(shuō)明。
[0034]實(shí)施例一
參照?qǐng)D3-6,本發(fā)明的第一實(shí)施例:
針對(duì)現(xiàn)有缺陷檢測(cè)方法適用性不廣且無(wú)法滿足檢測(cè)速度和檢測(cè)精度要求的問(wèn)題,本發(fā)明提出了一種在印刷品質(zhì)量檢測(cè)系統(tǒng)中使用的基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法。如圖3所示,該檢測(cè)方法包括以下步驟:
(一)采集產(chǎn)品圖像。
[0035]一般來(lái)說(shuō),對(duì)于窄面的印刷品,采用一個(gè)攝像機(jī)采集一幅對(duì)象即可。
[0036](二)將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像作差分。
[0037]作差分具體來(lái)說(shuō),就是將采集的產(chǎn)品圖像減去標(biāo)準(zhǔn)圖像(二者除了缺陷外的其他位置的像素值是一樣的,減去之后就得到了只含有缺陷的圖像了)。
[0038](三)對(duì)圖像進(jìn)行二值化處理。
[0039]對(duì)圖像進(jìn)行二值化處理具體來(lái)說(shuō),就是將大于或等于設(shè)定閾值的像素值置255,小于設(shè)定閾值的像素值置0.(四)基于圖像尺寸,確定線程塊和塊內(nèi)線程的數(shù)量。
[0040]該檢測(cè)方法是基于GPU并行運(yùn)算實(shí)現(xiàn)的,使用的是CUDA平臺(tái)來(lái)進(jìn)行編程。而GPU并行運(yùn)算是通過(guò)線程來(lái)實(shí)現(xiàn)的,GPU線程是以網(wǎng)格的方式組織的,而每個(gè)網(wǎng)格中又包含若干個(gè)線程塊,線程塊中又包含了若干個(gè)線程,每個(gè)線程對(duì)應(yīng)處理圖像的每個(gè)像素。由于圖像分辨率和程序效率的問(wèn)題,不同圖像使用的線程塊數(shù)量和每個(gè)線程塊內(nèi)的線程數(shù)量會(huì)有所不同。本實(shí)施例確定線程塊和線程塊內(nèi)線程的數(shù)量的方法是:預(yù)先設(shè)置好每個(gè)線程塊內(nèi)X軸方向、Y軸方向的線程數(shù)量再根據(jù)圖像的分辨率大小計(jì)算得出X軸、Y軸方向上線程塊數(shù)量C、A相當(dāng)于將圖像分了 “CX I個(gè)區(qū)域。
[0041](五)每個(gè)區(qū)域內(nèi)的相鄰兩行做與運(yùn)算,將結(jié)果記錄在新開辟的與圖像大小一樣的儲(chǔ)存空間的相同位置。
[0042]為了提高并行算法的效率,在對(duì)相鄰兩行做與運(yùn)算的時(shí)候,本實(shí)施例采取了偶數(shù)行和奇數(shù)行交替做運(yùn)算的方法,即先對(duì)區(qū)域內(nèi)的奇數(shù)行與它的上一行做與運(yùn)算,然后把結(jié)果記錄在新開辟的與圖像儲(chǔ)存空間大小一樣的緩存圖像的相同位置,再對(duì)區(qū)域內(nèi)的偶數(shù)行與它的上一行進(jìn)行與奇數(shù)行相同的操作。
[0043]如圖4所示,其中帶斜線的格代表了像素值為255的像素,不帶斜線的格代表了像素值為O的像素,具體操作時(shí),對(duì)相鄰的η和n+1這兩行進(jìn)行與運(yùn)算,同時(shí),開辟一個(gè)與二值化圖像大小一樣的緩存空間,然后把與運(yùn)算結(jié)果記錄到緩存空間的n+1行中。
[0044](六)將區(qū)域內(nèi)單個(gè)像素值為255的像素在緩存圖像置O。
[0045]如圖4所示,在做了與運(yùn)算之后,若在緩存圖像中存在單個(gè)像素值在設(shè)定閾值范圍之內(nèi)的像素,會(huì)對(duì)下一步確定填充范圍的步驟造成影響,所以要將單個(gè)像素值在設(shè)定閾值范圍之內(nèi)的像素消除,具體做法為:若圖像中第i行第j列的像素值在設(shè)定閾值范圍之內(nèi),而且第i行第j-Ι列的像素值和第i行第j+Ι列的像素值均不在閾值范圍之內(nèi)的時(shí)候,將該像素由255置O,以消除該像素的影響。
[0046](七)確定填充范圍并進(jìn)行填充。
[0047]如圖4所示,本實(shí)施例確定填充范圍的方法為:若緩存空間相鄰兩行某位置的像素值大于預(yù)定閾值,則從該位置開始向前和向后搜索,一直到某位置的像素值小于預(yù)定閾值,記下兩行當(dāng)前的起始位置和結(jié)束位置為:1_8〖&1'1:和;[_611(1,;!_8〖&1'1:1和;!_611(11;然后,通過(guò)比較;[_8七31'1:和;!_611(1,i_start]^Pi_endl的大小,來(lái)確定填充的范圍。
[0048](八)重復(fù)步驟(五)、(六)、(七),直到達(dá)到循環(huán)次數(shù)。本實(shí)施例的循環(huán)次數(shù)為區(qū)域在Y軸方向的線程數(shù)量辦。
[0049]由于是并行運(yùn)算,所以步驟(五)、(六)、(七)都是在同一時(shí)間對(duì)圖像的各個(gè)區(qū)域進(jìn)行操作的,而區(qū)域內(nèi)缺陷的尺寸是未知的,區(qū)域內(nèi)的每相鄰兩行都要比較,故循環(huán)次數(shù)就是每個(gè)區(qū)域在Y軸方向的線程數(shù)量辦。
[0050](九)進(jìn)行區(qū)域間的合并操作。
[0051]圖5和圖6分別是區(qū)域合并時(shí),邊界之間有缺陷連接和沒(méi)有缺陷連接的示意圖。劃分區(qū)域的時(shí)候并不知道缺陷的具體位置,難免會(huì)出現(xiàn)同一個(gè)缺陷分在兩個(gè)區(qū)域內(nèi)的情況,所以在進(jìn)行區(qū)域合并的時(shí)候,先要判斷區(qū)域的邊界之間是否有缺陷連接,如圖5所示,標(biāo)號(hào)I和2的位置就是出現(xiàn)了一個(gè)缺陷分在兩個(gè)區(qū)域內(nèi)的情況,此時(shí)就要對(duì)兩個(gè)區(qū)域內(nèi)的邊界執(zhí)行步驟(五)、(六)、(七)的操作。而圖6中標(biāo)號(hào)3和4的位置就沒(méi)有出現(xiàn)上述的情況,直接進(jìn)行合并即可。
[0052]區(qū)域合并之后,得到的合并后的圖像就是本發(fā)明需要尋找的包圍著缺陷的最小矩形。
[0053](十)將合并后的圖像向X、Y方向偏移,將偏移后的圖像與合并后的圖像做差分,得到圖像在缺陷中的位置。
[0054]將合并后的圖像向X軸、Y軸方向偏移,再把偏移后的圖像與合并后的圖像做差分,就可以得到包圍著缺陷的最小矩形的長(zhǎng)、寬以及缺陷在產(chǎn)品圖像中的位置。
[0055]與現(xiàn)有技術(shù)相比,本發(fā)明具有以下優(yōu)點(diǎn):
(I)增加了檢測(cè)的準(zhǔn)確性和檢測(cè)缺陷的種類。本發(fā)明通過(guò)找到包圍著缺陷的最小矩形,進(jìn)而得到缺陷在產(chǎn)品圖像中的位置,可以適應(yīng)多種形狀的缺陷檢測(cè),尤其適用于對(duì)不規(guī)則形狀的缺陷進(jìn)行檢測(cè),大大提高了缺陷檢測(cè)的準(zhǔn)確性和增加了可以檢測(cè)的缺陷種類。
[0056](2)高速性。本發(fā)明使用了基于GPU并行的缺陷檢測(cè)方法,在面對(duì)高分辨率的圖像時(shí),仍然可以保持較高的運(yùn)算速度;而且在算法結(jié)構(gòu)上,專門針對(duì)CUDA的并行架構(gòu),對(duì)算法進(jìn)行了優(yōu)化,進(jìn)一步提高了算法的運(yùn)算效率,檢測(cè)速度可以達(dá)到300m/min以上。
[0057]以上是對(duì)本發(fā)明的較佳實(shí)施進(jìn)行了具體說(shuō)明,但本發(fā)明創(chuàng)造并不限于所述實(shí)施例,熟悉本領(lǐng)域的技術(shù)人員在不違背本發(fā)明精神的前提下還可做作出種種的等同變形或替換,這些等同的變形或替換均包含在本申請(qǐng)權(quán)利要求所限定的范圍內(nèi)。
【主權(quán)項(xiàng)】
1.一種基于GRJ并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:包括以下步驟: 51、采集產(chǎn)品圖像; 52、將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像; 53、對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分; 54、對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同; 55、將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O; 56、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充; 57、對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形; 58、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置。2.根據(jù)權(quán)利要求1所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S3包括: 531、將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為O,從而得到二值化圖像; 532、分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和/7,然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和A從而將二值化圖像劃分為cXt/個(gè)區(qū)域。3.根據(jù)權(quán)利要求1所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S4具體為: 先將二值化圖像區(qū)域內(nèi)的奇數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置;再將二值化圖像區(qū)域內(nèi)的偶數(shù)行與它的上一行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置。4.根據(jù)權(quán)利要求1所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S5具體為: 若緩存圖像中第i行第j列的像素值在設(shè)定閾值范圍之內(nèi),而且第i行第j-Ι列的像素值以及第i行第j+Ι列的像素值均不在設(shè)定閾值范圍之內(nèi),則將緩存圖像中第i行第j列的像素值由255置為O。5.根據(jù)權(quán)利要求1所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S6包括: 561、根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置; 562、根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充; 563、判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則執(zhí)行步驟S7,反之,則返回步驟S4。6.根據(jù)權(quán)利要求1所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S7具體為: 判斷填充后的二值化圖像中待合并的兩個(gè)區(qū)域的邊界之間是否有缺陷連接,若是,則返回步驟S6,確定填充的范圍并進(jìn)行填充;反之,則直接將待合并的兩個(gè)區(qū)域進(jìn)行合并。7.根據(jù)權(quán)利要求1-6任一項(xiàng)所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)方法,其特征在于:所述步驟S8包括: 581、將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,得到偏移后的圖像; 582、將偏移后的圖像與合并后的圖像進(jìn)行差分,得到包圍著缺陷的最小矩形的長(zhǎng)、寬和缺陷在產(chǎn)品圖像中的位置。8.一種基于GRJ并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng),其特征在于:包括以下模塊: 采集模塊,用于采集產(chǎn)品圖像; 差分模塊,用于將采集的產(chǎn)品圖像與標(biāo)準(zhǔn)圖像進(jìn)行差分,得到差分圖像; 二值化與區(qū)域劃分模塊,用于對(duì)差分圖像進(jìn)行二值化處理,得到二值化圖像,并根據(jù)二值化圖像的尺寸,用于確定CUDA編程模型中線程網(wǎng)格和網(wǎng)格內(nèi)線程的數(shù)量,以對(duì)二值化圖像進(jìn)行區(qū)域劃分; 與運(yùn)算模塊,用于對(duì)二值化圖像每個(gè)區(qū)域內(nèi)的相鄰兩行進(jìn)行與運(yùn)算,并將運(yùn)算的結(jié)果存儲(chǔ)在緩存圖像的相同位置,所述緩存圖像的存儲(chǔ)空間與二值化圖像的存儲(chǔ)空間大小相同; 消除模塊,用于將緩存圖像區(qū)域內(nèi)單個(gè)像素值為255的像素置O; 填充模塊,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定填充范圍并進(jìn)行填充; 合并模塊,用于對(duì)填充后的二值化圖像進(jìn)行區(qū)域間的合并操作,得到包圍著缺陷的最小矩形; 偏移差分模塊,用于將合并后的圖像沿X軸方向、Y軸方向進(jìn)行偏移,然后將偏移后的圖像與合并后的圖像進(jìn)行差分,得到缺陷在產(chǎn)品圖像中的位置; 所述采集模塊的輸出端依次通過(guò)差分模塊、二值化與區(qū)域劃分模塊、與運(yùn)算模塊、消除模塊、填充模塊和合并模塊進(jìn)而與偏移差分模塊的輸入端連接。9.根據(jù)權(quán)利要求8所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng),其特征在于:所述二值化與區(qū)域劃分模塊包括: 二值化單元,用于將差分圖像中灰度大于或等于設(shè)定閾值的像素置為255,將灰度小于設(shè)定閾值的像素置為O,從而得到二值化圖像; 區(qū)域劃分單元,用于分別設(shè)置好CUDA編程模型中每個(gè)線程塊內(nèi)X軸方向和Y軸方向的線程數(shù)量a和b,然后根據(jù)二值化圖像的分辨率分別計(jì)算出X軸方向和Y軸方向上線程塊的數(shù)量c和d,從而將二值化圖像劃分為c X d個(gè)區(qū)域; 所述二值化單元的輸入端與差分模塊的輸出端連接,所述二值化單元的輸出端與區(qū)域劃分單元的輸入端連接,所述區(qū)域劃分單元的輸出端和與運(yùn)算模塊的輸入端連接。10.根據(jù)權(quán)利要求8所述的一種基于GPU并行運(yùn)算的印刷品缺陷檢測(cè)系統(tǒng),其特征在于:所述填充模塊包括: 搜索單元,用于根據(jù)緩存圖像中像素值大于設(shè)定閾值的位置在二值化圖像內(nèi)進(jìn)行向前和向后搜索,確定二值化圖像兩行中連通域的起始位置和結(jié)束位置; 填充單元,用于根據(jù)連通域的起始位置和結(jié)束位置確定填充范圍并進(jìn)行填充; 判斷單元,用于判斷填充后的二值化圖像每個(gè)區(qū)域執(zhí)行的線程數(shù)的是否達(dá)到CUDA編程模型的線程數(shù)量要求,若是,則轉(zhuǎn)至合并模塊,反之,則返回與運(yùn)算模塊; 所述搜索單元的輸入端與消除模塊的輸出端連接,所述搜索單元的輸出端通過(guò)填充單元進(jìn)而與判斷單元的輸入端連接,所述判斷單元的輸出端分別與合并模塊的輸入端以及與運(yùn)算模塊的輸入端連接。
【文檔編號(hào)】G06T7/00GK105894514SQ201610210057
【公開日】2016年8月24日
【申請(qǐng)日】2016年4月6日
【發(fā)明人】李海艷, 張皓亮, 駱繼明, 黃運(yùn)保
【申請(qǐng)人】廣東工業(yè)大學(xué)