工業(yè)機器視覺技術(shù)及應用課件:機器視覺應用案例_第1頁
工業(yè)機器視覺技術(shù)及應用課件:機器視覺應用案例_第2頁
工業(yè)機器視覺技術(shù)及應用課件:機器視覺應用案例_第3頁
工業(yè)機器視覺技術(shù)及應用課件:機器視覺應用案例_第4頁
工業(yè)機器視覺技術(shù)及應用課件:機器視覺應用案例_第5頁
已閱讀5頁,還剩71頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

機器視覺應用案例8.1基礎知識儲備8.2機器視覺應用

8.1基礎知識儲備

8.1.1獲取相機參數(shù)和信息

1.獲取相機輸出參數(shù)打開halconHDevelop軟件,選擇菜單“助手”中的“打開新的ImageAcquisition”選項。在“資源”框中,選擇“圖像獲取接口”,單擊“檢測”按鈕即可得到相機輸出接口,如GigEVision(如圖8-1所示)。在“連接”框中,選擇“連接”和“檢測”,并在“代碼生成”框下,單擊“插入代碼”按鈕即可獲得相機參數(shù)和代碼。圖8-1

Halcon獲取相機輸出接口界面

2.查看相機實時輸出結(jié)果

選擇“連接”選項,單擊“連接”和“實時”按鈕,在“圖形窗口”中即可觀測到實時輸出的圖像,如圖8-2所示。

圖8-2連接相機界面

8.1.2相機標定

Halcon提供了自制標定板和自帶標定兩種標定方法。

1.自制標定板

一般選用標定板尺寸為?30?mm?×?30?mm,將標定板放置在鏡頭視野內(nèi)來實現(xiàn)標定。Halcon提供了制作標定板的程序,制作標定板算子如下所示:

gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile:)

2.自帶標定

在Halcon中,選擇菜單“助手”中的“打開新的Callibration”選項,彈出如圖8-3所示的窗口。

(1)選擇模板。在“安裝”選項中,“描述文件”選為“caltab_30mm.descr”,該文件在安裝目錄MVTec/HALCON-11.0/calib/caltab_30mm.descr下,如圖8-3所示。

圖8-3相機標定

(2)加載標定板圖像。在“標定”選項中,選擇“圖像文件”并加載,圖像文件在Halcon安裝路徑“MVTec\HALCON-11.0\examples\images\scratch”中,或者選擇“圖像采集助手”,將標定板放在相機視野范圍內(nèi),單擊“采集”按鈕即可,如圖8-4所示。

圖8-4加載標定板圖像

(3)濾除低品質(zhì)圖像。在“標定”選項中,加載好圖像后,點擊“設為參考位姿”按鈕,并將“警告級別”設置為70,檢測出品質(zhì)問題的所有圖片,點擊“標定”按鈕完成標定,如圖8-5所示。

圖8-5濾除低品質(zhì)圖像

(4)生成代碼。在“代碼生成”選項下,設置“生成的模式”為“標定數(shù)據(jù)(Tuple)”,點擊“插入代碼”按鈕,標定代碼則插入到了“程序編輯器”中,如圖8-6所示。

圖8-6生成代碼

程序解釋:語句1、2讀取系統(tǒng)中圖像?‘pioneer’,命名為Image,并顯示圖像;語句3表示程序暫停一下;語句4將rgb圖像轉(zhuǎn)換為灰度圖像;語句5、6、7為標定參數(shù);語句8產(chǎn)生徑向畸變映射圖,MapFixed是輸出,CamParOriginal為標定后的參數(shù),CamParVirtualFixed是輸出的參數(shù),‘bilinear’

為映射類型;語句9利用映射消除圖像畸變算子。

在運行Halcon程序后,可消除圖像畸變。

8.2機器視覺應用

8.2.1

二維碼識別

從軟件功能上看,軟件主要分為主程序部分、相機基本功能算法實現(xiàn)部分和視覺算法處理部分三部分。主程序部分主要包括各類控件函數(shù)、子函數(shù)、初始化函數(shù)等。相機基本功能算法實現(xiàn)部分包括相機的打開、采集數(shù)據(jù)、傳輸數(shù)據(jù)等;視覺算法處理部分包括二維碼的識別及顯示功能等。

