資源簡介
該代碼用于圖像分類,分割識別。其中包括特征提取。圖像處理,把一幅圖片中不同類型的水果進行自動分類,識別

代碼片段和文件信息
%1讀取原圖,并處理成二值圖像
I=imread(‘水果分類實驗圖像.jpg‘);
I2=rgb2gray(I);
BW=im2bw(I20.9);
total=bwarea(~BW)
figuresubplot(131)imshow(I)title(‘原始圖像‘);
subplot(132)imshow(I2)title(‘灰度圖像‘);
subplot(133)imshow(BW)title(‘二值圖像‘);
%2進行邊緣檢測?得到了不連續的圖形邊界(采用sobel算子或區域增長)
%3得到各個圖形的連續邊界
SE=strel(‘rectangle‘[40?30]);??%?結構定義
J2=imopen(BWSE);????????????%?開啟運算
figureimshow(J2)title(‘對二值圖像進行開運算后的結果圖像‘);
SE=strel(‘square‘5);?%?定義3×3腐蝕結構元素
J=imerode(~J2SE);
BW2=(~J2)-J;????????%?檢測邊緣
figureimshow(BW2)title(‘3*3腐蝕運算后的圖像邊界輪廓‘);
%填充了已有的檢測的連續形狀邊界
B?=?imfill(BW2‘holes‘);
B?=?bwmorph(B‘remove‘);
figureimshow(B)title(‘提取出的邊界圖像‘);
%3-2將不同的圖形進行分別標記,num表示連接的圖形對象的個數
[Labelnum]?=?bwlabel(B8);
%得到各個圖像的邊界像素的數組
%4計算各個圖形單元的周長???用連接像素點或數邊界像素點個數的方法???numPoints數組表示各個圖形邊界的像素個數(即用個數來表示周長)
?%num?=?max(max(Label));
????for?i?=?1?:?num
????????Premeter(i)?=?0;
????end
????[rowcol]?=?size(Label);
????for?i?=?1?:?row
????????for?j?=?1?:?col
????????????if(Label(ij)?>?0)
????????????????Premeter(Label(ij))?=?Premeter(Label(ij))?+?1;????%計算標記后的各塊圖形邊界中像素的個數的總數
????????????end
????????end
????end
%5計算各個圖形單元的面積
FilledLabel?=?imfill(Label‘holes‘);??%填充打過標記的邊界線中間圍成的圖形區域
figureimshow(FilledLabel)title(‘打過標記后并已被填充的結果圖像‘);
for?i?=?1?:?num
????Area(i)?=?0;
end
[rowcol]?=?size(FilledLabel);
for?i?=?1?:?row
????for?j?=?1?:?col
????????if(FilledLabel(ij)?>?0)
????????????Area(FilledLabel(ij))?=?Area(FilledLabel(ij))?+?1;???%通過統計像素點個數的方式來求各形狀的面積
????????end
????end
end
%6計算各個圖形單元的圓度
for?i?=?1?:?num?????
????Ecllipseratio(i)?=?4*pi*Area(i)/Premeter(i)^2;
end
%7計算各個圖像的顏色(色度)
HSV?=?rgb2hsv(I);???%轉換為HSV,為后面的顏色元素的提取做準備
[rowcol]?=?size(FilledLabel);???%統計填充后的圖形中各塊圖形所含像素的個數的多少
MeanHue?=?zeros(1num);
????for?i?=?1?:?num
????????Hue?=?zeros(Area(i)1);
????????nPoint?=?0;
????????for?j?=?1?:?row
????????????for?k?=?1?:?col
????????????????if(FilledLabel(jk)?==?i)
????????????????????nPoint?=?nPoint?+?1;
????????????????????Hue(nPoint1)?=?HSV(jk1);
????????????????end
????????????end
????????end
????????
????????Hue(:i)?=?sort(Hue(:1));
????????for?j?=?floor(nPoint*0.1)?:?floor(nPoint*0.9)
????????????MeanHue(i)?=?MeanHue(i)?+?Hue(j1);
????????end
????????MeanHue(i)?=?MeanHue(i)?/?(0.8*nPoint);??%計算出平均的色度值
????end
%8識別桃
%8-1構建桃的分類器,在二維特征空間對各個圖像進行類別區分
pitch=0;
for?i=1:num
????if(MeanHue(i)>0.5)????%分類器識別桃的準則:判斷各個圖形中平均色度值大于0.5的為桃
????????pitch=i;
????end
end
%8-2對分出來的類別分別構建相應的圖像掩膜,并用對原圖的亮度圖像進行掩膜操作
pitchHSV=HSV;
[rowcol]?=?size(FilledLabel);???%統計填充后的圖形中各塊圖形所含像素的個數的多少
%MeanHue?=?zeros(1num);
????????for?j?=?1?:?row
????????????for?k?=?1?:?col
????????????????if(FilledLabel(jk)?~=pitch)
???????????????????????%pitchHSV(jk2)=0;
???????????????????????pitchHSV(jk3)=0;
????????????????end
????????????end
????????end
%8-3變換生成最終的結果圖像,圖像中顯示的結果即對應分類器中指定的類別
pitchmatrix?=?hsv2rgb(pitchHSV);???%轉換為RGB彩圖,彩圖中已經濾去了其余水果,只剩下桃
figureimshow(pitchmat
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????1344919??2010-12-03?09:42??水果分類代碼\1.fig
?????文件?????574332??2010-12-03?09:42??水果分類代碼\10.fig
?????文件??????15960??2010-12-03?09:42??水果分類代碼\2.fig
?????文件??????16828??2010-12-03?09:42??水果分類代碼\3.fig
?????文件??????16391??2010-12-03?09:42??水果分類代碼\4.fig
?????文件??????16502??2010-12-03?09:42??水果分類代碼\5.fig
?????文件?????460856??2010-12-03?09:42??水果分類代碼\6.fig
?????文件?????852254??2010-12-03?09:42??水果分類代碼\7.fig
?????文件?????659433??2010-12-03?09:42??水果分類代碼\8.fig
?????文件?????546823??2010-12-03?09:42??水果分類代碼\9.fig
?????文件???????6787??2010-12-03?09:42??水果分類代碼\combinework2.m
?????文件?????149493??2010-12-03?09:42??水果分類代碼\水果分類實驗圖像.jpg
?????目錄??????????0??2010-12-03?09:42??水果分類代碼
-----------?---------??----------?-----??----
??????????????4660578????????????????????13
- 上一篇:電梯模擬c實現
- 下一篇:東北大學軟件工程歷年真題
評論
共有 條評論