灰度图像的分割和计数是数字图像处理中常遇到的一个问题,MATLAB 2018b中提供了一个Correct Nonuniform llumination and Analyze Foreground Objects实例,其主要通过数学形态学进行大米图像背景估计,并利用图像减法和对比度拉伸后再对图像进行二值化处理,最后再进行技术。该方法步骤较为复杂,下面提出一种大米图像分割计数的一种简便方法。
该方法的主要步骤:读入MATLAB自带rice.png图像,然后使用imbinarize对其进行二值化,发现使用局部自适应阈值处理效果好,然后使用数学形态学命令去除噪声,对去噪后图像进行图像标记和计数,最后对原始灰度图像rice.png的主要图像处理过程进行显示。
详细代码如下:
%大米计数的一种新方法
%大米图像分割和计数的一种新方法
clear all;
close all;
clc;
I=imread('rice.png');
imshow(I);
bw=imbinarize(I);%通过OSTU方法进行图像二值化
figure,imshow(bw);
bw2=imbinarize(I,'adaptive');%使用局部自适应阈值对图像进行二值化
figure,imshow(bw2);
obj=bwareaopen(bw2,20);%去除噪声消除面积小于20像素的区域
figure,imshow(obj);
[L Num]=bwlabel(obj);
disp('大米个数为')
Num %大米总数为95个
obj2=imclearborder(obj);% 清除与边界连通的大米
figure,imshow(obj2);
[L2 Num2]=bwlabel(obj2);
disp('清除与边界连通的大米个数为')
Num2 %清除与边界连通的大米个数为69个
figure('Name','大米图像分割和计数的一种新方法','Numbertitle','off');
subplot(2,3,1),imshow(I),title('读入大米图像');
subplot(2,3,2),imshow(bw),title('使用OTSU方法进行图像二值化');
subplot(2,3,3),imshow(bw2),title('使用局部自适应阈值对图像进行二值化');
subplot(2,3,4),imshow(obj),title('去除噪声');
subplot(2,3,5),imshow(obj2),title('清除与边界连通的大米');
%%本程序在MATLAB 2018b检测通过,如果大家觉得该程序有所帮助,请关注、点赞
最后运行结果如下图所示:
原始图像: