* Example for the application of the measure package
* including a lot of visualization operators
*
*讀取圖像
read_image (Zeiss1, 'zeiss1')
get_image_size (Zeiss1, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width / 2, Height / 2, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
*顯示圖像
dev_display (Zeiss1)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*在圖像上相應位置繪制圓,這里用固定變量的方法產生圓的參數,把這個圓繪制代碼注釋掉了。這個圓用于后面的測量工具上
* draw_circle (WindowHandle, Row, Column, Radius)
*定義變量用于生成圓,如果手動繪制就不需要用下面的變量了
Row := 275
Column := 335
Radius := 107
AngleStart := -rad(55)
AngleExtent := rad(170)
dev_set_draw ('fill')
dev_set_color ('green')
dev_set_line_width (1)
*獲取圓弧的起始坐標
get_points_ellipse (AngleStart + AngleExtent, Row, Column, 0, Radius, Radius, RowPoint, ColPoint)
*顯示圓弧
disp_arc (WindowHandle, Row, Column, AngleExtent, RowPoint, ColPoint)
dev_set_line_width (3)
*生成圓弧測量工具
*前五個參數是圓弧的位置相關輸入參數
*第六個參數是需要生成的測量圓弧工具的寬度,即一個圓弧區域的寬度,在這里整個測量區域是半徑-10到半徑+10這個區域范圍
*第七第八個參數是圖像寬高
*第九個參數是插值方式,這里是用最近鄰插值方式
*最后一個輸出參數是測量工具的句柄,后面需要用到這個測量工具都通過句柄引用
gen_measure_arc (Row, Column, Radius, AngleStart, AngleExtent, 10, Width, Height, 'nearest_neighbor', MeasureHandle)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*計算算法時間
count_seconds (Seconds1)
n := 10
for i := 1 to n by 1
*第一個參數是輸入圖像
*第二個參數是測量工具句柄值
*第三個參數是高斯平滑的sigma值
*第四個參數是閾值
*第五個參數是測量的邊緣方向選擇參數,'all'是選擇所有的邊緣,'negative'只選擇白到黑的邊緣,'positive'只選擇黑到白的邊緣
*這里兩個邊緣都選擇總共選擇出4個像素差值邊緣
*第六個參數是是否選擇端點,這里選擇所有端點
*第七個參數是輸出的邊緣點行坐標值
*第八個參數是輸出的邊緣點列坐標值
*第九個參數是輸出的邊緣點最大幅值
*第十個參數是輸出的相鄰邊緣之間的距離
measure_pos (Zeiss1, MeasureHandle, 1, 10, 'all', 'all', RowEdge, ColumnEdge, Amplitude, Distance)
endfor
count_seconds (Seconds2)
Time := (Seconds2 - Seconds1) / n
disp_continue_message (WindowHandle, 'black', 'true')
* stop ()
*計算兩個點間的距離
distance_pp (RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2], IntermedDist)
* dev_display (Zeiss1)
dev_set_color ('red')
* disp_circle (WindowHandle, RowEdge, ColumnEdge, RowEdge - RowEdge + 1)
*顯示測量出來的直線
disp_line (WindowHandle, RowEdge[1], ColumnEdge[1], RowEdge[2], ColumnEdge[2])
dev_set_color ('yellow')
disp_message (WindowHandle, 'Distance: ' + IntermedDist, 'image', 250, 80, 'yellow', 'false')
* dump_window (WindowHandle, 'tiff_rgb', 'C:\Temp\zeiss_result')
dev_set_line_width (1)
* disp_continue_message (WindowHandle, 'black', 'true')
stop ()
dev_clear_window ()
打開halcon,按下ctrl+e打開halcon自帶例程。工業領域->機械行業->measure_arc.hdev
這個例程是用圓弧測量工具測量圓弧的長度,較短的一段圓弧可以大約等長與直線,但大圓弧是不能等長于直線的,比如歷程中兩個凹坑處的圓弧長度這里同樣是可以測量出來的。
圓弧測量的原理與矩形測量的原理是一樣的,把圓弧區域用插值的方式轉換到矩形區域空間,在矩形主方向上做灰度值差分,得到差分圖像,找出差分值大于設定閾值的點位置。
審核編輯:劉清
-
圖像處理
+關注
關注
27文章
1295瀏覽量
56800 -
HALCON
+關注
關注
16文章
66瀏覽量
27244
原文標題:Halcon例程分析6:圓弧測量工具
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應用】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論