此文根據《超人視覺 halcon啟蒙班》寫成,結合圖片和例程,直觀簡單地介紹halcon的最基本操作
基礎知識
光學:幾何光學,物理光學
數學:導數為主的高等數學,矩陣論
五種需求:
1.識別定位
2.符號識別:一二維碼,OCR
3.測量需求
4.缺陷需求(最常見,難度最大)
5.手眼標定和抓取(結合運動控制)
圖像處理一般思路
1.采集
2.預處理
-
拉開灰度
-
幾何變換
-
去噪:中值濾波,均值濾波,高斯濾波
-
摳圖
3.圖像分割
-
二值化
-
形態學
-
特征選擇
ps:Halcon里區域和圖像是不同概念
4.識別顯示
5.通信
三大數據類型
圖像,區域,XLD
灰度直方圖
-
勾選“閾值”
將灰度值在”綠線和紅線之間”的以選定顏色進行填充
-
勾選“縮放”
將把圈定的閾值范圍內的直方圖均勻拉伸釋放到整個直方圖軸上
數組語法
* Simple tuple operations
Tuple1 := [1,2,3,4,5]
Number := |Tuple1|
SingleElement := Tuple1[3]
Part := Tuple1[1:3]
Copy := Tuple1[0:|Tuple1| - 1]
運行結果
讀取圖片的四種方法
-
文件 -> 讀取圖片
-
Image Acquisition -> 自動檢測接口(刷新設備)-> Direct show
,從攝像頭直接讀圖 -
Image Acquisition -> 選擇文件
,從圖像文件中讀取 -
Image Acquisition -> 選擇路徑
,結合正則表達式讀取路徑下的圖片PS:用Image Acquisition讀取時記得點擊代碼生成
攝像頭抓取模式:在可視化 -> 更新窗口
中調整
同步采集:實時抓取,一直抓取
異步采集:只等圖片處理完后,grab_image才開始抓取
PS:更多信息包括雙相機采集,可以在案例 -> 方法 -> 圖像采集設備
中學習
ROI(感興趣區域)

特征檢測

PS:二值化之后的區域雖然不連通,但仍然認為是一個區域。需要調用connection把區域分割成獨立區域,才能進行select_shape,點擊特定區域,再進行特征檢測,則顯示特定區域的特征信息。(connection分割依據(九宮格中的八鄰域))
若直方圖窗口內的直方圖不顯示
1.將程序執行一遍(按完全執行或F5)
2.將直方圖窗口縱向拉大(這個拉升方案默認把剩余顯示區域留給直方圖)
形態學
膨脹:
-
將模板在原圖上移動,當除中心點外的模板點,與原圖中像素重合時,將中心點變黑。最終結果(當然也能覆蓋原圖)就是新圖
-
效果即擴大了“一圈”
腐蝕:
- 將模板在原圖上移動,僅有整個結構元素能全部被區域所包含時,保留中心元素點,最終結果即新圖能被原圖包含
- 效果即縮小了“一圈”
開運算:
- 先腐蝕,后膨脹
- 效果:減少像素(弱於腐蝕),斷開
閉運算:
- 先膨脹,后腐蝕
- 效果:增加像素(弱於膨脹),連接
PS:以上是對二值圖像而言,而對灰度圖像做形態學處理是改變亮暗
代碼運行事件監測
-
使用count函數
-
如圖使用“性能評測器”

結構元素模板選擇
-
要根據感興趣的圖像結構
-
來靈活選擇結構元素模板
效果展示(以官方例程ball.hdve為例):
-
原圖
-
紅色->圓結構元素提取
-
綠色->矩形結構提取
可以知道,想要提取圓的時候,采用圓結構元素能更好保留形態
之后采用圓度特征進行進一步的blob提取
預處理圖像增強
一般通過如下幾種方式:
-
scale_image: g' := g * Mult + Add
g為當前的灰度值,Mult 為所乘的系數,Add為加的偏移值,由公式可以刊出用scale_image來處理圖像是個線性變化,會讓黑的地方更黑,亮的地方更亮。
-
圖像形態學
-
gray_opening
結構元素在圖像中滑,灰度值最高的值作為新值,有使圖像變亮的作用。
-
gray_closing
結構元素在圖像中滑,灰度值最低的值作為新值,有使圖像變暗的作用。
-
gray_range_rect
用一個矩形結構元素在圖像中滑動,新值=(矩形中最大的)灰度值-(矩形中最大的)最小的灰度值
-
emphasize: res := round((orig - mean) * Factor) + orig
mean代表先對原圖進行mean_image后的圖像對應的灰度值,
orig 代表每幅圖對應的灰階值 ,res代表輸出圖像的灰階值
-
凸性
- 凸性:圖形內任意兩點相連,圖像上所有的點相連的的線進行點填充
函數:shape_trans(Region, RegionTrans, 'convex')
- 外接矩形:不贅述
函數:shape_trans(Region, RegionTrans, 'rectangle1')
PS:rectangle1為平行於窗口的正矩形,rectangle2為斜外接矩形,詳見官方手冊
以下圖為例,凸形和外接矩形分別如下



定位方法
-
Blob分析
-
模板匹配
-
通過mark點或特征找出興趣區域
-
仿射變換到標准位置
-
仿射變換
以官方例程check_blister.hdev介紹



dev_update_window ('off') //停止更新窗體
dev_close_window () //關閉窗體
read_image (ImageOrig, 'blister/blister_reference')
dev_open_window_fit_image (ImageOrig, 0, 0, -1, -1, WindowHandle) //窗口大小適應圖片
access_channel (ImageOrig, Image1, 1) //通道1,R圖
threshold (Image1, Region, 90, 255) //二值化,灰度直方圖工具
shape_trans (Region, Blister, 'convex') //凸包,內部都被填充
orientation_region (Blister, Phi) //區域方向,獲得角度值Phi,范圍[-Π,Π)
area_center (Blister, Area1, Row, Column) //獲得面積、質心坐標
vector_angle_to_rigid (Row, Column, Phi, Row, Column, 0, HomMat2D) // 獲得仿射變換矩陣HomMat2D
affine_trans_image (ImageOrig, Image2, HomMat2D, 'constant', 'false') //對圖像進行仿射變換,插值算法constant
dev_update_window ('on') //更新窗體
測量助手
打開方法: 助手 -> 打開新的Measure


OCR流程
-
采集
-
預處理,校正
-
分割成獨立連通域
如果每個字沒有形成獨立連通域(如上圖),需要使用形態學,使每個漢字的各筆畫在各自的一個連通域內,不同的漢字的各筆畫在不同的連通域內。如“明≠日月”的關系 -
使用現成的,或訓練
-
trf文件:文本與字符的關聯文件,只是對應關系。可被OCR助手和OCR讀取函數讀取
-
omc文件:為訓練后的文件,可用於識別。不能被OCR助手讀取,只能被orc讀取函數讀取
-
-
識別
色彩識別
-
RGB轉HSV
色調(H),飽和度(S),明度(V)
主要分析H,S分量
-
分類器(另外詳細介紹)
對比度相關算子
-
scale_image
-
emphasize
-
gray_range_rect
等(灰度圖的形態學變換) -
equ_histo_image
直方圖均衡化
幾大“門派”總結
-
基礎理論
-
灰度變換
-
增強
-
幾何變換
-
分割
-
頻域處理
-
形態學
-
復原
-
運動圖像
-
圖像配准