1. 程式人生 > 其它 >Halcon 入門教程(01)

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