halcon 分類器
-
分類器使用範圍 :
1.1 image segmentation 圖像分割; object recognition 對象識別; quality control 質量控制;
novelty detection 缺陷檢測; optical character recognition(OCR) 光學字符識別;
2.幾類重要的HALCON分類器:
2.1 多層神經網絡(MLP)
2.2 支持向量機(SVM) : 一種監督學習的方法,廣泛用於統計分類及迴歸分析;
2.3 K-最鄰近 (K-NN)
2.4 高斯混合類型(GMM)
3.如何選擇適合的分類器、特徵和訓練樣本
3.1 選擇適合的分類器
MLP、GMM、SVM和K-NN這幾種分類器是很強大且靈活的。對於圖像分割,這四種分類器方法加上LUT(查表),能顯著提升處理速度。但LUT最多支持3通道的圖像。此外,LUT需要更高的內存需求且離線階段的處理(如訓練樣本)更慢(lead to slower offline phase)。
MLP分類器: 特別適合於需要快速分類但能接受離線訓練樣本慢 的應用;不支持缺陷檢測。
SVM分類器: 經過調整,能夠比其他分類器實現更高質量的分類,但相對的檢測速度要慢;
GMM分類器: 訓練和分類查找都很快,特別是當類的數量較少時;非常適合缺陷檢測,但只適合那些不需要高維度空間的應用;
K-NN分類器: 訓練非常快且無維度空間的限制,所以非常適合有多種結構的特徵和訓練數據;此外,要加入額外的訓練數據也非常快。缺點是比MLP要慢但是佔用內存卻更多,某些應用可能無法接受這個特點。。。
上圖:
圖片:
在這裏插入圖片描述
3.2 選擇合適的特徵
對一般的分類器,所有特徵,如region,顏色以及結構紋理,都能用來構建特徵向量。使用合適算子生成的特徵值來構建特徵向量。
對於圖像分割,多通道圖像和紋理圖像的像素值被當作特徵,由於有對應的影像分割算子,我們不需要明確提取出這些特徵,有算子完成了這個步驟。
對於OCR,一系列受限制的region被用來構建特徵向量,有特定的OCR算子會計算這些特徵,所以只需要選擇特徵的類型便可。
對於texture紋理對象,可以使用算子texture_laws獲得一個單通道的圖像;使用cmopose6處理一個6通道的texture圖像等;兩個texture處理後得到兩個單通道紋理圖像,然後使用histo_2dim合併成2通道圖像並獲取2通道圖像的直方圖(texture_laws.hdv);
halcon提供的選擇特徵的算子: select_feature_set_svm; select_feature_set_gmm; select_feature_set_mlp;
select_feature_set_knn;
3.3 選擇訓練樣本
選擇總體特徵,但要允許偏差;
對texture紋理圖像,樣本要覆蓋紋理圖像的噪聲引起的偏差;
對region,不能只識別理想化的值,要泛化;
一些技巧:
1.拷貝一些樣本,通過腐蝕、膨脹或輕微的選擇角度來修改,然後生成的人工樣本,可以覆蓋掉一些偏差;
2.對於樣本的類的數量分佈差別很大的,如質量檢測時,大部分是好的產品,這時可以把較少的壞的產品合併成一個特徵類,這時就是兩個class的特徵的對比了。
4.HALCON 分類器的基礎步驟:
4.1 提取樣本對象的向量特徵並存儲;
4.2 用存儲的多個樣本對象的向量特徵來訓練分類器;
4.3 通過訓練過的樣本特徵 來研究分類的對象;
4.4 使用訓練器識別出新的特徵屬於哪一類向量特徵;
5.例程
5.1 通過 MLP分類器 識別不同金屬部分;classify_metal_parts.hdev;
step1: Create classifier 創建分類器
create_class_mlp() 爲分類器創建多層感知器。
create_class_mlp( : : NumInput, NumHidden, NumOutput, OutputFunction,Preprocessing, NumComponents,
RandSeed : MLPHandle)
參數:
NumInput: 提取到的要輸入的特徵的數量;
NumOutput: 輸出的特徵類 的數量;一般來說, NumOutput 的值 與 NumComponents 的值 是相同的。
step2: Add training samples to the classifier 添加訓練樣本到分類器
add_sample_class_mlp() 添加訓練的樣本到多層感知器的訓練數據;
add_sample_class_mlp( : : MLPHandle, Features, Target : )
Features被存儲的訓練樣本的特徵向量, Target指定的類別或期望的返回向量
訓練的樣本通過 參數 Features 和Target提供,Feature的 數量與 Create_class_mlp_Target的 NumInput相同。
Target 是樣本的目標向量, 其向量長度一定要與 step1 所有三種激活函數(OutputFunction)的NumOutput相同。
Step3 : Train the classifier 訓練分類器
train_class_mlp()
train_class_mlp( : : MLPHandle, MaxIterations, WeightTolerance, ErrorTolerance :Error, ErrorLog)
MaxIterations : 最大迭代次數(迭代訓練多少次));
WeightTolerance: 權重;
step5: classify new objects
classify_class_mlp()
step6. Destroy the classifyer
clear_class_mlp()
————————————————
原文鏈接:https://blog.csdn.net/u010096608/article/details/80350692