資源簡介
對圖像中的不同水果,分別從顏色,形狀等方面進行識別和分類。
代碼片段和文件信息
%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
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2012-09-06?12:56??水果分類代碼\
?????文件?????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??2012-09-11?09:53??水果分類代碼\combinework2.m
?????文件??????149493??2010-12-03?09:42??水果分類代碼\水果分類實驗圖像.jpg
- 上一篇:局部二值模式進行編碼的人臉識別
- 下一篇:多類分類 目標檢測
評論
共有 條評論