halcon形態學運算


腐蝕、膨脹、開運算(先腐蝕后膨脹)、閉運算(先膨脹后腐蝕)

以halcon自帶案例ball.hdev為例(開運算),注意代碼有所縮減。關於sort_region函數,參考http://blog.sina.com.cn/s/blog_13849dbbc0102xhts.html

dev_update_window ('off') //停止更新窗體
dev_close_window () //關閉窗體
dev_open_window (0, 0, 728, 512, 'black', WindowID) //創建窗口,並指定句柄
read_image (Bond, 'die/die_03')
dev_display (Bond)
threshold (Bond, Bright, 100, 255)//二值化,灰度直方圖工具
shape_trans (Bright, Die, 'rectangle2') //形狀變換,獲得二值圖連通域的最小外接矩形
dev_display (Die)
reduce_domain (Bond, Die, DieGrey) //縮減區域,縮放原區域至新的范圍,新范圍必須是原范圍的子域。
threshold (DieGrey, Wires, 0, 50)
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)//孔洞填充,面積1~100的孔洞
dev_display (WiresFilled)
opening_circle (WiresFilled, Balls, 15.5) //開運算,先腐蝕后膨脹。留下面積較大的區域
dev_display (Balls)
connection (Balls, SingleBalls) //連通域拆分
//拆分后,特征直方圖,通過圓度選取目標圓
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
//可以省略排序步驟,除非需要顯示部分目標的參數(如只顯示第2-3的外接圓直徑)
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')//排序區域,按列排序從左邊第一個升序
dev_display (FinalBalls)
smallest_circle (FinalBalls, Row, Column, Radius)//獲得每個區域最小外接圓參數
NumBalls := |Radius|
Diameter := 2 * Radius
meanDiameter := mean(Diameter) //可省略
minDiameter := min(Diameter)  //可省略
dev_display (Bond) //顯示原圖
disp_circle (WindowID, Row, Column, Radius)
//顯示外接圓直徑,在圓上方
disp_message (WindowID, 'D: ' + Diameter$'.4', 'image', Row - 2 * Radius, Column, 'white', 'false')
dev_update_window ('on') //更新窗體

若只顯示第2-3的外接圓直徑,可以更改相應代碼

disp_message (WindowID, 'D: ' + Diameter[1:2]$'.4', 'image', Row[1:2] - 2 * Radius[1:2], Column[1:2], 'white', 'false')

 

重要步驟圖(只截取了右部區域):

原圖——二值化——最小外接矩形——縮減區域(獲得ROI)

二值化——孔洞填充——開運算——連通域拆分,得到目標圓——顯示參數


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM