資源簡介
內部有兩個文件,.m文件為matlab代碼,可以計算rice圖片中的rice個數,直接可以運行。

代碼片段和文件信息
%?首先進行邊緣檢測,然后進行填充。
%?然后進行開運算,可以使一些輕微連著的米粒分開來。
%?然后是遍歷圖片,把各米粒進行標號,從1開始從小到大標號。
%?每個米粒的各像素點值相同,第i個米粒的各像素點值均為i。
%?其中采用了隊列,用數組模擬。最大的米粒標號便是米粒的總個數。
%?最后,遍歷一遍圖像數組,便可求出各米粒的面積。
%?
clear;??
close?all;??
??
I=imread(‘rice.jpg‘);??
imshow(I);?
title(‘原圖‘);
I=rgb2gray(I);
J=edge(I‘canny‘);??
%figureimshow(J);??
K=imfill(J‘holes‘);
figureimshow(K);??title(‘填充后結果‘);
SE=strel(‘disk‘3);%用于膨脹腐蝕及開閉運算等操作的結構元素對象??
%對圖像實現開運算,開運算一般能平滑圖像的輪廓,消弱狹窄的部分,去掉細的突出。??
L=imopen(KSE);??
figureimshow(L);??title(‘開運算后結果‘);
??
M=bwlabel(L4);%8聯通域標記??
figureimshow(M[]);??title(‘識別的米粒‘);
??
%矩陣M的大小??
[mn]=size(M);??
num=0;%米粒的個數??
??
for?i=1:m??
????for?j=1:n??
????????if?M(ij)>num%最大的label值即聯通域的個數??
????????????num=M(ij);??
????????end??
????end??
end??
area=zeros(1num);%記錄各個米粒的大小??
for?i=1:m??
????for?j=1:n??
????????if?M(ij)>0%不是背景,在聯通域里面??
????????????area(1M(ij))=area(1M(ij))+1;%對應的米粒大小加一??
????????end??
????end??
end??
disp(‘米粒個數:‘);??
disp(num);??
disp(‘各個米粒的大小‘);??
area??
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2018-06-26?22:10??rice\
?????文件???????25164??2018-06-21?15:49??rice\rice.jpg
?????文件????????1311??2018-06-25?21:28??rice\rice.m
- 上一篇:單像后方交會matlab代碼
- 下一篇:點云三角剖分matlab代碼
評論
共有 條評論