* 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ù),把這個(gè)圓繪制代碼注釋掉了。這個(gè)圓用于后面的測(cè)量工具上
* draw_circle (WindowHandle, Row, Column, Radius)
*定義變量用于生成圓,如果手動(dòng)繪制就不需要用下面的變量了
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)
*生成圓弧測(cè)量工具
*前五個(gè)參數(shù)是圓弧的位置相關(guān)輸入?yún)?shù)
*第六個(gè)參數(shù)是需要生成的測(cè)量圓弧工具的寬度,即一個(gè)圓弧區(qū)域的寬度,在這里整個(gè)測(cè)量區(qū)域是半徑-10到半徑+10這個(gè)區(qū)域范圍
*第七第八個(gè)參數(shù)是圖像寬高
*第九個(gè)參數(shù)是插值方式,這里是用最近鄰插值方式
*最后一個(gè)輸出參數(shù)是測(cè)量工具的句柄,后面需要用到這個(gè)測(cè)量工具都通過句柄引用
gen_measure_arc (Row, Column, Radius, AngleStart, AngleExtent, 10, Width, Height, 'nearest_neighbor', MeasureHandle)
disp_continue_message (WindowHandle, 'black', 'true')
stop ()
*計(jì)算算法時(shí)間
count_seconds (Seconds1)
n := 10
for i := 1 to n by 1
*第一個(gè)參數(shù)是輸入圖像
*第二個(gè)參數(shù)是測(cè)量工具句柄值
*第三個(gè)參數(shù)是高斯平滑的sigma值
*第四個(gè)參數(shù)是閾值
*第五個(gè)參數(shù)是測(cè)量的邊緣方向選擇參數(shù),'all'是選擇所有的邊緣,'negative'只選擇白到黑的邊緣,'positive'只選擇黑到白的邊緣
*這里兩個(gè)邊緣都選擇總共選擇出4個(gè)像素差值邊緣
*第六個(gè)參數(shù)是是否選擇端點(diǎn),這里選擇所有端點(diǎn)
*第七個(gè)參數(shù)是輸出的邊緣點(diǎn)行坐標(biāo)值
*第八個(gè)參數(shù)是輸出的邊緣點(diǎn)列坐標(biāo)值
*第九個(gè)參數(shù)是輸出的邊緣點(diǎn)最大幅值
*第十個(gè)參數(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 ()
*計(jì)算兩個(gè)點(diǎn)間的距離
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)
*顯示測(cè)量出來的直線
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)域->機(jī)械行業(yè)->measure_arc.hdev
這個(gè)例程是用圓弧測(cè)量工具測(cè)量圓弧的長(zhǎng)度,較短的一段圓弧可以大約等長(zhǎng)與直線,但大圓弧是不能等長(zhǎng)于直線的,比如歷程中兩個(gè)凹坑處的圓弧長(zhǎng)度這里同樣是可以測(cè)量出來的。
圓弧測(cè)量的原理與矩形測(cè)量的原理是一樣的,把圓弧區(qū)域用插值的方式轉(zhuǎn)換到矩形區(qū)域空間,在矩形主方向上做灰度值差分,得到差分圖像,找出差分值大于設(shè)定閾值的點(diǎn)位置。
審核編輯:劉清
-
圖像處理
+關(guān)注
關(guān)注
27文章
1282瀏覽量
56647 -
HALCON
+關(guān)注
關(guān)注
16文章
64瀏覽量
27189
原文標(biāo)題:Halcon例程分析6:圓弧測(cè)量工具
文章出處:【微信號(hào):gh_a8b121171b08,微信公眾號(hào):機(jī)器人及PLC自動(dòng)化應(yīng)用】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論