圖像表示與描述


一、實驗目的:利用灰度共生矩陣的二次統計量特征和最近鄰法對紋理圖像進行分類

二、實驗內容:8類紋理圖像利用灰度共生矩陣的二次統計量特征和最近鄰法進行分類,其中每類紋理圖像有8幅,總共64幅,每幅圖像的大小為200x200。實驗中將各類紋理圖像樣本按數量隨機等分成兩部分作為訓練、測試樣本集,按照這種方式運行10 次對結果求平均平均分類正確率。觀察不同的灰度共生矩陣對分類正確率的影響。用到的matlab函數為strcatrandpermint2strgraycomatrixgraycoprops

 

四、實驗方法

 

(1)計算訓練樣本集中每幅圖像的共生矩陣; 

 

(2)根據訓練樣本集中每幅圖像的共生矩陣計算對比度、相關性、能量、均勻度和熵的值,把這些值形成一個特征向量xii=1,2, …,NN是訓練樣本個數; 

 

(3)對於測試圖像計算其共生矩陣; 

 

(4)根據測試圖像的共生矩陣計算對比度、相關性、能量、均勻度和熵的值,把這些值形成一個特征向量x 

 

(5)采用最近鄰法對測試圖像進行分類; 

 

(6)輸出分類結果。 

 

實驗圖片說明:實驗圖片名稱的第一個數字表示類別,第二個數字表示該類的第幾幅圖像

 

六、實驗報告要求:

 

1)寫出實現本次實驗內容的程序

 

2)對程序作出注釋

 

3)寫出實驗中灰度共生矩陣的量化級數,d的取值,方向的取值及所得到的紋理圖像的識別率

 

 1 clc,clear,close all;
 2 percent=[];%正確率數組
 3 for n=1:10
 4 train=[];test=[];
 5 index=0;%測試集下標
 6 for i=1:8
 7     P=randperm(8);%隨機序列
 8     for j=1:4
 9         train{i,j}=strcat(int2str(i),int2str(P(j)),'.jpg');%隨機訓練集
10     end   
11     for j=5:8
12         index=index+1;
13         test{index}=strcat(int2str(i),int2str(P(j)),'.jpg');  %隨機測試集     
14     end
15 end
16 [M,N]=size(train);%訓練集大小
17 X=[];
18 for i=1:M
19     for j=1:N
20         name=char(train(i,j));
21         img_train=imread(name);%讀取訓練集圖片
22         glcm=graycomatrix(img_train,'Offset',[-1 -1],'NumLevels',4);%計算灰度共生矩陣,135度方向,d=1,量化級數4
23         stats = graycoprops(glcm, 'all');%計算對比度、相關、能量、均勻度
24         out= entropy(img_train); %計算出整幅圖的熵
25         X(i,j,:)=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%訓練集特征向量
26     end
27 end
28 truenum=0;
29 for i=1:index
30     x=[];
31     name=char(test(i));
32     img_test=imread(name);%讀取測試集圖片
33     glcm=graycomatrix(img_test,'Offset',[-1 -1],'NumLevels',4);%計算灰度共生矩陣,135度方向,d=1,量化級數4
34     stats = graycoprops(glcm, 'all');%計算對比度、相關、能量、均勻度
35     out= entropy(img_train); %計算出整幅圖的熵
36     x=[stats.Contrast,stats.Correlation,stats.Energy,stats.Homogeneity,out];%測試集特征向量
37     gix=[];
38     for j=1:M
39         odist=[];%第j類的歐式距離數組
40         for k=1:N
41             a=X(j,k,:);
42             a=a(:)';%訓練集特征向量
43             odist(k)=norm(a-x);%求歐氏距離
44         end
45         gix(j)=min(odist);%第j類中最小歐氏距離
46     end
47     [gjx,mindex]=min(gix);%最小歐氏距離及其類別
48     fprintf('%s屬於第%d類    ',name,mindex);
49     if mod(i,4)==0
50         fprintf('\n');%每四個換一次行
51     end
52     num=str2num(name(1));%正確的類別
53     if num==mindex
54         truenum=truenum+1;%求分類正確的數量
55     end
56 end
57 percent(n)=truenum/32;%求分類正確率
58 fprintf('正確率為:%f\n',percent(n));
59 end
60 fprintf('10次平均正確率為:%f\n',mean(percent));%求平均分類正確率

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM