halcon 學習筆記 一分類器

halcon 分類器

  1. 分類器使用範圍 :

    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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章