% 利用系统自带的米粒图片rice.png, 对该图片进行预处理后,计算该点中每个米粒的面积和所有米粒的个数,中间用到了求一个点所在的连通域的算法
clear all
clc
close all
I = imread('rice.png');
edI = edge(I, 'canny');
fhI = imfill(edI, 'hole');
se = strel('disk', 4);
opI = imopen(fhI, se);
% opI = ones(100,100);
% opI = im2bw(opI);
figure,imshow(opI);
[row col] = size(opI);
count = 0;
ricearr = zeros(row*col,1);
visited = zeros(size(opI));
% 调用计算连通域函数进行数米粒和计算米粒的面积
for i = 1:row
for j = 1:col
if opI(i,j)&&visited(i,j) == 0
count = count +1;
pt = [i; j];
[c ,domain] = finddomain(opI, pt);
ricearr(count) = c;
for m = 1:c
visited(domain(1,m), domain(2, m)) = 1;
end
end
end
end
disp('米粒的个数为');
disp(count);
disp('每个米粒的面积为');
disp(ricearr(1:count));