Halcon 入門教程(01)


Halcon 入門教程(01)

這篇教程很簡單,實現的功能是計算下圖中曲別針的數量和每個曲別針的朝向。主要內容是翻譯自Halcon 的幫助文檔 “Chapter 4 Programming HDevelop”。

使用的圖像如下:

 

 


這篇教程中我們假設 HDevelop 的各個參數都為默認值,通常新安裝好的 HDevelop 所有的參數就都是默認值。如果不是的話可以通過下面的命令行方式將 HDevelop 的各個參數重置為默認值。

hdevelop -reset_preferences

首先打開 HDevelop ,如果我們調整過各個窗口的位置,則可以通過菜單命令 Window ⇒ Organize Windows 將各個窗口恢復原始位置。

加載圖像

加載圖像有多重方式,最簡單的方式是把圖像拖拽到 HDevelop 中。這時會自動彈出一個 Read Image 窗口,在這個窗口中可以設置一些基本的參數。

 

 


加載完成后會在 Program window 中顯示對應的語句。當然我們也可以直接在這個窗口中輸入這個語句。或者在 Operator Window 中輸入 read_image,這時這個窗口會提供這個函數的功能解釋,在這個 window 中還可以設置每個輸入輸出參數。

讀取完圖像后的第二個操作是閾值分割 threshold。同樣在 Operator Window 中輸入 threshold。按照下圖設置參數,之后點擊 apply 按鈕。這時會直接執行這條語句,但是不會把這條語句加入到 Program Window 中。我們可以試着調整參數,通過 apply 按鈕,直接獲得當前參數的效果。在 graphics window 中可以很直觀的看到結果,紅色的區域就是通過 Threshold 選出的區域。確認參數之后點擊 OK 按鈕將該命令加入到 Program Window 中。

下一步操作是獲取連通區域。 Halcon 有個非常好的功能就是可以給出建議的操作。菜單 Suggestions ⇒ Successors 會提示出 Threshold 之后經常跟着的命令。可以看到第一個就是 connection。執行 connection 的結果是獲得各個連通區域。graphics window 中會用不同的顏色顯示不同的連通區域。

 

 

Graphics window 有許多參數可以設置,在這個窗口上單擊郵件,彈出的對話框如下圖所示。

 

 


點擊 Set Parameters 后打開如下對話框:

 

 

大家可以隨便試試,各個參數的含義都比較簡單。

鼠標放在 ConnectedRegions 變量上單擊鼠標右鍵后會彈出如下的菜單。

 

 

點擊 Select 可以看到每個 Region 的詳細信息,總共有 98 個區域。

 

 

實際上我們沒有這么多的曲別針,產生這么多的區域說明我們的 threshold 的參數不合適。下面就來研究如何能進一步優化 Threshold 參數。

菜單 Visualization/Tools → Gray Histogram 會打開 Gray Histogram 窗口。我們調整 threshold 時選中的區域會跟着變化。

 

 


通過這個 Gray Histogram 可以比較容易的選擇合適的 Threshold。

調整 Threshold 參數后得到的區域少了很多,但是還是比曲別針的數量多。這就說明我們需要其他的方法了。 Halcon 提供了一個 Feature Histogram 功能,這個功能除了通過 Histogram 來划分區域還會使用 Region 的其他 Feature。對於我們這個 區別的需求來說,面積就是一個非常好用Feature,因為所有的曲別針都有幾乎相同的面積。下面我們就來具體的操作。

菜單 Visualization/Tools → Feature Histogram 可以打開 Feature Histogram 窗口。按照下圖中的參數設置就好。需要注意的是我用紅色框框起來的區域。這塊如果不是打勾狀態,則 Insert Code 按鈕就無法點擊。

 

 


點擊 Insert Code 后就會生成實際的代碼:

select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 6302.75, 8541.28)
1
我們還要計算每個曲別針的方向,這可以用下面這條語句:

orientation_region (SelectedRegions, Phi)
1
然后這條語句計算每個區域的面積和中心點坐標。

area_center (SelectedRegions, Area, Row, Column)
1
最后我們要把結果顯示在屏幕上。首先在整個程序之前增加一條語句:

dev_close_window ()
1
這條語句的作用是關閉任何已經打開的圖像窗口。再加一句:

dev_open_window (0, 0, 512, 512, ‘black’, WindowHandle)

這條語句新建一個窗口。我們后面可以通過 WindowHandle 來操作這個窗口。

下面是顯示每一個曲別針的方向:

dev_disp_text (deg(Phi) + ' degrees', 'image', Row, Column, 'black', [], [])
1
輸出的結果如下:

 

 


原文鏈接:https://blog.csdn.net/liyuanbhu/article/details/90110447


免責聲明!

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



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