HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析

HALCON示例程序ball電路板焊點識別、檢測、測量程序剖析

示例程序源碼(加注釋)

介紹: ball.hdev: Inspection of Ball Bonding
*halcon窗口實時更新關閉
dev_update_window (‘off’)
*halcon關閉所有窗口
dev_close_window ()
*halcon打開新窗口
dev_open_window (0, 0, 728, 512, ‘black’, WindowID)
*讀入圖像
read_image (Bond, ‘die/die_03’)
*halcon顯示讀入圖像
dev_display (Bond)
*halcon設置在“WindowID”界面中字體顯示格式
*函數原型:set_display_font( : : WindowHandle, Size, Font, Bold, Slant : )
*函數原型:WindowHandle:設置的窗口ID;Size:字體大小;Font:字體(宋體、楷體。。。。。);Bold:是否加粗;Slant :是否使用斜體
set_display_font (WindowID, 14, ‘mono’, ‘true’, ‘false’)
*disp_continue_message 此函數會在屏幕右下角顯示“單擊”“運行”使程序繼續運行。(其實就是加一個繼續按鈕)
*disp_continue_message(:: WindowHandle,Color,Box ?
*WindowID:顯示的窗口;Color:顯示顏色;Box :是否顯示底色
disp_continue_message (WindowID, ‘black’, ‘true’)
*程序暫停運行,以便于查看
stop ()
*選中Bond圖片中像素值于100-255的像素,生成一個區域Bright
threshold (Bond, Bright, 100, 255)
*求取剛剛提取出的區域的最小外接矩形,名稱為Die
shape_trans (Bright, Die, ‘rectangle2’)
*設置顯示的顏色(包括字體、區域、ROI等)
dev_set_color (‘green’)
*設置顯示線寬
dev_set_line_width (3)
*設置顯示區域的方式margin:邊緣模式(顯示區域只劃出他的外邊緣);Fill:填充模式(以填充方式顯示區域)
dev_set_draw (‘margin’)
*顯示剛剛求得的最小外接矩形
dev_display (Die)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*剪裁圖片,用區域Die去裁剪圖片Bond,生成新的圖片DieGrey
reduce_domain (Bond, Die, DieGrey)
*閾值選取
threshold (DieGrey, Wires, 0, 50)
*填充區域內的孔洞(不同于fillup)具有特征選擇的功能,這里用到的使面積,不在最小最大設定范圍的孔洞將不會被填充
*函數原型:fill_up_shape(Region:RegionFillUp:Feature,Min,Max:)
*Region:區域;RegionFillUp:填充后的區域;Min:最小填充孔洞;Max:最大填充孔洞
fill_up_shape (Wires, WiresFilled, ‘area’, 1, 100)
*顯示與相關設置(這些之前都介紹過哈)
dev_display (Bond)
dev_set_draw (‘fill’)
dev_set_color (‘red’)
dev_display (WiresFilled)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*使用圓形元素進行開運算(開運算就是把區域變小,要留住圓形的區域就用圓形開運算,要留住矩形區域就用矩形元素去開運算)
*函數原型:opening_circle(Region : RegionOpening : Radius : )
*Region :要進行開運算的區域;RegionOpening :開運算過后的區域;Radius :用于開運算元素的半徑
*這里就是要去掉圓形焊點后邊的小尾巴
opening_circle (WiresFilled, Balls, 15.5)
*又是相關的顯示設置了
dev_set_color (‘green’)
dev_display (Balls)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*分割連通域,我們做了上述的這么多事情,怎么才能把焊盤一個一個的找出來呢,雖然現在接近成功,但還不行,因為現在的區域還是一個,(就如CAD的圖層與PS的圖層差不多)就是雖然不相連但是還是認為是一坨,connection就是把這些不相連的給分成不同的區域。兩個參數,第一個是傳入區域(要分割的);第二個是分割后的。在halcon上最直觀的顯示就是由一個顏色變得五彩繽紛了
connection (Balls, SingleBalls)
*特征選擇函數,選擇特定的特征是我們做簡單的圖像分析常用的算子。可以通過區域的特征(面積、圓度、矩形度。。。。。)不同篩選出我們要的區域。
*這里用到的使圓度;圓度介于0.85-1.0的區域將會被選中
select_shape (SingleBalls, IntermediateBalls, ‘circularity’, ‘and’, 0.85, 1.0)
*sort_region - 根據區域的相對位置對區域進行排序
*函數原型:sort_region(Regions:SortedRegions:SortMode,Order,RowOrCol ?
*Regions:區域們;SortedRegions:對區域排序完成的區域;SortMode:排序模式;Order:順序還是倒序;RowOrCol :行優先還是列優先
sort_region (IntermediateBalls, FinalBalls, ‘first_point’, ‘true’, ‘column’)
*又是相關的顯示設置了
dev_display (Bond)
dev_set_colored (12)
dev_display (FinalBalls)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
*求最小外接圓。到此焊點就都提取出來了,尺寸也出來了,焊點位置也出來了
smallest_circle (FinalBalls, Row, Column, Radius)
*下邊的就是計算與顯示相關的一些操作了
NumBalls := |Radius|
Diameter := 2 * Radius
meanDiameter := sum(Diameter) / NumBalls
mimDiameter := min(Diameter)
dev_display (Bond)
disp_circle (WindowID, Row, Column, Radius)
dev_set_color (‘white’)
for i := 1 to NumBalls by 1
*這里大家仔細看一下就明白了

 if (fmod(i,2) == 1)disp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] - 2.7 * Radius[i - 1], max([Column[i - 1] - 60,0]), 'white','false')elsedisp_message (WindowID, 'D: ' + Diameter[i - 1], 'image', Row[i - 1] + 1.2 * Radius[i - 1], max([Column[i - 1] - 60,0]),'white','false')endifendfor

