【Halcon學(xué)習(xí)筆記】13.圖像分類
1.概述
? ? ? ? 分類就是將一個目標對象根據(jù)某種特征劃到某個提前準備好的類別中去。這些特征可能是像素的顏色、紋理或者是區(qū)域的大小、形狀。為了定義類別,特征必須通過已知對象被指定并訓(xùn)練,在訓(xùn)練之后,分類器將對象的特征與有關(guān)類別的特征做比較,并返回最大匹配的類別。根據(jù)所選的分類器,類別的可能性或者分類的可行度等可能額外的信息將被給出。
1.1 分類器意義
????????分類器的作用是將目標對象指定給多個類別中的一個。例如,有一張圖片中包含了幾個形狀相似的物體,并且已將每個物體區(qū)域分割出來了,需要判斷是否屬于同一類別,此時就可以適用分類器。注:OCR(optical character recognition)光學(xué)文字識別就是分類器的一個特殊應(yīng)用。
????????一般來說,可以用兩種方法對圖像進行分類:一是基于數(shù)據(jù)特征分類,如圓度、面積;一是基于像素特征分類,如紋理、顏色。
1.2 常見分類器
????????Halcon提供了不同的分類器,其中比較常用的分類器有:MLP分類器、SVM分類器、SMM分類器、k-NN分類器。

2. 相關(guān)算子(MLP分類器為例)
2.1 創(chuàng)建
1)create_class_mlp()????????//創(chuàng)建MLP分類器
? ? ? ? NumInput:用于分類和訓(xùn)練的特征空間的維度數(shù)量
? ? ? ? NumHidden:神經(jīng)網(wǎng)絡(luò)中隱藏層的單元數(shù)(10)
? ? ? ? NumOutput:輸出的分類數(shù)量
? ? ? ? OutputFunction:神經(jīng)網(wǎng)絡(luò)的輸出單元使用的函數(shù)('softmax')
? ? ? ? Preprocessing:在訓(xùn)練和分類之前對特征向量使用的預(yù)處理方式('normalization')? ? ????????NumComponents:預(yù)處理后減少的特征向量的維度數(shù)量
? ? ? ? RandSeed :隨機種子數(shù)(42)
? ? ? ? MLPHandle:MLP分類器句柄
2.2 添加
1)add_sample_class_mlp()????????//將單個樣本添加到MLP分類器中
????????MLPHandle:MLP分類器句柄
????????Features:樣本的特征向量(必須是real類型)
????????Target:輸出的目標向量
2)add_samples_image_class_mlp()????????//將多通道圖像訓(xùn)練樣本添加到MLP分類器中
????????Image:待訓(xùn)練的圖像
????????ClassRegions:待訓(xùn)練的圖像區(qū)域
????????MLPHandle:MLP分類器句柄
2.3 訓(xùn)練
1)train_class_mlp()????????//訓(xùn)練MLP分類器
? ?
????????MLPHandle:MLP分類器句柄
? ?
????????MaxIterations:優(yōu)化算法的最大迭代次數(shù)(200)
? ?
????????WeightTolerance:優(yōu)化算法的兩次迭代之間的權(quán)重差異閾值(1.0)? ?
????????ErrorTolerance:優(yōu)化算法的兩次迭代之間的誤差均值的閾值(0.01)
? ?
????????Error:MLP在最佳權(quán)重下的訓(xùn)練數(shù)據(jù)的平均誤差
? ?
????????ErrorLog:將MLP的訓(xùn)練數(shù)據(jù)的平均誤差作為迭代次數(shù)返回
2.4 識別
1)classify_class_mlp()????????//對特征向量進行分類
????????MLPHandle:MLP分類器句柄
????????Features:輸入的待評估的特征向量
????????Num:想要尋找的最佳分類的數(shù)量
????????Class:輸出所尋找的類別ID
????????Confidence:輸出尋找出的類別的自信度
2)classify_image_class_mlp()????????//對多通道圖片進行像素分類
????????Image:輸入的圖像
????????ClassRegions:輸出的檢測結(jié)果區(qū)域
????????MLPHandle:MLP分類器句柄
????????RejectionThreshold:拋棄種類的閾值
2.5 釋放
1)clear_class_mlp ()????????//釋放MLP分類器
????????MLPHandle:MLP分類器句柄
3.?圖像分類在Halcon中的應(yīng)用步驟
????????圖像分類可分為基于數(shù)據(jù)特征分類和基于像素特征兩種分類方式,但在應(yīng)用時其大致思路是一致的。

3.1 基于數(shù)據(jù)特征的分類器應(yīng)用(以circularity和roundness作為特征向量分類)
1)創(chuàng)建分類器
? ? create_class_mlp (2, 10, 3, 'softmax', 'normalization', 3, 42, MLPHandle)
2)提取樣本圖像中的特征向量
????select_obj (Objects, Region, J)
????circularity (Region, Circularity)
????roundness (Region, Distance, Sigma, Roundness, Sides)
????Features := [Circularity,Roundness]? //數(shù)據(jù)特征向量
3)將樣本添加到分類器中??
? ? class:=[0,0,1,1,2,2]? //分為3類
????add_sample_class_mlp (MLPHandle, Features, class[Index])
4)利用樣本數(shù)據(jù)訓(xùn)練分類器
? ? train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
5)對目標執(zhí)行分類檢測
????select_obj (Objects, Region, J)
????area_center (Region, Area, Row, Column)
????circularity (Region, Circularity)
????roundness (Region, Distance, Sigma, Roundness, Sides)
????Features := [Circularity,Roundness]
????classify_class_mlp (MLPHandle, Features, 1, outClass, Confidence)
6)釋放分類器
????clear_class_mlp (MLPHandle)


3.2 基于像素特征的分類器應(yīng)用
1)創(chuàng)建分類器
? ? create_class_mlp (3, 10, 4, 'softmax', 'normalization', 3, 42, MLPHandle)
2)提取樣本圖像中的區(qū)域像素
????read_image (Image, ‘Training’)
????gen_empty_obj (Classes)
????gen_rectangle1 (Yellow, 195.98, 198.538, 231.86, 216.952)
????gen_rectangle1 (Pink, 197.54, 287.166, 230.82, 306.138)
????gen_rectangle1 (Blue, 197.8, 383.142, 232.38, 398.766)
????gen_rectangle1 (Orange, 20.1, 192.802, 110.58, 386.638)
????concat_obj (Yellow, Pink, Classes)
????concat_obj (Classes, Blue, Classes)
????concat_obj (Classes, Orange, Classes)
3)將樣本添加到分類器中??
????add_samples_image_class_mlp (Image, Classes, MLPHandle)
4)利用樣本數(shù)據(jù)訓(xùn)練分類器? ? ? ??
????train_class_mlp (MLPHandle, 200, 1, 0.01, Error, ErrorLog)
5)對目標執(zhí)行分類檢測
? ? read_image?(Image, ‘Detect’)
????classify_image_class_mlp (Image, ClassRegions, MLPHandle, 0.01)
6)釋放分類器
????clear_class_mlp (MLPHandle)



by Ryou2-