?今日光電?
? ? ?有人說,20世紀是電的世紀,21世紀是光的世紀;知光解電,再小的個體都可以被賦能。追光逐電,光贏未來...歡迎來到今日光電!

----追光逐電 光贏未來----
這篇教程很簡單,實現(xiàn)的功能是計算下圖中曲別針的數(shù)量和每個曲別針的朝向。主要內(nèi)容是翻譯自Halcon 的幫助文檔 “Chapter 4 ? Programming HDevelop”。使用的圖像如下:
這篇教程中我們假設 HDevelop 的各個參數(shù)都為默認值,通常新安裝好的 HDevelop 所有的參數(shù)就都是默認值。如果不是的話可以通過下面的命令行方式將 HDevelop 的各個參數(shù)重置為默認值。hdevelop -reset_preferences
首先打開 ?HDevelop ,如果我們調(diào)整過各個窗口的位置,則可以通過菜單命令 Window ? Organize Windows 將各個窗口恢復原始位置。加載圖像
加載圖像有多重方式,最簡單的方式是把圖像拖拽到 HDevelop 中。這時會自動彈出一個 Read Image 窗口,在這個窗口中可以設置一些基本的參數(shù)。
加載完成后會在 Program window 中顯示對應的語句。當然我們也可以直接在這個窗口中輸入這個語句。或者在 Operator Window 中輸入 read_image,這時這個窗口會提供這個函數(shù)的功能解釋,在這個 window 中還可以設置每個輸入輸出參數(shù)。
讀取完圖像后的第二個操作是閾值分割 threshold。同樣在 Operator Window 中輸入 threshold。按照下圖設置參數(shù),之后點擊 apply 按鈕。這時會直接執(zhí)行這條語句,但是不會把這條語句加入到 Program Window 中。我們可以試著調(diào)整參數(shù),通過 apply 按鈕,直接獲得當前參數(shù)的效果。在 graphics window 中可以很直觀的看到結(jié)果,紅色的區(qū)域就是通過 Threshold 選出的區(qū)域。確認參數(shù)之后點擊 OK 按鈕將該命令加入到 Program Window 中。下一步操作是獲取連通區(qū)域。Halcon 有個非常好的功能就是可以給出建議的操作。菜單 Suggestions ? Successors 會提示出 Threshold 之后經(jīng)常跟著的命令。可以看到第一個就是 connection。執(zhí)行 connection 的結(jié)果是獲得各個連通區(qū)域。graphics window 中會用不同的顏色顯示不同的連通區(qū)域。

? ? ? Graphics window 有許多參數(shù)可以設置,在這個窗口上單擊郵件,彈出的對話框如下圖所示。
點擊? ? ? ? ? ? ? SetParameters 后打開如下對話框:

? ? ? 大家可以隨便試試,各個參數(shù)的含義都比較簡單。鼠標放在 ConnectedRegions 變量上單擊鼠標右鍵后會彈出如下的菜單。

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

? ? ?實際上我們沒有這么多的曲別針,產(chǎn)生這么多的區(qū)域說明我們的 threshold 的參數(shù)不合適。下面就來研究如何能進一步優(yōu)化 Threshold 參數(shù)。菜單?Visualization/Tools → Gray Histogram ?會打開 Gray Histogram 窗口。我們調(diào)整 threshold 時選中的區(qū)域會跟著變化。
? ? ? 通過這個 Gray Histogram 可以比較容易的選擇合適的 Threshold。調(diào)整 Threshold 參數(shù)后得到的區(qū)域少了很多,但是還是比曲別針的數(shù)量多。這就說明我們需要其他的方法了。Halcon 提供了一個 Feature Histogram 功能,這個功能除了通過 Histogram 來劃分區(qū)域還會使用 Region 的其他 Feature。對于我們這個 區(qū)別的需求來說,面積就是一個非常好用Feature,因為所有的曲別針都有幾乎相同的面積。下面我們就來具體的操作。菜單 Visualization/Tools → Feature Histogram 可以打開 Feature Histogram 窗口。按照下圖中的參數(shù)設置就好。需要注意的是我用紅色框框起來的區(qū)域。這塊如果不是打勾狀態(tài),則 Insert Code 按鈕就無法點擊。
? ? ? ? 點擊 Insert Code 后就會生成實際的代碼:
select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 6302.75, 8541.28)
我們還要計算每個曲別針的方向,這可以用下面這條語句:
orientation_region (SelectedRegions, Phi)
然后這條語句計算每個區(qū)域的面積和中心點坐標。
area_center (SelectedRegions, Area, Row, Column)
最后我們要把結(jié)果顯示在屏幕上。首先在整個程序之前增加一條語句:
這條語句的作用是關閉任何已經(jīng)打開的圖像窗口。再加一句:
dev_open_window (0, 0, 512, 512, ‘black’, WindowHandle)
這條語句新建一個窗口。我們后面可以通過 WindowHandle 來操作這個窗口。
下面是顯示每一個曲別針的方向:
dev_disp_text (deg(Phi) + ' degrees', 'image', Row, Column, 'black', [], [])
? ? ? ? 輸出的結(jié)果如下:


申明:感謝原創(chuàng)作者的辛勤付出。本號轉(zhuǎn)載的文章均會在文中注明,若遇到版權(quán)問題請聯(lián)系我們處理。
?
----與智者為伍?為創(chuàng)新賦能----
【說明】歡迎企業(yè)和個人洽談合作,投稿發(fā)文。歡迎聯(lián)系我們誠招運營合伙人 ,對新媒體感興趣,對光電產(chǎn)業(yè)和行業(yè)感興趣。非常有意者通過以下方式聯(lián)我們!條件待遇面談聯(lián)系郵箱:uestcwxd@126.com
QQ:493826566