文章目錄
- 文章專欄
- 前言
- 文章解析
- 開頭
- 步驟分析
- 簡單案例
- 進階方案
- 進階代碼案例
- crystal,結晶匹配
- 需求分析
文章專欄
Halcon開發
Halcon學習 練習項目gitee倉庫
CSDN Major 博主Halcon文章推薦
前言
今天來看第三章內容,既然是零基礎,而且我還有大概3-4個月的時間準備,我還是老老實實從頭開始學機器視覺好了。
文章解析
開頭
- Blob 解析非常簡單。
- Blob通過亮度,將連通點和背景進行區分
Blob分析具有特別好的效果,經常用于機器視覺的各種需求中。
步驟分析
- 獲取圖片
- 圖片特征性分割
- 特征獲取
簡單案例
* 讀取案例圖片
read_image (Image, 'particle')
* 灰度獲取,灰度范圍:120-255
threshold (Image, BrightPixels, 120, 255)
* 按照連通性對圖像進行區分
connection (BrightPixels, Particles)
* 將分割好的圖轉化為對應的坐標數組(面積,中心點x,中心點y)
area_center (Particles, Area, Row, Column)
進階方案
由于某些圖像的復雜性要遠遠高于簡單示例,所以可以按照一下步驟來進行機器視覺分析
- Acquire Image(s):獲取圖片
- Use ROI
- 調整圖片的ROI
- 矯正圖片
- 選取用于區分的特性,例如:灰度,面積,形狀
- 區分圖片
- 匹配圖像特性
- 將所有匹配的圖像轉換為世界坐標
- 可視化結果
進階代碼案例
crystal,結晶匹配
示例路徑: %HALCONEXAMPLES%/solution_guide/basics/crystal.hdev
模板,找到如下三個結晶塊
需求分析
- 我們需要找到結晶體。結晶體和氣泡的區別就是結晶體有明顯的六邊形結構
- 再對低區分度的圖片進行區分的時候,我們用到mean_image來獲得一個模糊的背景
- 將原圖片和模糊圖片進行dyn_threshold,獲取到高8個灰度的區域。因為圖片的特點就是白背景,灰物體。灰物體涂抹后,亮度變高。疊放之后區域就是物體區域。
- 下一步我們就選擇六邊形的區域即可。因為結晶體是鏤空圖形,將所有的鏤空圖形轉換為凸多邊形。即填充空洞。
- 然后進行圖像面積匹配,面積必須是填充圖形才可以。后面就是灰度匹配。
* crystal.hdev: extraction of hexagonally shaped crystals via local thresholding and region post-processing
*
dev_close_window ()
dev_update_window ('off')
* ****
* 添加圖片,設置圖像填充格式,線條寬度等設置
* ****
read_image (Image, 'crystal')
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowID)
set_display_font (WindowID, 12, 'mono', 'true', 'false')
dev_set_draw ('margin')
dev_set_line_width (2)
dev_display (Image)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 區分圖像
* ****
* -> 使用灰度進行區分
* 涂抹處理,將灰度范圍變大
mean_image (Image, ImageMean, 21, 21)
* 疊放對比,獲取灰度高8個單位的部分。
dyn_threshold (Image, ImageMean, RegionDynThresh, 8, 'dark')
* -> 將ROI連通區域區分
connection (RegionDynThresh, ConnectedRegions)
dev_display (ConnectedRegions)
disp_continue_message (WindowID, 'black', 'true')
stop ()
* ****
* 處理Region
* ****
* 將鏤空圖形空洞填充,變成凸多邊形
shape_trans (ConnectedRegions, ConvexRegions, 'convex')
* 選擇圖片面積區域在600 - 2000的圖像
select_shape (ConvexRegions, LargeRegions, 'area', 'and', 600, 2000)
* 選擇[交叉熵]為1-5.6的區域。簡單來說就是不重疊的區域
select_gray (LargeRegions, Image, Crystals, 'entropy', 'and', 1, 5.6)
dev_display (Image)
dev_display (Crystals)
一文搞懂熵(Entropy),交叉熵(Cross-Entropy)
我感覺我單純的翻譯原文沒啥好寫的。還是直接上代碼注釋好了