一、简介
模型参考这里。
二、源代码
clear;
close all;
%------------------
%程序中定义图像变量说明
%Image->原图变量;
%Image_BW->二值化图象;
%Image_BW_medfilt->中值滤波后的二值化图像;
%Optimized_Image_BW-〉通过“初次二值化图像”与“中值滤波后的二值化图像”进行“或”运算优化图像效果;
%Reverse_Image_BW-〉优化后二值化图象取反;
%Filled_Image_BW-〉已填充背景色的二进制图像;
%Open_Image_BW-〉开运算后的图像。
%------------------
%--------------------------------------
%-------图片前期处理-------------------
%--------------------------------------
%第一步:读取原图,并显示
a= imread('b1.bmp');
subplot(331)
入[r,c]
rc = [r c];
Num = length(rc);%取得vc数组的元素的个数
Sum([i])=Num;%将元素个数存入Sum数组
end
Sum
N = 0;
%假如Sum数组中的元素大于了1500,表示有两个细胞相连,像素点较多,即分为两个细胞数
ss=0;
for i=1:length(Sum)
ss=ss+Sum([i]);
end
dd=ss/length(Sum);
dd
for
subplot(1,3,1),imshow(copywhite,[ ]),title('H分量K均值聚类结果');
A=copywhite;
[m,n]=size(A); % 把聚类后图像二值化
for i=1:m
for j=1:n
if A(i,j)==cenwhite(2)
A(i,j)=1;
else A(i,j)=0;
end
end
G=imdilate(C1,ones(9));
subplot(2,2,4),imshow(G,[ ]),title('红细胞去噪结果');
% 方法一:通过判断面积大小计算红细胞个数
[J,num]=bwlabel(G,8); % 8连通运算,保存区域个数num
figure,subplot(1,2,1),imshow(J,[ ]),title('红细胞8连通结果');
sum=0; % 定义sum为总面积变量
numred1=0; % 定义numred1为红细胞个数变量
for i=1:num
[J1,J2]=find(J==i); % 找出J中值为i的像素坐标分别存入J1,J2中
area(i)=length(J1); % area(i)为第i个红细胞的面积
sum=sum+area(i); % 面积累加
end
ave=sum/num; % 求红细胞的平均面积ave
for i=1:num % 通过面积比较,判断个数的增加值
if 0.5*ave<area(i) && area(i)<=1.5*ave
numred1=numred1+1; % 如果细胞区域的面积在0.5~1.5倍之间,视为一个细胞
end
if 1.5*ave<area(i) && area(i)<=2.5*ave
numred1=numred1+2; % 如果细胞区域的面积在1.5~2.5倍之间,视为两个细胞
end
if 2.5*ave<area(i) && area(i)<=3.5*ave
numred1=numred1+3; % 如果细胞区域的面积在2.5~3.5倍之间,视为三个细胞
end
三、运行结果
四、参考文献
[1]方红萍, 方康玲, 刘新海. 自适应H-minima的改进分水岭堆叠细胞分割方法[J]. 计算机应用研究, 2016(5):1587-1590.
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。
部分理论引用网络文献,若有侵权联系博主删除。