***該例項由於鋸片很薄,採用漫反射背光照明
* 該程式演示了如何通過測量影象中的角度來檢查鋸片的齒。
* * 初始化一些常量
pi := rad(180)
pi_2 := rad(90)
* * 顯示初始化
dev_update_off ()
read_image (image, 'saw_blade/saw_01')
get_image_size (image, width, height)
dev_close_window ()
dev_open_window_fit_image (image, 0, 0, 640, 640, windowhandlemain)
set_display_font (windowhandlemain, 16, 'mono', 'true', 'false')
get_window_extents (windowhandlemain, windowrow, windowcolumn, windowwidth, windowheight)
dev_open_window (400, windowwidth / 2, 300, 300, 'black', windowhandlezoom)
dev_set_line_width (2)
* * 主迴圈:處理不同的影象
for index1 := 1 to 7 by 1 //迴圈所以影象
read_image (image, 'saw_blade/saw_' + index1$'02')
* *通過亞畫素精確的閾值獲得鋸的輪廓。
threshold_sub_pix(image, border, 128) //以亞畫素精度從影象中提取crossing,而是將灰度值小於threshold的區域與灰度值大於threshold的區域分割線返回border
* * 分割,選擇和分類線性輪廓零件
segment_contours_xld(border, contourssplit, 'lines_circles', 5, 6, 4)
//將xld輪廓分割為線段、圓弧或橢圓弧
select_shape_xld (contourssplit, selectedcontours, 'contlength', 'and', 30, 200) //使用形狀特徵選擇輪廓或多邊形
count_obj (selectedcontours, number) //計算區域的數量
gen_empty_obj (toothsides)//生成空陣列物件
for index2 := 1 to number by 1
select_obj (selectedcontours, selectedcontour, index2)//迴圈所有物件
*獲得全域性輪廓屬性
get_contour_global_attrib_xld
如果attrib =0,這一部分輪廓最適合被擬合為橢圓弧。
如果attrib =1,這一部分輪廓最適合被擬合為圓弧。
如果attrib =-1,這一部分輪廓最適合被擬合為-直線。
if (attrib == -1)
concat_obj (toothsides, selectedcontour, toothsides) //兩個區域組合到一起,生成新區域toothsides
endif
endfor
sort_contours_xld (toothsides, toothsidessorted, 'upper_left', 'true', 'column') //根據輪廓的相對位置對輪廓進行排序
* * 計算鋸齒每側的方向
fit_line_contour_xld(toothsidessorted, 'tukey', -1, 0, 5, 2, rows1, columns1, rows2, columns2, nr, nc, dist) //
對一些線段的xld做近似計算直線計算
fit_line_contour_xld( contours : : algorithm, maxnumpoints, clippingendpoints, iterations, clippingfactor : rowbegin, colbegin, rowend, colend, nr, nc, dist )
contours(in):輸入輪廓
algorithm(in):形成線的演算法
maxnumpoints(in):用於計算的最大輪廓點個數
clippingendpoints(in):在逼近過程中被忽略的開始及末尾點個數
iterations(in):迭代的最大次數
clippingfactor(in):消除異常值的裁剪因子
rowbegin(out):線段開始點的行座標
colbegin(out):線段開始的列座標
rowend(out):線段結尾的行座標
colend(out):線段結尾的列座標
nr(out):線引數:法向量的行座標
nc(out):法向量的列座標
dist(out):原點到該線的距離
line_orientation(rows1, columns1, rows2, columns2, orientations) //返回直線的角度:-90到90之間
* 測量屬於同一鋸齒角度
angles :=
* 檢查第一顆鋸齒是否完全可見。
*如果沒有,請從第二顆鋸齒開始測量。
if (rows1[0] > rows2[0]) //如果起始座標rows1>結束座標 rows2,說明是鋸齒的右側,則第一顆鋸齒沒有左側,第一顆鋸齒可以跳過不計算了
start := 1
else
start := 2
endif
for index2 := start to |orientations| - 1 by 2
angle := abs(orientations[index2 - 1] - orientations[index2])
* 確保角度在[0,pi / 2]度的範圍內。
if (angle > pi_2)
angle := pi - angle
endif
* * 顯示結果
dev_display_tooth (image, toothsides, index2, rows1, columns1, rows2, columns2, windowhandlemain, windowhandlezoom)
dev_set_window (windowhandlemain)
dev_disp_text ('tooth ' + (index2 + 1) / 2, 'window', 10, 10, 'black', , )
dev_disp_text ('included angle: ' + deg(angle)$'.2f' + ' deg', 'window', 35, 10, 'black', , )
dev_disp_text ('press run (f5) to continue', 'window', 'bottom', 'right', 'black', , )
angles := [angles,angle]
stop ()
endfor
endfor
* dev_set_window (windowhandlemain)
dev_disp_text (' end of program ', 'window', 'bottom', 'right', 'black', , )
dev_set_window (windowhandlezoom)
dev_close_window ()
值得借鑑:
1.將鋸齒從背景中分割,使用亞畫素精度演算法。通常有兩種亞畫素精度演算法:亞畫素輪廓精度提取演算法(邊緣提取)、亞畫素閾值分割演算法(閾值分割),亞畫素閾值分割演算法適合此例子(背光照射使得背景為白色、鋸齒為黑色),閾值採用均值128。
2.將每個鋸齒分割,使用segment_contours_xld將輪廓分割為線段、直線以及橢圓,並出去過長、過短的線段。
3.進一步除去鋸齒間的圓弧get_contour_global_attrib_xld
4.從左至右 對輪廓排序,並使用fit_line_contour_xld對直線擬合
5.計算擬合直線的方向,line_orientation得到的直線方向範圍是[-90,90]
6.通過相鄰兩側擬合直線(同一鋸齒)相減, 計算每個鋸齒的角度
計算鋸齒沒測的方向,直接的方法是圖(b)用過輪廓起點、終點的直線角度,但鋸齒頂部不一定是理想的尖端,因此用輪廓線上的所有點(擬合直線)更好。
圖(c)可以看出,亞畫素精度下,擬合直線的角度與真實直線的角度(a)幾乎相等。
halcon學習筆記 機器視覺工程應用的開發思路
機器視覺工程應用主要可劃分為硬體和軟體兩大部分。硬體 工程應用的第一步就是硬體選型。硬體選型很關鍵,因為它是你後面工作的基礎。主要是光源 工業相機和鏡頭選擇。軟體 目前業內商業庫主要有halcon,康耐視,dalsa,evision,ni等,開源庫有opencv.其中ni的labview visio...
Halcon 機器視覺中常用運算元
在機器視覺中,影象處理是必不可少的步驟。一般而言,呼叫第三方影象處理函式庫是視覺軟體方便快捷開發的一種手段。而在這其中,德國付費軟體halcon是行業內使用較多的一款影象處理函式庫。本人現在接觸學習使用的是halcon12.0版本,通過本文,將一些常見的,開發中使用的halcon運算元簡單解析,總結...
Halcon 機器視覺 發展前景
無意中看到了 halcon c 混合程式設計,奈何我不懂咋回事,只有先了解 halcon是什麼。想要學習 halcon機器視覺,當然幫你找了資源 論壇 視覺imax 感興趣的自行了解 用halcon五年回答一下 1.機器視覺好找也不好找工作,在北京 上海 深圳 尤其深圳人才奇缺。如果是一些二線城市崗...