dump_window (WindowID, ‘tiff_rgb’, ‘./ball’)
dev_set_color (‘green’)
dev_update_window (‘on’)
disp_continue_message (WindowID, ‘black’, ‘true’)
stop ()
dev_close_window ()

處理思路

這個焊點檢測拿到圖片后我們想到的他的一個特點是圓的對吧,在一個我們看一下像素值很低,這個例程就是使用了這個特性完成了這個。先對電路板進行了一個選取,減少非電路板部分對檢測的干擾。然后通過閾值選擇出焊點,因為照片噪點或者產品本身就有噪點,對封閉區域做了一個填充。但是影響因素很多,這時使用圓形元素進行了一個開運算,搞掉那些影響。之后進行了特征篩選,用到了圓度這一特性進行篩選。輕易的就選出了圓形焊點區域,之后做了一個簡單地排序與計算最后顯示出結果,大功告成。

后記

大家有什么問題可以向我提問哈,我看到了第一時間回復,希望在學習的路上多多結交良師益友。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/255321.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/255321.shtml
英文地址,請注明出處:http://en.pswp.cn/news/255321.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

舵機的原理和控制

控制信號由接收機的通道進入信號調制芯片,獲得直流偏置電壓。它內部有一個基準電路,產生周期為20ms,寬度為1.5ms的基準信號,將獲得的直流偏置電壓與電位器的電壓比較,獲得電壓差輸出。最后,電壓差的正負輸出…

HDFS清理壞塊

報錯 Failed with exception java.io.IOException:org.apache.hadoop.hdfs.BlockMissingException: Could not obtain block: BP-1921057509-192.168.57.129-1517160177567:blk_1073741930_1106 file/user/hive/warehouse/db_hive.db/student/student.txt Time taken: 0.104 se…

如何在PowerDesigner將PDM導出生成WORD文檔或者html文件

a) 使用PowerDesigner打開pdm文件 b) 點擊Report Temlates 制作模板 點擊PowerDesigner菜單欄“Report” -> “Report Templates” c) 選擇模板數據項 完成步驟a),得到如下界面,左右2個區,Aavailable區…

【軟件測試】——基礎篇(軟件測試技術體系、過程管理)

目錄 軟件測試技術體系 軟件測試過程管理?編輯 接口測試用例設計 手機端測試流程?編輯 軟件測試技術體系 軟件測試過程管理 接口測試用例設計 手機端測試流程

vue 的常用模塊安指令(持續記錄)

# 全局安裝 vue-cli $ cnpm install --global vue-cli# 創建一個基于 webpack 模板的新項目 $ vue init webpack my-project # 路由管理模塊 $ npm install vue-router --save # 狀態管理模塊 $ npm install vuex --save # 網絡請求模塊 $ npm install vue-resource --save # 停…

HALCON基于形狀匹配詳解

HALCON基于形狀的模板匹配詳細說明 很早就想總結一下前段時間學習HALCON的心得,但由于其他的事情總是抽不出時間。去年有過一段時間的集中學習,做了許多的練習和實驗,并對基于HDevelop的形狀匹配算法的參數優化進行了研究,寫了一…

俄羅斯:自由軟件在這里生根

2008年6月15日,我在“俄羅斯:自由軟件在這里起飛“一文中介紹了自由軟件在俄羅斯的發展情況。現在,許多年過去了,實際情況如何呢? 回顧以往,俄羅斯境內自由軟件的精英們,在2001年組建了ALTLinux…