軟件設計包括軟件界面設計和軟件程序設計。

1.軟件界面設計

根據(jù)需求,增加控件,設置控制屬性,以設計友好的人機界面。本應用中,為了規(guī)范命名,特規(guī)定控件命名規(guī)則為:

XPU_控件縮寫_控件含義

(1)添加7個菜單項控件類型(MenuStrip),用于引導用戶執(zhí)行相應的操作。

控件屬性:Name(XPU_TSM_LinkCamera)、Text(相機連接)。

控件屬性:Name(XPU_TSM_OneShot)、Text(單幅采集)。

控件屬性:Name(XPU_TSM_ContinuousShot)、Text(連續(xù)采集)。

控件屬性:Name(XPU_TSM_Stop)、Text(停止采集)。

控件屬性:Name(XPU_TSM_ContinuousShot)、Text(連續(xù)采集)。

控件屬性:Name(XPU_TSM_OpenImage)、Text(打開圖像)。

控件屬性:Name(XPU_TSM_SaveImage)、Text(保存圖像)。

(2)添加2個列表控件類型(ListView):用于按照列表顯示格式化后的數(shù)據(jù),可增加軟件界面的美觀性。一個列表控件用于顯示相機參數(shù);另一列表控件顯示輸入輸出的消息。

顯示相機控件屬性為:Name(XPU_LV_DeviceListView)、View(Tile)、HeaderStyle(Clickable)、Dock(Top)。

顯示輸入輸出控件屬性為:Name(XPU_LV_ListViewMessage)、View(Details)、HeaderStyle(NonClickable)、Dock(Fill)、集合(Name(ColumHeader)、Text(詳細)(ListViewDevice)。

(3)添加HWindowControl控件:從“工具箱”中找到HWindowControl控件拖入窗體即可。HWindowControl控件屬性:Name(XPU_hWindowControl)、Dock(Fill)。

2.軟件程序設計

軟件程序設計主要包括各類庫的包含、主程序、相機程序、二維碼識別程序等模塊。在程序設計時,建議相機參數(shù)設置Gain(Raw)為0,ExposureTime(Raw)為35

000,Width為2592,Height為1944。

1)連接相機

第一步,界面設計。在原有基礎上增加控件類型并設置屬性。增加窗體控件、HWindowControl控件、ListView控件、Timer控件各一個。

窗體控件屬性:Size(1139,768)、Text(西安工程大學機器人與智能裝備技術(shù)研究所)。

HWindowControl控件屬性為:Name(XPU_hWindowControl)、Size(854,649)、ImagePart

(0,0,2592,1944)。寬與高之比必須為4∶3,否則無法得到理想的效果。

按鈕屬性:Name(XPU_TSM_LinkCamer)、Text(相機連接)。

ListView控件屬性為:Name(XPU_LV_DeviceListView)、Dock(Fill)、HeaderStyle(Clickable)、Dock(Top)。

Timer控件屬性:Name(XPU_Timer_UpdateDeviceList)、Enable(True)、Internal(5000)。

第二步,關聯(lián)相機資源。將工業(yè)相機動態(tài)連接庫(PylonC.NET.dll、PylonC.NET.xml、PylonC.NETSupportLibrary.dll、PylonC.NETSupportLibrary.dll)中四個文件放入用戶應用程序的目錄下新建的“bin”文件中。

第三步,鏈接“動態(tài)鏈接庫”。在“解決方案資源管理器”中“引用”相機動態(tài)鏈接庫,并在主函數(shù)Form_Mains.cs文件頭中聲明相機動態(tài)庫和Halcon動態(tài)庫。

usingPylonC.NET; //Basler

usingPylonC.NETSupportLibrary; //Basler

第四步,連接相機。

(1)設置主程序入口。打開Program.cs,添加相機庫函數(shù)(usingPylonC.NET),并添加如下代碼,以實現(xiàn)正確引導。

(2)實例化一個相機。在Form_Main.cs中publicpartialclassForm_Main:Form的第一行上加入代碼:

privateImageProviderXPU_m_imageProvider=newImageProvider();

