• 大小: 26KB
    文件类型: .zip
    金币: 2
    下载: 1 次
    发布日期: 2021-05-10
  • 语言: Matlab
  • 标签: matlab  rice  

资源简介

内部有两个文件,.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

评论

共有 条评论