练习:对一幅图片进行操作,消除亮度不一的背景,并使用阈值分割将修改后的图像转换为二值图像,使用成员标记返回图像中目标对象的个数以及统计特性。
原图像为:
程序如下所示:
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) %米粒的平均大小。
运行结果:
若不使用数学形态学滤波 ,直接取阈值二值化,会造成米粒大小不完整,统计结果不准确。
ans =
735
ans =
235.2716