丁偉,丁松,秦懷宇
(1.江蘇科技大學(xué)張家港校區(qū)電氣與信息工程學(xué)院,江蘇張家港215600;2.張家港三利密封合金材料有限公司江蘇張家港215600)
?
機(jī)器視覺檢測(cè)中的矢量圖操作模塊的設(shè)計(jì)與開發(fā)
丁偉1,丁松2,秦懷宇1
(1.江蘇科技大學(xué)張家港校區(qū)電氣與信息工程學(xué)院,江蘇張家港215600;2.張家港三利密封合金材料有限公司江蘇張家港215600)
摘要:為解決矢量化的機(jī)器視覺檢測(cè)平臺(tái)開發(fā)中矢量圖的跨平臺(tái)操作問題,以Qt和Vjsua1 Stdjo 2012為開發(fā)平臺(tái),設(shè)計(jì)并開發(fā)了可讀取DXF格式矢量圖的軟件工具模塊。實(shí)現(xiàn)矢量圖的讀取、繪制、放大、縮小、選中以及存儲(chǔ)功能;并以開放的庫形式提供給其它開發(fā)平臺(tái)對(duì)視覺檢測(cè)平臺(tái)功能進(jìn)行進(jìn)一步開發(fā),具有較強(qiáng)的擴(kuò)展性和可維護(hù)性。為機(jī)器視覺檢測(cè)中的矢量圖操作提供了新的途徑。
關(guān)鍵詞:Qt;矢量圖;DXF;跨平臺(tái);機(jī)器視覺
在工業(yè)生產(chǎn)中,由于生產(chǎn)設(shè)備、人工及各種外部因素造成的產(chǎn)品誤差不可避免。為避免不合格流入市場(chǎng),需要在產(chǎn)品出廠前進(jìn)行檢測(cè)。其中對(duì)檢測(cè)產(chǎn)品的尺寸、表面缺陷的外觀檢測(cè)是重要的檢測(cè)環(huán)節(jié)[1]。近年來,由于經(jīng)濟(jì)發(fā)展、產(chǎn)業(yè)升級(jí)和人工成本上升等因素,機(jī)器視覺檢測(cè)已經(jīng)代替人工檢測(cè)成為外觀檢測(cè)的主流。在機(jī)器視覺檢測(cè)中,柵格圖像的最小組成單元為像素,像素的大小會(huì)影響對(duì)產(chǎn)品檢測(cè)的準(zhǔn)確性[2-3]。圖像的矢量化可以使圖像與分辨率無關(guān),盡可能地還原圖像的幾何參數(shù)和相應(yīng)的位置、尺寸、形狀信息,非常適用于對(duì)檢測(cè)參數(shù)敏感的精密零部件檢測(cè)[4-5]。
現(xiàn)在有多種把圖像矢量化并輸出標(biāo)準(zhǔn)數(shù)據(jù)接口文件DXF格式矢量圖的算法[6]。但是在機(jī)器視覺檢測(cè)平臺(tái)上打開和操作DXF格式矢量圖,需要特別安裝專業(yè)的制圖軟件,如AutoCad,Core1DRAW等,增加成本的同時(shí)這些專業(yè)軟件都有跨平臺(tái)的問題,不利于在專業(yè)的檢測(cè)平臺(tái)上安裝,且對(duì)檢測(cè)平臺(tái)后續(xù)針對(duì)性開發(fā)并實(shí)現(xiàn)自動(dòng)檢測(cè)造成困難[7]。針對(duì)以上不足,文中以Qt和Vjsua1 Stdjo 2012(VS 2012)為開發(fā)平臺(tái),設(shè)計(jì)并開發(fā)一款具備跨平臺(tái)功能的可讀取和操作DXF格式矢量圖的模塊,可在Wjndows系列,Ljnux,UNIX等幾乎所有主流系統(tǒng)使用。并可以庫的形式提供給其它開發(fā)平臺(tái),方便后續(xù)開發(fā)和維護(hù)。
文中以VS 2012為開發(fā)平臺(tái),并以Qt為界面設(shè)計(jì)平臺(tái),實(shí)現(xiàn)對(duì)dxf圖形的操作軟件的開發(fā)。通過CMake構(gòu)建整個(gè)程序的架構(gòu),使得軟件具備的跨平臺(tái)的功能,在不同操作系統(tǒng)中可生成可執(zhí)行的文件。
VS2012是經(jīng)典的Wjndows操作系統(tǒng)下軟件開發(fā)平臺(tái)。Qt是一個(gè)跨平臺(tái)的C++圖形用戶界面應(yīng)用程序開發(fā)軟件。易于擴(kuò)展,并且允許組件編程,具有極大開發(fā)便利性。利用Qt提供的C++應(yīng)用程序開發(fā)框架就可實(shí)現(xiàn)一次編寫,隨處編譯。即Qt程序具有很強(qiáng)的可移植性,可運(yùn)行于wjndows98、vjsta、wjndowXP、wjndows 7、Ljnux、UNIX等操作系統(tǒng)平臺(tái)。CMake是一個(gè)跨平臺(tái)的安裝(編譯)工具,可以用簡(jiǎn)單的語句來描述所有平臺(tái)的安裝(編譯過程),能夠輸出各種各樣的makefj1e或者project文件,能測(cè)試編譯器所支持的C++特性,類似UNIX下的automake。只是CMake的組態(tài)檔取名為CmakeLjsts.txt。Cmake并不直接建構(gòu)出最終的軟件,而是產(chǎn)生標(biāo)準(zhǔn)的建構(gòu)檔(如Unjx的Makefj1e或Wjndows Vjsua1 C++的projects/ workspaces),然后再依一般的建構(gòu)方式使用。這使得熟悉某個(gè)集成開發(fā)環(huán)境(IDE)的開發(fā)者可以用標(biāo)準(zhǔn)的方式建構(gòu)他的軟件,這種可以使用各平臺(tái)的原生建構(gòu)系統(tǒng)的能力是CMake和SCons等其他類似系統(tǒng)的區(qū)別之處。
軟件總體架構(gòu)如圖1所示。GUI系統(tǒng)模塊主要實(shí)現(xiàn)界面顯示功能,即生成文件顯示窗口,并在界面中實(shí)現(xiàn)編輯項(xiàng)目選項(xiàng)欄;Aoj-vjew模塊主要實(shí)現(xiàn)對(duì)解析后的圖片顯示,并對(duì)DXF圖區(qū)域的形狀進(jìn)行管理和與用戶之間的交互等功能;Doc-manage模塊和DXF-IO模塊負(fù)責(zé)實(shí)現(xiàn)DXF圖形管理,其中DXF-IO主要實(shí)現(xiàn)對(duì)DXF文件內(nèi)容的解析,包括圖形的點(diǎn)、線、圓等的方位、大小等信息的解析,當(dāng)涉及到具體DXF圖庫的時(shí)候便根據(jù)需要調(diào)用Core和DXF1jb內(nèi)的文件庫實(shí)現(xiàn)圖形的解析與恢復(fù)。架構(gòu)中每個(gè)模塊都留有擴(kuò)展接口方便后續(xù)對(duì)系統(tǒng)功能的擴(kuò)展。
圖1 系統(tǒng)架構(gòu)
3.1建立工程
采用命令行的方式建立工程,實(shí)現(xiàn)對(duì)建立文件的歸類,便于其它人員使用或后續(xù)開發(fā)。
建立VS工程。在建立majn.cpp文件之前,首先要在指定位置的工程文件夾里建立CMakeLjsts.txt的文件,再建立majn.cpp的文件。CMakeLjsts.txt文件實(shí)現(xiàn)將建立的VS工程與Qt相互關(guān)聯(lián)的作用,換言之,即通過CMake生成一個(gè)makefj1e的可執(zhí)行文件或工程。在編譯程序時(shí),根據(jù)CMakeLjsts.txt中的指令分別到相應(yīng)的工程里面執(zhí)行工程里的內(nèi)容,同樣,也調(diào)用Qt界面程序。
3.2GUI模塊設(shè)計(jì)
GUI模塊中共包含主窗口界面設(shè)計(jì)、打開標(biāo)準(zhǔn)檔對(duì)話框、保存標(biāo)準(zhǔn)檔對(duì)話框等,其包含4個(gè)小模塊:Majn-wjndow,Choose-doc-dja1og,Doc-1jst-vjew,Doc-1jst-wjdget其相應(yīng)的結(jié)構(gòu)圖如圖2所示。
圖2 GUI結(jié)構(gòu)圖
1)Majn-wjndow模塊主要是負(fù)責(zé)維護(hù)主窗口的交互界面,其中包括標(biāo)題欄,工具欄,主區(qū)域等。標(biāo)題欄主要是放大縮小關(guān)閉等按鈕的系統(tǒng)菜單,用于維護(hù)主要的系統(tǒng)事件;工具欄是一些自定義的事件,主要包括打開DXF文件、打開標(biāo)準(zhǔn)當(dāng)文件、和保存標(biāo)準(zhǔn)當(dāng)文件等;主區(qū)域是用戶鼠標(biāo)鍵盤操作的主要區(qū)域,由AOIVIEW構(gòu)成,用于獲取用戶的鼠標(biāo)輸入等動(dòng)作。其主要生成界面如圖3所示。
圖3 軟件初始界面
2)Choose-doc-dja1og是主窗口Open槽函數(shù)彈出的對(duì)話框,其中Choose-doc-dja1og類主要是負(fù)責(zé)對(duì)話框界面的組織,窗口如圖4所示。具體操作工作由DocLjstVjew和DocLjstWjdget完成,DocLjstVjew是左邊的標(biāo)準(zhǔn)當(dāng)名字選擇列表,右邊的DocLjstWjdget是標(biāo)準(zhǔn)當(dāng)?shù)脑敿?xì)信息。
圖4 Open對(duì)話框
3.3Aol-vlew模塊設(shè)計(jì)
Aoj-vjew模塊用于顯示形狀信息以及用戶的部分交互工作,具體結(jié)構(gòu)圖如圖5所示。
圖5 AojVjew模塊結(jié)構(gòu)圖
AojVjew的核心模塊由Cad-vjew、Cad-jtem和Cad-mode組成,其中Cad-vjew用于從用戶獲取輸入信息,Cad-jtem負(fù)責(zé)單個(gè)形狀信息的保存和繪制,Cad-mode用于控制用戶的操作流程。工作流程主要是:Cad-vjew獲取到用戶鼠標(biāo)鍵盤事件->Cad-vjew判斷當(dāng)前處在的Cad-mode狀態(tài)->傳遞給相應(yīng)的Cad-mode處理->Cad-mode根據(jù)之前的狀態(tài)決定下一步狀態(tài)是退出還是繼續(xù)處于該狀態(tài)->退出用戶事件并等待下一次事件。
Cad-vjew、Cad-jtem和Cad-mode的交互形成AojVjew模塊的基礎(chǔ)。如后續(xù)用戶需要實(shí)現(xiàn)新的操作方式,根據(jù)面向?qū)ο蟮亩鄳B(tài)操作方式,只需用戶繼承并更新Cad-mode可以實(shí)現(xiàn)新的操作方式。所以AojVjew的架構(gòu)方式非常有利于后續(xù)的功能擴(kuò)展。
3.4DXF-I0模塊
DXF-IO模塊主要是封裝上層對(duì)下層DXF文件的訪問,通過一個(gè)繼承至DL-CreatjonAdapter的類DXF-IO實(shí)現(xiàn)相應(yīng)的DXF文件的讀取和解析工作。實(shí)現(xiàn)的原理:子類通過繼承父類的虛函數(shù)的方式實(shí)現(xiàn)回調(diào),完成基類對(duì)子類的控制,最終實(shí)現(xiàn)上層函數(shù)。
3.5Core模塊
Core模塊主要是負(fù)責(zé)界面與底層之間的通信以及維護(hù)一些標(biāo)準(zhǔn)信息,模塊設(shè)計(jì)主要內(nèi)容包括:DjskInfo子模塊,實(shí)現(xiàn)標(biāo)準(zhǔn)數(shù)據(jù)結(jié)構(gòu)信息以及基本的IO操作[8];IntArray子模塊,封裝一個(gè)可變整數(shù)型的數(shù)組,實(shí)現(xiàn)整數(shù)緩沖區(qū)的管理;Object子模塊,是所有點(diǎn)、線、圓等幾何圖形的基類;Shape子模塊,主要實(shí)現(xiàn)一些特定的形狀和復(fù)雜的形狀如構(gòu)成圖形的基本元素的點(diǎn)、線、圓、弧等[9]。
3.6Doc-manage模塊
Doc-manage模塊主要實(shí)現(xiàn)標(biāo)準(zhǔn)文檔的管理,其中包括預(yù)覽、維護(hù)、新建、保存和刪除標(biāo)準(zhǔn)檔信息[10]。
用CMake完成軟件的編譯生成可執(zhí)行文件[11]。運(yùn)用可執(zhí)行文件,實(shí)現(xiàn)矢量圖的解析,如圖6、7所示。圖6是對(duì)某金屬密封件矢量圖的讀取顯示,圖7是對(duì)矢量圖的操作演示。
圖6 解析結(jié)果
圖7 矢量圖的放大和選擇
本文以Qt和VS 2012為開發(fā)平臺(tái),設(shè)計(jì)了一種對(duì)矢量圖進(jìn)行操作的新方法,并開發(fā)一款具備跨平臺(tái)功能的可讀取和操作DXF格式矢量圖的軟件模塊,并以庫的形式提供給其它開發(fā)平臺(tái),后續(xù)開發(fā)和維護(hù)。對(duì)以矢量圖方法為基礎(chǔ)的機(jī)器視覺檢測(cè)平臺(tái)提供了新的矢量圖操作途徑。軟件模塊已在實(shí)際檢測(cè)中應(yīng)用,取得了良好的效果,說明本文的設(shè)計(jì)和開發(fā)方法具有很好的推廣前景。
參考文獻(xiàn):
[1]Basa1amah S.Hjstogram based cjrc1e detectjon[J].Internatjona1 Journa1 of Computer Scjence and Network Securjty,2012,12(8):40-43.
[2]Forsyth D A,Jean P.Computer vjsjon[M].Inc:Prentjce Ha11,2003.
[3]趙磊,雷鳴,高俊釵.基于機(jī)器視覺的密封件表面缺陷檢測(cè)研究[J].電子設(shè)計(jì)工程,2011,19(24):72-74,77.
[4]劉春,利新琴,魯昌華,等.密封橡膠圈凸點(diǎn)缺陷檢測(cè)的研究[J].電子測(cè)量與儀器學(xué)報(bào),2008(23):178-181.
[5]黎明,馬聰,楊小芹.機(jī)械加工零件表面紋理缺陷檢測(cè)[J].中國(guó)圖象圖形學(xué)報(bào),2004,9(3):318-322.
[6]王艷麗.計(jì)算機(jī)中的位圖和矢量圖[J].信息與電腦(理論版),2011(9):191,193.
[7]呂志亮,嚴(yán)殊,李駒光.基于Qt/Embedded的DXF文件操作軟件的研究與實(shí)現(xiàn)[J].軟件導(dǎo)刊,2012,11(9):81-83.
[8]蔣國(guó)峰,丁潔.基于PC-104和虛擬儀器的某機(jī)載電臺(tái)檢測(cè)控制器[J].電子設(shè)計(jì)工程,2013(10):1-3.
[9]邢開宇,曹曉曼,方火能.基于FPGA和NAND F1ash的存儲(chǔ)器ECC設(shè)計(jì)與實(shí)現(xiàn)[J].電子科技,2015(2):38-40.
[10]李紅剛,楊林楠,張麗蓮.基于FPGA的高速多通道數(shù)據(jù)采集系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)測(cè)量與控制,2006(10):1407-1409.
[11]王德勝,康令州.基于FPGA的實(shí)時(shí)圖像采集與預(yù)處理[J].電視技術(shù),2011(3):32-35.
Deslgn and develoPment of vector dlagram oPeratlon module ln machlne vlslon detectlon
DING Wej1,DING Song2,QIN Huaj-yu1
(1.College of Electrical andJiangsu University of Science and Technology(Zhangjiagang),Information Engineering,Zhangjiagang 215600,China;2.Zhangjiagang Sanli Sealing Alloy Material Co.,Ltd,Zhangjiagang 215600,China)
Abstract:Thjs paper uses Qt and Vjsua1 Stdjo 2012 as deve1opment p1atform to desjgn and jmp1ement a software too1s modu1e whjch can read the DXF format vector djagram,to so1ve the prob1em about vector cross p1atform's operatjona1 prob1ems. Through thjs too1 we can achjeve to jmport,draw,en1arge,reduce or save the vector djagram,and jn the form of open 1jbrary provjded to other programs as secondary deve1opment usjng. It a1so can generate dynamjc 1jbrarjes for other p1atform. It js convenjent for the fo11ow-up deve1opment. And jt provjdes a new way for vector operatjon jn machjne vjsjon detectjon.
Key words:Qt;vector djagram;DXF;cross p1atform;machjne vjsjon
中圖分類號(hào):TN914
文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1674-6236(2016)07-0037-03
收稿日期:2015-06-02稿件編號(hào):201506019
基金項(xiàng)目:江蘇科技大學(xué)校區(qū)青年教師科研項(xiàng)目(112110146)
作者簡(jiǎn)介:丁偉(1985—),女,江蘇蘇州人,碩士研究生,講師。研究方向:數(shù)字圖像處理,計(jì)算機(jī)視覺。