小米出招黑科技,5S或成全球首款”Under glass“指紋識別手機

這一次,小米PK蘋果,小米勝。 不得不說,最近的手機圈真是熱鬧,繼三星Note 7爆炸、蘋果iPhone 7發布一度成為新聞熱點之后,小米又來暗戳戳地搶風頭了。 最近小米即將發布的兩款新旗艦消息扎堆,其中基本已經確…

sql中實現取得某字段中數字值

ALTER function [dbo].[GetNum](a nvarchar(4000)) returns nvarchar(4000) as begin while patindex(%[^0-9]%,a)>0 begin set astuff(a,patindex(%[^0-9]%,a),1,) end--select a --299 return a end 例如: 轉載于:https://www.cnblogs.com/fish-ycq/p/6433562.ht…

Java 中 String 的常用方法(二)

本文介紹剩下的一些常用的 String 中的方法。 1、replace 方法 、replaceFirst 方法和 replaceAll 方法 replace(char oldChar, char newChar)Returns a string resulting from replacing all occurrences of oldChar in this string with newChar. replace(CharSequence targe…

【adb錯誤修復】adb version(39) doesn‘t match the client(40),killing...

問題原因: 由于服務端的adb版本和客戶端的adb版本不一樣【哪個是客戶端哪個是服務端我也不清楚】 解決方法: adb kill-serveradb start-server

HALCON示例程序ball電路板焊點識別、檢測、測量程序2剖析(與上篇文章使用了不同方法)

HALCON示例程序ball電路板焊點識別、檢測、測量程序2 示例程序源碼(加注釋) *這是關于顯示的函數,已經介紹過了 dev_update_off () *定義一個字符串變量ImageNames,ImageNames[0]的含義為’die/die_02’以此類推 ImageNames : ‘…

arduino 程序的機制

從一個簡單的 arduino 程序說起: /*BlinkTurns on an LED on for one second, then off for one second, repeatedly.This example code is in the public domain.*/// Pin 13 has an LED connected on most Arduino boards. // give it a name: int led 13;// the…

電池技術多年沒有較大發展,成為移動設備最大制約

各大廠商致力于發展閃充技術以此解決電池續航問題。 對于電子產品來說,不管是什么,我們最頭疼的無疑就是電池問題了。而電池的重要性更是不用多說,但是,以目前的科技水平來看,就拿智能手機的CPU等功能來說&#xff0c…

什么樣的數據應該放入緩存

把數據放入緩存,有三個標準: 1.數據量不大 2.訪問頻率高 3.數據更改頻率低轉載于:https://www.cnblogs.com/hwgok/p/5494915.html

VMWare 安裝 Eclipse

由于之前已經安裝了 OpenJDK 所以 這次我們可以直接下載 eclipse來安裝。 Eclipse 下載:http://www.eclipse.org/downloads/?osTypelinux&releaseundefined 如果下載后 在 下載目錄,運行解壓 (我下載的:eclipse-inst-lin…

C語言條件編譯及編譯預處理階段

一、C語言由源代碼生成的各階段如下: C源程序->編譯預處理->編譯->優化程序->匯編程序->鏈接程序->可執行文件其中 編譯預處理階段,讀取c源程序,對其中…

HALCON示例程序board.hdev檢測電路板焊錫有無程序剖析

HALCON示例程序board.hdev檢測電路板焊錫有無程序剖析 示例程序源碼(加注釋) *這是關于系統設置的函數,剪輯區域,設置剪輯區域設置為使能。為clip_region做的設置,后文會介紹 get_system (‘clip_region’, Informat…

【機器學習】SVM理論與python實踐系列

理論部分: 《機器學習——支持向量機SVM之線性模型》 《機器學習——支持向量機SVM之非線性模型低維到高維映射》 《機器學習——支持向量機SVM之非線性模型原問題與對偶問題》 《機器學習——常用核函數》 《機器學習——支持向量機SVM之非線性模型原問題轉化為對偶問題…

eoLinker-API_Shop_驗證碼識別與生成類API調用的代碼示例合集:六位圖片驗證碼生成、四位圖片驗證碼生成、簡單驗證碼識別等...

以下示例代碼適用于 www.apishop.net 網站下的API,使用本文提及的接口調用代碼示例前,您需要先申請相應的API服務。 六位圖片驗證碼生成:包括純數字、小寫字母、大寫字母、大小寫混合、數字小寫、數字大寫、數字大小寫等情況。四位圖片驗證碼…