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

本文介绍了如何使用MATLAB不通过递归方式来计算一定区域内的米粒数量以及每个米粒的面积。通过定义计算域、输入参数和特定算法,实现了对disk形状米粒的精确分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

% 利用系统自带的米粒图片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));
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值