Halcon例程分析6:圓弧測量工具

*  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

這個例程是用圓弧測量工具測量圓弧的長度,較短的一段圓弧可以大約等長與直線,但大圓弧是不能等長於直線的,比如歷程中兩個凹坑處的圓弧長度這裏同樣是可以測量出來的。

圓弧測量的原理與矩形測量的原理是一樣的,把圓弧區域用插值的方式轉換到矩形區域空間,在矩形主方向上做灰度值差分,得到差分圖像,找出差分值大於設定閾值的點位置。

待測量圖像

圓弧長度測量效果圖

 

 

發佈了60 篇原創文章 · 獲贊 8 · 訪問量 9683
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章