當前位置:編程學習大全網 - 源碼下載 - 如何對圖像做分類器訓練matlab代碼

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

對圖像做分類器訓練要建立視覺詞袋來進行圖像分類。該過程生成用來表示圖像視覺詞的直方圖,通過這些直方圖來訓練圖像分類器。下面的步驟描述如何建立圖像集,建立視覺詞袋,以及訓練和運用圖像分類器。

第壹步:建立圖像類別集合

將圖像分割成訓練子集和測試子集。利用imageDatastore函數來存儲訓練分類器的圖像。可以利用splitEachLabel函數將圖像分割成訓練數據和測試數據。

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

setDir = fullfile(toolboxdir('vision'),'visiondata','imageSets');

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

分割圖集成訓練和測試子集。下例中,30%作為訓練數據,余下的作為測試數據。

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

第二步:建立特征詞袋

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

通過在訓練集合中提取出的特征描述符上利用k-means聚類算法,bagOfFeatures對象定義特征,視覺詞匯。該算法叠代地將描述符分成k個互斥簇。由此產生的簇是緊密的,並具有相似的特性。每個集群中心代表壹個特征,或壹個可視詞。可以基於特征檢測器提取特征,也可以定義壹個網格來提取特征描述符。網格方法可能丟失細節信息。因此,對不包含明顯特征的圖像使用網格,例如海灘等景物的圖像。使用Speed up robust features(或SURF)檢測器提供更大的尺度不變性。默認情況下,該算法運行“網格”方法。

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

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

trainImageCategoryClassifier函數返回壹個圖像分類器。該方法使用基於2分類支持向量機(SVM)的error-correcting output codes(ECOC)框架來訓練壹個多分類器。

該方法利用bagOfFeatures對象返回的視覺詞袋將圖像集中的圖像編碼成視覺詞直方圖。然後將視覺詞直方圖作為訓練分類器的正負樣本。

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

2、對訓練集中的每幅圖像重復步驟1,建立訓練數據

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

第四步:對圖像或圖像集進行分類

最後使用imageCategoryClassifier 的predeict方法對新圖像進行分類來確定其類型。

  • 上一篇:java中什麽是代碼重構,什麽時候需要代碼重構
  • 下一篇:請求各位js高手幫我解密這段代碼,十分感謝~~
  • copyright 2024編程學習大全網