Halcon,大名鼎鼎,如雷貫耳,機器視覺領域無人不知,無人不曉,但很多初學的同學被一大堆SDK(算子)看的蒙頭轉(zhuǎn)向,喪失信心,在這里,我談談halcon的學習方法和心得。
此所謂halcon開始學習、學習的過程、學習的結(jié)果。 學halcon的三個過程,開始學習的時候,你要有目標,哪怕你現(xiàn)在是學生還是轉(zhuǎn)行來學習halcon的人,心中要有一個目標,不能做一條“閑魚”就滿足了。學習halcon過程中,不拋棄不放棄,衣帶漸寬終不悔為伊消得人憔悴。當你堅持學習下來,經(jīng)過不斷努力學習,成長起來,卻無意間看到那人正在燈火闌珊處,勝利儼然已經(jīng)歸來。 我們?nèi)チ私鈾C器視覺發(fā)展歷史就知道,機器視覺是產(chǎn)業(yè)驅(qū)動發(fā)展的, 我們學習halcon也是通過機器視覺應用場景驅(qū)動的,機器視覺應用主要分為四大類:定位、識別、測量、檢測,學習halcon我們主要圍繞著著四類問題進行展開,每個應用通過幾個項目總結(jié)和歸納,我覺得就已經(jīng)入門了,真正要成為資深視覺工程師,還需要項目經(jīng)驗、工程實踐經(jīng)驗來進行深入。 ?

機器視覺應用場景分類
視覺定位
視覺定位應用主要是找到物體的位置,那么怎么找?在這里一個重要的步驟就是標定,標定是把相機的像素坐標系轉(zhuǎn)換為機械上的物理坐標系,使得圖像中的識別的像素值轉(zhuǎn)換為機械坐標值后發(fā)送給機械運動,找到目標位置。

坐標變換過程 在標定過程中,使用halcon,不需要你自己解矩陣,一個算子搞定?vector_to_hom_mat2d( : : Px, Py, Qx, Qy : HomMat2D)?輸入像素坐標點Px,Py,輸入機械坐標點Qx,Qy生成一個仿射變換矩陣,比如我用模板匹配查找到了一個像素點(X,Y),那么通過affine_trans_point_2d( : : HomMat2D, Px, Py : Qx, Qy)就可以計算出機械坐標,入門,你知道這些就夠了,至于深入的應用,比如不共軸情況那就是后面入門之后的事情。

計算坐標 那么,上面說的定位標定是一個純數(shù)學問題,那么現(xiàn)在我們怎么找到特征點?怎么做定位?在這里就要用halcon的圖像處理算子了,常用的定位方法有模板匹配、blob定位、圓查找、線查找, 模板匹配是亞像素精度(sub-pixel),定位中大多數(shù)場合會使用,模板匹配2個核心算子,也是最常用的,至于其他的可變性、基于點、基于灰度、基于描述符、局部可變性、可變性的基本在實際應用中應用的很少,基于此,你只需要知道在哪里找到halcon的這些模塊例程,用到了去學習即可。查找方法 在Hdevelop中 快捷鍵 Ctrl+E->方法 中查找

常用圖像定位方法

查找例程 ?
模板匹配
當然,在進行模板匹配之前,可能會用到很多圖像預處理,比如進行圖像濾波mean_image、gauss_filter、smooth_image、binominal_filter等濾波算子,還會進行ROI(region of interest)設置圖像感興趣區(qū)域,所用到的halcon算子是draw_開頭的一些列算子,在HDevelop中,按F1幫助按鈕,搜索draw_可以看到畫圓、畫橢圓、或線、畫點、畫多邊形等都有,其中*_mod代表在原有的圖像基礎上修飾圖形,這樣這一些系列算子你又記住了,是不是很簡單

交互畫ROI

直接創(chuàng)建和通過輪廓創(chuàng)建模板 直接通過create_shape_model創(chuàng)建模板會有很多不需要的輪廓,我們通過xld來進行創(chuàng)建,通過edges_sub_pixel獲取亞像素輪廓,然后通過select_shape_xld的長度特征刪選掉一些不必要的輪廓,大家可以看到,基本上每一個算子的含義都可以通過算子的組合理解到,何況halcon中有智能提示、VS中也有智能提示,只需要打出一個單詞你就可以選擇了。
blob定位
使用blob定位就是精度不高的情況或者用來做粗定位了,在halcon中,搜索threshold可以出現(xiàn)一系列二值化操作的接口(如果大家用的多了,在OpenCV或則其他算法庫都一樣),可以得到一系列二值化操作,常用的有threshold、auto_threshold、binary_threshold、dyn_threshold、var_threshold,其他的閾值很少用。

Threshold判斷出產(chǎn)品是否OK
找線、找圓
在這里有一個重要的算子gen_measure_rectangle2,這個算子是準備一個測量對象,然后通過mesure_pos/measure_pair進行測量邊界點,最后通過fit_circle_contour_xld和fit_line_contour_xld進行擬合出圓和直線。

