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