3)為了軟件魯棒穩(wěn)定,打開相機前先停止相機捕獲圖像。實現(xiàn)方法為在Form_Main.cs中publicForm_Main()函數(shù)后定義Stop()函數(shù)。

(4)連接相機。給“連接相機”按鈕編寫代碼:

(5)編寫ListView控件事件。第一是“選擇變化事件”;第二是“更新設備列表事件”;第三是“計時器變化事件”。

①選擇變化事件:

②更新設備列表事件:

③計時器變化事件:

上述程序已測試成功,如圖8-7所示。

圖8-7相機測試成功界面

2)單幅采集

第一步,在原有基礎上,增加按鈕、TabControl控件及設置屬性。

按鈕控件屬性為:Name(XPU_TSM_OneShot)、Text(單幅采集)。

TabControl控件屬性為:Name(XPU_TC_Tab)、Size(868,,680)。

聲明全局代碼如下:

publicstaticHImageHoImage; //全局變量Halcon用的圖像變量

privateBitmapXPU_m_bitmap=null; /*Thebitmapisusedfordisplayingtheimage.*/

boolcheck=false;

第二步,編寫按鈕代碼。

①增加“單幅采集”按鈕,單擊事件,代碼如下:

privatevoidXPU_TSM_OneShot_Click(objectsender,EventArgse)

{

XPU_OneShot();/*Startsthegrabbingofoneimage.*/

}

②在按鈕事件代碼之前首先編寫XPU_OneShot函數(shù):

③在Form_Main()函數(shù)中注冊:

④實現(xiàn)相機設備基本代碼?;敬a包括:

·XPU_OnGrabErrorEventCallback代碼:

·XPU_OnDeviceRemovedEventCallback代碼:

·XPU_OnDeviceOpenedEventCallback代碼:

·XPU_OnDeviceClosedEventCallback代碼:

·XPU_OnGrabbingStartedEventCallback代碼:

·XPU_OnGrabbingStoppedEventCallback代碼:

·XPU_OnImageReadyEventCallback代碼:

⑤圖像格式與Halcon圖形變量HImage轉(zhuǎn)換函數(shù),

⑥XPU_EnableButtons代碼

第三步,新建工程Pylon.NETSupportLibrary,該工程中包含相機操作的若干函數(shù)。

在“解決方案資源管理器”的“解決方案”下“添加”“新建項目”“類庫”Pylon.NETSupportLibrary.cs,建立三個“類”程序:BitmapFactory.cs、DeviceEnumerator.cs、ImageProvider.cs,或直接將已有的Pylon.NETSupportLibrary.cs添加進來,并在主函數(shù)中“引用”相機動態(tài)鏈接庫。

第四步,測試。點擊“單幅采集”按鈕,測試成功,如圖8-8所示。

圖8-8單幅采集界面

3)相機參數(shù)設置的用戶控件

通過“用戶控件”方法實現(xiàn)相機參數(shù)的設置:首次建立用戶控件,需運行程序。運行后可自動添加到“工件箱”中;然后,將用戶控件直接拖入需要的窗體中,設置響應參數(shù)即可。

(1)設計用戶控件。

建立用戶控件:在“Pylon.NETSupportLibrary”下“添加”“用戶控件”項目,命名為EnumerationComboBoxUserControl.cs。

在EnumerationComboBoxUserControl.cs設計下,添加文本輸入控件(Label)(屬性:Name(XPU_LN_LabelName)、Text(ValueName:))和組合框(comboBox)(屬性:Name(XPU_CB_comboBox)、DropDownStyle(DropDownList))。

(2)編寫用戶控件功能代碼。

第一步,聲明頭文件函數(shù)。

usingPylonC.NETSupportLibrary;

usingPylonC.NET;

第二步,聲明用戶變量及函數(shù)。

第三步,連接相機參數(shù)。

第四步,定義“用戶控件”節(jié)點新的屬性。

第五步,相機事件代碼實現(xiàn)。主要代碼包括:

·XPU_DeviceOpenedEventHandler代碼:

·XPU_DeviceClosingEventHandler代碼:

