* 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 ()
*在圖像上相應(yīng)位置繪制圓,這里用固定變量的方法產(chǎn)生圓的參數(shù),把這個圓繪制代碼注釋掉了。這個圓用于后面的測量工具上
* 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)
*獲取圓弧的起始坐標(biāo)
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)
*生成圓弧測量工具
*前五個參數(shù)是圓弧的位置相關(guān)輸入?yún)?shù)
*第六個參數(shù)是需要生成的測量圓弧工具的寬度,即一個圓弧區(qū)域的寬度,在這里整個測量區(qū)域是半徑-10到半徑+10這個區(qū)域范圍
*第七第八個參數(shù)是圖像寬高
*第九個參數(shù)是插值方式,這里是用最近鄰插值方式
*最后一個輸出參數(shù)是測量工具的句柄,后面需要用到這個測量工具都通過句柄引用
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
*第一個參數(shù)是輸入圖像
*第二個參數(shù)是測量工具句柄值
*第三個參數(shù)是高斯平滑的sigma值
*第四個參數(shù)是閾值
*第五個參數(shù)是測量的邊緣方向選擇參數(shù),'all'是選擇所有的邊緣,'negative'只選擇白到黑的邊緣,'positive'只選擇黑到白的邊緣
*這里兩個邊緣都選擇總共選擇出4個像素差值邊緣
*第六個參數(shù)是是否選擇端點,這里選擇所有端點
*第七個參數(shù)是輸出的邊緣點行坐標(biāo)值
*第八個參數(shù)是輸出的邊緣點列坐標(biāo)值
*第九個參數(shù)是輸出的邊緣點最大幅值
*第十個參數(shù)是輸出的相鄰邊緣之間的距離
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自帶例程。工業(yè)領(lǐng)域->機械行業(yè)->measure_arc.hdev
這個例程是用圓弧測量工具測量圓弧的長度,較短的一段圓弧可以大約等長與直線,但大圓弧是不能等長于直線的,比如歷程中兩個凹坑處的圓弧長度這里同樣是可以測量出來的。
圓弧測量的原理與矩形測量的原理是一樣的,把圓弧區(qū)域用插值的方式轉(zhuǎn)換到矩形區(qū)域空間,在矩形主方向上做灰度值差分,得到差分圖像,找出差分值大于設(shè)定閾值的點位置。
審核編輯:劉清
-
圖像處理
+關(guān)注
關(guān)注
27文章
1295瀏覽量
56801 -
HALCON
+關(guān)注
關(guān)注
16文章
66瀏覽量
27245
原文標(biāo)題:Halcon例程分析6:圓弧測量工具
文章出處:【微信號:gh_a8b121171b08,微信公眾號:機器人及PLC自動化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論