图像处理-统计米粒

练习:对一幅图片进行操作,消除亮度不一的背景,并使用阈值分割将修改后的图像转换为二值图像,使用成员标记返回图像中目标对象的个数以及统计特性。
原图像为:
图像处理-统计米粒_第1张图片

程序如下所示:

clear;
close all;
i=imread('rice.jpg');
subplot(221);
imshow(i);
stru=strel('disk',16);%创建一个半径为16像素的圆盘形结构
back=imopen(i,stru);%开操作
i2=imsubtract(i,back);%将back从原始图像中减去,得到背景一致的图像
subplot(222);
imshow(i2);
threshold=graythresh(i2);%得到图像的全局阈值
bw=im2bw(i2,threshold);%将灰度图像转换为二值图像
subplot(223);
imshow(bw);
[labeled number_object]=bwlabel(bw,8);%bwlabel识别二值图像中所有的相关成分
number_object=80;
graindata=regionprops(labeled,'basic');%regionprops获取图像中目标对象属性,并将属性保存到一个结构体数组中
allgrain=[graindata.Area];
max(allgrain)     %最大米粒的大小。
mean(allgrain)    %米粒的平均大小。

运行结果:

图像处理-统计米粒_第2张图片

图像处理-统计米粒_第3张图片

若不使用数学形态学滤波 ,直接取阈值二值化,会造成米粒大小不完整,统计结果不准确。
图像处理-统计米粒_第4张图片

ans =

735

ans =

235.2716

你可能感兴趣的:(图像处理MATLAB)