·XPU_NodeCallbackEventHandler代碼:

第六步,子函數(shù)功能代碼實現(xiàn),代碼包括:

·XPU_Reset函數(shù)功能代碼:

·XPU_UpdateValues函數(shù)功能代碼:

第七步,響應事件代碼實現(xiàn)。響應事件代碼包括初始狀態(tài)設置和SelectedIndexChanged實現(xiàn)。

·初始狀態(tài)設置代碼:

·SelectedIndexChanged實現(xiàn)代碼:

(3)增添用戶控件。

第一步,建立用戶控件:在“Pylon.NETSupportLibrary”下“添加”“用戶控件”項目,命名為SilderUserControl.cs。

在EnumerationComboBoxUserControl.cs設計下,添加trackBar控件(屬性:Name(XPU_TB_Silder));4個Label控件(屬性:Name(XPU_Label_Min)、Text(Min);Name(XPU_Label_Max)、Text(Max);Name(XPU_Label_ValueName)、Text(ValuName);Name(XPU_Label_CurrentValue)、Text(0);)。

第二步,編寫功能代碼。

①聲明頭文件函數(shù)。

②聲明用戶變量及函數(shù)。

③連接相機參數(shù)。

④定義“用戶控件”節(jié)點新的屬性。

⑤相機事件代碼實現(xiàn)。相機事件代碼包括:

·DeviceOpenedEventHandler代碼:

·XPU_DeviceClosingEventHandler代碼:

⑥子函數(shù)功能代碼實現(xiàn)。子函數(shù)功能包括:

·XPU_Reset函數(shù)功能:

·XPU_UpdateValues函數(shù)功能:

⑦響應事件代碼實現(xiàn)。響應事件代碼包括初始狀態(tài)設置代碼和slider-Scroll模塊代碼。

·初始狀態(tài)設置代碼:

·slider_Scroll模塊代碼:

設計好編譯運行成功后,在“工具箱”中即出現(xiàn)相應的用戶控件。

(4)布局主窗體。

①增加控件,設置屬性。

向主窗體增加GroupBox控件(屬性:Name(XPU_GroupBox_CameraParameter)、Text(相機參數(shù)設置))。將兩個用戶控件1和四個用戶控件2拖入GroupBox中。

用戶控件1(屬性:Name(XPU_UserC_ComboBox_TestImage)、NodeName(TestImageSelector)、Name(XPU_UserC_ComboBox_PixelFormat)、NodeName(PixelFormat))。

用戶控件?2?(屬性:Name(XPU_UserC_Silder_Silder_Gain)、NodeName(GainRaw)、Name(XPU_UserC_Silder_Silder_ExposureTime)、NodeName(ExposureTimeRaw)、Name(XPU_UserC_Silder_Silder_Width)、NodeName(Width)、Name(XPU_UserC_Silder_Silder_Height)、NodeName(Width))。

②設置相機參數(shù)代碼。

在主函數(shù)Form_Main中,添加設置相機參數(shù)代碼:

③相機參數(shù)設置程序測試,如圖8-9所示。

圖8-9相機參數(shù)設置

4)連續(xù)采集

第一步,增加按鈕控件及屬性設置。

控件屬性:Name(XPU_TSM_ContinuousShot)、Text(連續(xù)采集);

第二步,編寫按鈕代碼。

第三步,“連續(xù)采集”程序測試如圖8-10所示。

圖8-10連續(xù)采集

5)停止采集

第一步,增加按鈕控件及屬性設置。

控件屬性:Name(XPU_TSM_Stop)、Text(停止采集);

第二步,編寫按鈕代碼。

第三步,“停止采集”程序測試,如圖8-11所示。

圖8-11停止采集

6)保存和打開圖像

第一步,增加兩個按鈕控件及屬性設置。

控件屬性:Name(XPU_TSM_OpenImage)、Text(打開圖像);

控件屬性:Name(XPU_TSM_SaveImage)、Text(保存圖像);

第二步,編寫按鈕代碼。

①“打開圖像”代碼實現(xiàn):

②“保存圖像”代碼實現(xiàn):

第三步,保存圖像和打開圖像測試,如圖8-12所示。