擬合直線和擬合圓 總結(jié)一下,定位類項目,一個關(guān)鍵是標定,另一個關(guān)鍵就是定位算法,大多數(shù)情況下定位都是通過找模板來定位。
視覺測量
視覺測量項目類應用主要是應用在有2個步驟,第一步粗定位,第二部測量。定位階段使用模板匹配create_shape_model、find_shape_mode來解決,然后使用vector_angle_to_rigid生成一個仿射變換矩陣,使用這個矩陣矯正圖像affine_trans_image,使用之后使用gen_measure_rectangle2生成測量對象,通過mesure_pos/measure_pair進行測量邊界點,最后通過fit_circle_contour_xld和fit_line_contour_xld進行擬合出圓和直線,最后利用halcon中的 distance_算子來計算點點測量、點線測量等。 這類應用比較簡單,應用也比較廣泛。

找點擬合圓
識別項目
識別項目,識別什么?通常在機器視覺領域,識別主要是進行OCR、一維碼、二維碼的識別。
OCR
在halcon傳統(tǒng)識別中,要識別OCR,就要先分割出字符,分割字符最常用的就是閾值分割,也就是帶threshold的系列算子組合,再通過濾波算子組合、形態(tài)學算子處理區(qū)域,把字符完全分割出來識別

分割字符步驟 分割出來后就可以使用halcon 的create_ocr_class_mlp/svm/knn/box創(chuàng)建分類器,再就調(diào)用trainf_ocr_class_mlp訓練字符,通過write_ocr_class_mlp寫入字符句柄到文件中,clear_ocr_class_mlp清理create_ocr_class_*創(chuàng)建的句柄對象,以免句柄內(nèi)存泄漏。 在識別字符的時候通過read_ocr_class_mlp讀取字符模型再通過do_ocr_single_class_mlp讀取字符即可。大家看到這個過程是 create->trainf->write; read->do_ocr,在大多數(shù)halcon應用中都是這個模式,創(chuàng)建->訓練->寫入文件, 讀取文件->識別, 這些都是經(jīng)驗套路。 當然halcon中OCR字符識別模塊已經(jīng)有預訓練好的字符,這些事常用的,但在很多實際項目情況中是需要自己訓練的。

halcon默認訓練的字符庫
一維碼
一維碼識別中,create_bar_code_model創(chuàng)建一維碼模型,通過set_bar_code_param設置一維碼參數(shù),通過find_bar_code查找一維碼內(nèi)容,最后clear_bar_code清空數(shù)據(jù)模型。在一維碼應用中,我們沒有做圖像預處理的工作,halcon通過set_bar_code_param設置一些參數(shù),就可以解碼出一維碼了,halcon強大的圖像處理能力。
二維碼
二維碼識別中,create_data_code_2d_model創(chuàng)建二維碼模型,通過set_data_code_2d_param設置二維碼參數(shù),再通過find_data_code_2d查找二維碼的內(nèi)容,最后clear_data_code_2d_model清空數(shù)據(jù)模型,同樣,在這里沒有做圖像預處理工偶,halcon通過set_data_code_2d_param參數(shù),強大的算法就可以解碼了。 總結(jié)一點,識別類應用主要是在軟件層的設計,軟件層需要設計出交互好用的軟件,以及讀取數(shù)據(jù)后對一維碼、二維碼數(shù)據(jù)的處理,以及跟第三方平臺對接,所以這才是實際項目中不確定的。
視覺檢測
在這里視覺檢測是一個綜合應用算子的場景,你可能會使用blob來進行檢測,也可能使用模板匹配來進行檢測,也可能用FFT,以及顏色識別,視覺檢測的情況非常多,這也是實際項目中最多的非標項目,在這里使用的最多的就是blob算法,產(chǎn)品有無、產(chǎn)品臟污、產(chǎn)品破損、產(chǎn)品裂紋等都可以通過blob特征來區(qū)分,用到的算子還是上面提到的, 不過視覺檢測很依耐圖像成像,比如現(xiàn)實項目中的布匹、瓷磚等檢測圖像成像是主要問題,還有就是線掃相機的掃描速度!

視覺檢測常用的算法處理 至于FFT傅里葉變換,是把空間信息轉(zhuǎn)化為頻域信息,使用的算法很少 ,rft_generic->convol_fft->rft_generic,最后通過blob來進行處理,再加上形態(tài)學。

FFT 上面是一個大的分類,至于大家經(jīng)常聽到的標定,在這里有很多種類型標定,視覺定位中的標定上面已經(jīng)說了,vector_to_hom_mat2d/affine_trans_point_2d。還有尺度標定,尺度標定就是一個像素轉(zhuǎn)物理單位的過程,在測量項目中會用用到,經(jīng)常性的使用一個標定塊計算出單像素大小即可?;儤硕ǎ@是圖像校正,當我們使用焦距比較短比如8mm的鏡頭時,畸變比較大,在HDevelop->助手->打開Calibration進行標定即可,使用halcon標定助手外加一塊標定板解決。

標定 當然這四大類不是獨立運行的, 很多項目同時存在定位、缺陷、測量、識別的情況,這就要考驗工程師的應用能力了,要熟練的使用起來,這些基本的幾大類知識點要明白的。 ?
審核編輯:黃飛
?
電子發(fā)燒友App















評論