Halcon基礎知識總結(一文學會halcon基礎操作,總結自超人視覺)


此文根據《超人視覺 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]

運行結果

讀取圖片的四種方法


  1. 文件 -> 讀取圖片

  2. Image Acquisition -> 自動檢測接口(刷新設備)-> Direct show,從攝像頭直接讀圖

  3. Image Acquisition -> 選擇文件,從圖像文件中讀取

  4. Image Acquisition -> 選擇路徑,結合正則表達式讀取路徑下的圖片

    PS:用Image Acquisition讀取時記得點擊代碼生成

攝像頭抓取模式:在可視化 -> 更新窗口中調整

同步采集:實時抓取,一直抓取

異步采集:只等圖片處理完后,grab_image才開始抓取

PS:更多信息包括雙相機采集,可以在案例 -> 方法 -> 圖像采集設備中學習

ROI(感興趣區域)


特征檢測


PS:二值化之后的區域雖然不連通,但仍然認為是一個區域。需要調用connection把區域分割成獨立區域,才能進行select_shape,點擊特定區域,再進行特征檢測,則顯示特定區域的特征信息。(connection分割依據(九宮格中的八鄰域))

若直方圖窗口內的直方圖不顯示

1.將程序執行一遍(按完全執行或F5)

2.將直方圖窗口縱向拉大(這個拉升方案默認把剩余顯示區域留給直方圖)

形態學


膨脹:

  • 將模板在原圖上移動,當除中心點外的模板點,與原圖中像素重合時,將中心點變黑。最終結果(當然也能覆蓋原圖)就是新圖

  • 效果即擴大了“一圈”

腐蝕:

  • 將模板在原圖上移動,僅有整個結構元素能全部被區域所包含時,保留中心元素點,最終結果即新圖能被原圖包含
  • 效果即縮小了“一圈”

開運算:

  • 先腐蝕,后膨脹
  • 效果:減少像素(弱於腐蝕),斷開

閉運算:

  • 先膨脹,后腐蝕
  • 效果:增加像素(弱於膨脹),連接

PS:以上是對二值圖像而言,而對灰度圖像做形態學處理是改變亮暗

代碼運行事件監測


  1. 使用count函數

  2. 如圖使用“性能評測器”

結構元素模板選擇


  • 要根據感興趣的圖像結構

  • 來靈活選擇結構元素模板

效果展示(以官方例程ball.hdve為例):

  • 原圖

  • 紅色->圓結構元素提取

  • 綠色->矩形結構提取

可以知道,想要提取圓的時候,采用圓結構元素能更好保留形態

之后采用圓度特征進行進一步的blob提取

預處理圖像增強


一般通過如下幾種方式:

  1. scale_image: g' := g * Mult + Add

    g為當前的灰度值,Mult 為所乘的系數,Add為加的偏移值,由公式可以刊出用scale_image來處理圖像是個線性變化,會讓黑的地方更黑,亮的地方更亮。

  2. 圖像形態學

    • 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為斜外接矩形,詳見官方手冊

以下圖為例,凸形和外接矩形分別如下



定位方法


  1. Blob分析

  2. 模板匹配

    • 通過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流程


  1. 采集

  2. 預處理,校正

  3. 分割成獨立連通域

    如果每個字沒有形成獨立連通域(如上圖),需要使用形態學,使每個漢字的各筆畫在各自的一個連通域內,不同的漢字的各筆畫在不同的連通域內。如“明≠日月”的關系

  4. 使用現成的,或訓練

    • trf文件:文本與字符的關聯文件,只是對應關系。可被OCR助手和OCR讀取函數讀取

    • omc文件:為訓練后的文件,可用於識別。不能被OCR助手讀取,只能被orc讀取函數讀取

  5. 識別

色彩識別


  1. RGB轉HSV

    色調(H),飽和度(S),明度(V)

    主要分析H,S分量

  2. 分類器(另外詳細介紹)

對比度相關算子


  • scale_image

  • emphasize

  • gray_range_rect等(灰度圖的形態學變換)

  • equ_histo_image直方圖均衡化

幾大“門派”總結


  1. 基礎理論

  2. 灰度變換

  3. 增強

  4. 幾何變換

  5. 分割

  6. 頻域處理

  7. 形態學

  8. 復原

  9. 運動圖像

  10. 圖像配准


免責聲明!

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



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