圖8-12保存圖像和打開圖像

7)開始檢測

第一步,增加按鈕控件及屬性設置。

第二步,編寫按鈕代碼。

第三步,建立算法類庫。

在“解決方案資源管理器”中,“添加”“新建項目”的“類庫”項目,命名為Algorithm。建立兩個“類”程序Result.cs和Algorithm.cs,也可直接將現(xiàn)成項目添加進去。

(1)在Algorithm項目下,“添加”“新建項”的“類”文件,命名為Results.cs,并定義變量:

(2)在Algorithm項目下,“添加”“新建項”的“類”文件,命名為Algorithm.cs,導入從Halcon生成的代碼。具體流程如下:

①聲明Halcon庫文件:

usingHalconDotNet;

②在publicclassAlgorithm中聲明Results:

Resultsresult=newResults();

(3)在Halcon的HDevelop軟件中編寫二維碼檢測的算法,

(4)導出C#?語言。將上述代碼導出為“C#”語言,導出參數(shù)設置,包括導出范圍(程序)、函數(shù)屬性、窗口導出和編碼(UTF-8)。

(5)編寫整合優(yōu)化Halon二維碼識別主程序。將Halcon導出的C#?代碼放入主函數(shù)中,進行優(yōu)化。

將導出的函數(shù)復制到初始化函數(shù)publicvoidInitHalcon()、運行入口函數(shù)publicvoidRunHalcon(HTupleWindow)、子函數(shù)privatevoidaction()、publicvoiddisp_message()和publicvoidset_display_font()等函數(shù)中,并進行修改。

第四步,關聯(lián)主函數(shù)。

在主項目中,“引用”下“添加引用”Algorithm項目,并且在主函數(shù)代碼聲明Algorithm命名控件:usingAlgorithm。

第五步,結(jié)果測試。

二維碼檢測算已測試,如圖8-13所示。

圖8-13二維碼檢測

8.2.2離線功能實現(xiàn)

該示例功能是讀取彩色圖像并灰度轉(zhuǎn)換。

1.編寫Halcon代碼

(1)在Halcon的HDevelop軟件編寫灰度轉(zhuǎn)換代碼:

(2)導出C#?語言。將上述代碼導出為C#?語言,導出參數(shù)設置包括:導出范圍(程序)、函數(shù)屬性、窗口導出和編碼(UTF-8)。導出后的程序有三個子函數(shù)action()、InitHalcon()和RunHalcon(HTupleWindow)。

2.編寫C#?主程序

(1)編寫整合優(yōu)化主程序。將Halcon導出的C#代碼放入主函數(shù)中。從導出的Halcon的C#中拷貝HDevelopExport類到命名空間中,并利用Halcon代碼構(gòu)造讀取圖像函數(shù)XPU_ReadImage和彩色轉(zhuǎn)灰度函數(shù)XPU_ImageProcessing。

(2)編寫按鈕控件代碼。

①在主函數(shù)中定義兩個變量:

HDevelopExportXPU=newHDevelopExport();

stringImagePath;

②添加“打開圖像”按鈕響應事件:

③添加“開始檢測”按鈕響應事件:

XPU.XPU_ImageProcessing();

3.結(jié)果測試

“彩色轉(zhuǎn)灰度”結(jié)果測試如圖8-14所示。

圖8-14彩色轉(zhuǎn)灰度

8.2.3形狀檢測

形狀檢測程序是在上述相機連接、數(shù)據(jù)采集及保存打開等基礎上設計的,相關功能模塊不變,僅對形狀檢測算法進行分析。

1.編寫Halcon代碼

(1)檢測照片中圖像,且標記中心位置及其方向。

(2)導出C#?語言。將上述代碼導出為“C#”語言,導出參數(shù)設置為:導出范圍(程序)、函數(shù)屬性、窗口導出和編碼(UTF-8)。導出后的程序有子函數(shù)disp_continue_message、disp_message、set_display_font()、action()、InitHalcon()和RunHalcon(HTupleWindow)。

2.編寫形狀測試算法代碼

將Halcon導出的算法模塊復制到Algorithm.cs程序中,并修改子函數(shù)action程序。在acti

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論