當前位置:成語大全網 - 書法字典 - 如何訓練圖像分類器的matlab代碼

如何訓練圖像分類器的matlab代碼

對圖像做分類器訓練,需要建立壹個視覺單詞包對圖像進行分類。該過程生成直方圖來表示圖像的視覺單詞,並通過這些直方圖來訓練圖像分類器。以下步驟描述了如何構建圖像集、構建可視單詞包以及訓練和使用圖像分類器。

步驟1:建立圖像類別集。

圖像分為訓練子集和測試子集。imageDatastore函數用於存儲訓練分類器的圖像。SplitEachLabel函數可用於將圖像分割成訓練數據和測試數據。

讀取類別圖像並創建圖像子集

setDir = full file(toolbox dir(' vision '),' visiondata ',' imageSets ');

imds = imageDatastore(setDir,' IncludeSubfolders ',true,' LabelSource ',' foldernames ');

劃分圖集成了訓練和測試子集。在下面的例子中,30%用作訓練數據,其余的用作測試數據。

[trainingSet,testSet] = splitEachLabel(imds,0.3,' randomize ');

第二步:建立特征詞袋。

通過從每個類別的代表性圖像中提取特征描述符,創建視覺詞匯或特征包。

通過對從訓練集中提取的特征描述符使用k-means聚類算法,bagOfFeatures對象定義了特征和視覺詞匯。該算法叠代地將描述符分成k個互斥的簇。所得到的集群是緊湊的,並且具有相似的特征。每個聚類中心代表壹個特征或壹個視覺單詞。您可以基於特征檢測器提取特征,也可以定義壹個網格來提取特征描述符。網格方法可能會丟失詳細信息。因此,網格用於不包含明顯特征的圖像,例如海灘等風景的圖像。使用加速魯棒特征(或SURF)檢測器來提供更大的比例不變性。默認情況下,算法運行網格方法。

該算法的工作流程是將圖像作為壹個整體進行分析。圖像必須有適當的標簽來描述它們所代表的類別。例如,壹組汽車圖像可以被標記為汽車。工作流不依賴於空間信息,也不依賴於標記圖像中的特定對象。視覺單詞包技術依賴於非本地化檢測技術。

第三步:通過視覺單詞包訓練圖像分類器。

函數的作用是:返回壹個圖像分類器。該方法使用基於二分類支持向量機(SVM)的糾錯輸出碼(ECOC)框架來訓練多分類器。

此方法使用bagOfFeatures對象返回的視覺單詞包將圖像集中的圖像編碼到視覺單詞直方圖中。然後將視覺詞的直方圖作為訓練分類器的正負樣本。

1,訓練集中的每幅圖像都采用bagOfFeature的編碼方法進行編碼。該函數檢測並提取圖像中的特征,然後利用最近鄰算法構造每幅圖像的特征直方圖。函數將描述符逼近聚類中心,以增加直方圖中每個柱的值。直方圖的長度取決於bagOfFeatures對象構造的視覺詞的數量。最後,將直方圖作為圖像的特征向量。

2.對訓練集中的每個圖像重復步驟1,以建立訓練數據。

3.評估分類器。使用imagecategoryclassifier的evaluate方法在測試圖像集上測試分類器。輸出混淆矩陣可以分析預測結果。理想的分類結果是對角線上有壹個標準矩陣。不正確的分類導致小數值。

步驟4:對圖像或圖像集進行分類。

最後,使用圖像分類器的預定義方法對新圖像進行分類,以確定其類型。