不用递归的方法计算米粒的个数和每个米粒的面积,matlab实现

% 利用系统自带的米粒图片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));
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值