一、图像分割简介

理论知识参考:【基础教程】基于matlab图像处理图像分割【含Matlab源码 191期】

二、部分源代码

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)
imshow(a);
title('原图');
Image=rgb2gray(a);
%第二步:进行二值化
Theshold = graythresh(Image);%取得图象的全局域值
Image_BW = im2bw(Image,Theshold);%二值化图象
subplot(332)
imshow(Image_BW);
title('初次二值化图像');%第三步二值化图像进行
Image_BW_medfilt= medfilt2(Image_BW,[13 13]);
subplot(333)
imshow(Image_BW_medfilt);
title('中值滤波后的二值化图像');%第四步:通过“初次二值化图像”与“中值滤波后的二值化图像”进行“或”运算优化图像效果
Optimized_Image_BW = Image_BW_medfilt|Image_BW;
subplot(334)
imshow(Optimized_Image_BW);
title('进行“或”运算优化图像效果');
%第五步:优化后二值化图象取反,保证:‘1’-〉‘白色’,‘0’-〉‘黑色’
%方便下面的操作
Reverse_Image_BW = ~Optimized_Image_BW;
subplot(335)
imshow(Reverse_Image_BW);
title('优化后二值化图象取反');%第六步:填充二进制图像的背景色,去掉细胞内的黑色空隙Filled_Image_BW = bwfill(Reverse_Image_BW,'holes');
subplot(336)
imshow(Filled_Image_BW);
title('已填充背景色的二进制图像');
%第七步:对图像进行开运算,去掉细胞与细胞之间相粘连的部分
SE = strel('disk',10);
BW = imopen(Filled_Image_BW,SE);
subplot(337)
imshow(BW);
title('开运算后的图像');subplot(338),imhist(Image);%-----------------------------------------------%-------------开始计算细胞数--------------------%-----------------------------------------------[Label Number]=bwlabel(BW,8)%初步取得细胞个数
Array = bwlabel(BW,8);%取得贴标签处理后的图像
Sum = [];
%依次统计贴标签后数组
for i=1:Number
[r,c] = find(Array==i);%获取相同标签号的位置,将位置信息存入[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 i=1:length(Sum)
if(Sum([i]))>dd
N = N+1;
end
if(Sum([i])) >(dd*2)
N = N+2;
end
function [cen,copy]=Kmeans(I,k)       % K均值聚类函数
mm=max(max(I));                   % mm为I的最大灰度值
copy=I;
cen=(1:k)*mm/k;                    % 求出首次中心值
cen1=zeros(1,k);
d=ones(1,k)./255;
[m,n]=size(I);
J=zeros(m,n);
while(1)for i=1:mfor j=1:nc=abs(I(i,j)-cen);          % c为I中元素与各中心点的差值数组cc=find(min(c)==c);       % cc为距中心值最近的元素下标J(i,j)=cc;endend% 求新的中心点for r=1:kh=0;[J1,J2]=find(J==r);p=length(J1);for s=1:ph=h+I(J1(s),J2(s));copy(J1(s),J2(s))=cen(r);    % 按中心值,把原图像灰度分为K类endcen1(r)=h/p;endif (abs(cen1-cen)<=d)break;else cen=cen1;end
endI=imread('b.bmp');       % 读入处理图像
R=I(:,:,1);                 % 分离R分量
G=I(:,:,2);
B=I(:,:,3);
clc;                      % 清屏
close all;                 % 关闭图像窗口
figure,                   % 开辟图像显示窗口
subplot(2,3,1),imshow(R),title('R分量');
subplot(2,3,2),imshow(G),title('G分量');
subplot(2,3,3),imshow(B),title('B分量');
K=rgb2hsv(I);            % RGB图像转换成HSV图像
H=K(:,:,1);
S=K(:,:,2);
V=K(:,:,3);
subplot(2,3,4),imshow(H),title('H分量');
subplot(2,3,5),imshow(S),title('S分量');
subplot(2,3,6),imshow(V),title('V分量');%****************************** 白细胞计数 ******************************
% 分割出只有白细胞的二值图像
[cenwhite,copywhite]=Kmeans(H,3);      % K均值聚类函数调用
cenwhite                     % 查看聚类后的中心值
figure,
subplot(1,3,1),imshow(copywhite,[ ]),title('H分量K均值聚类结果');
A=copywhite;
[m,n]=size(A);                % 把聚类后图像二值化
for i=1:mfor j=1:nif  A(i,j)==cenwhite(2)A(i,j)=1;else A(i,j)=0;endend
end
subplot(1,3,2),imshow(A,[ ]),title('白细胞二值化结果');
C1=imdilate(A,ones(5));        % 对二值化图像腐蚀膨胀处理达到去噪效果
C2=imerode(C1,ones(11));
C=imdilate(C2,ones(6));
subplot(1,3,3),imshow(C,[ ]),title('白细胞去噪结果');% 下面两种方法中任选一种作为白细胞计数输出:
% 方法一:用4连通分割图像计算白细胞个数
L4=bwlabel(C,4);          % 4连通运算
figure,subplot(1,2,1),imshow(L4,[ ]),title('法一:白细胞4连通结果');
Numwhite=max(max(L4));   % 计算4连通后图像中的最大值,即为白细胞个数
Numwhite                % Numwhite为4连通计数结果,显示结果% 方法二:用分水岭算法分割图像计算白细胞个数 %
E=bwdist(~C);
E=-E;
E(~C)=-Inf;
L0=watershed(E);
rgb=label2rgb(L0,'jet');
subplot(1,2,2),imshow(rgb,[ ]),title('法二:白细胞分水岭结果');
NumWhite=max(max(L0))-1;
NumWhite             % NumWhite为分水岭算法计数结果,显示结果%****************************** 红细胞计数 ******************************
% 分割出只有红细胞的二值图像,并对其做必需处理
I1(:,:,1)=double(I(:,:,1)).*C;        % 把二值图像还原为彩色图像
I1(:,:,2)=double(I(:,:,2)).*C;
I1(:,:,3)=double(I(:,:,3)).*C;
figure,subplot(1,2,1),imshow(uint8(I1)),title('白细胞');
J=double(I)-double(I1);           % 原图减去白细胞图得红细胞彩图
subplot(1,2,2),imshow(uint8(J)),title('红细胞');
J=rgb2hsv(J);                   % 红细胞图转换成HSV图
HH=J(:,:,1);
SS=J(:,:,2);                     % 提取S分量
VV=J(:,:,3);
figure,
subplot(1,3,1),imshow(HH),title('红细胞图H分量');
subplot(1,3,2),imshow(SS),title('红细胞图S分量');
subplot(1,3,3),imshow(VV),title('红细胞图V分量');
[cenred,copyred]=Kmeans(SS,2);  % 对S分量图均值聚类
cenred                        % 查看聚类后的中心值
figure,subplot(2,2,1),imshow(copyred,[ ]),title('S分量K均值聚类结果');
H=copyred;
[m,n]=size(H);                 % 把聚类后图像二值化
for i=1:mfor j=1:nif  H(i,j)==cenred(2)H(i,j)=1;else H(i,j)=0;endend
end
subplot(2,2,2),imshow(H,[ ]),title('红细胞二值化结果');
G=imfill(H,'holes');         % 红细胞图填充孔洞
subplot(2,2,3),imshow(G,[ ]),title('红细胞填洞结果');
C1=imerode(G,ones(9));     % 开运算去除噪声
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*avenumred1=numred1+1;    % 如果细胞区域的面积在0.5~1.5倍之间,视为一个细胞endif 1.5*ave<area(i) && area(i)<=2.5*avenumred1=numred1+2;    % 如果细胞区域的面积在1.5~2.5倍之间,视为两个细胞endif 2.5*ave<area(i) && area(i)<=3.5*avenumred1=numred1+3;    % 如果细胞区域的面积在2.5~3.5倍之间,视为三个细胞end

三、运行结果

四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 蔡利梅.MATLAB图像处理——理论、算法与实例分析[M].清华大学出版社,2020.
[2]杨丹,赵海滨,龙哲.MATLAB图像处理实例详解[M].清华大学出版社,2013.
[3]周品.MATLAB图像处理与图形用户界面设计[M].清华大学出版社,2013.
[4]刘成龙.精通MATLAB图像处理[M].清华大学出版社,2015.
[5]赵勇,方宗德,庞辉,王侃伟.基于量子粒子群优化算法的最小交叉熵多阈值图像分割[J].计算机应用研究. 2008,(04)

【细胞分割】基于matlab中值滤波+分水岭法细胞计数【含Matlab源码 640期】相关推荐

  1. 【细胞分割】中值滤波+分水岭法细胞计数【含Matlab源码 640期】

    ⛄一.图像分割简介 理论知识参考:[基础教程]基于matlab图像处理图像分割[含Matlab源码 191期] ⛄二.部分源代码 clear; close all; %---------------- ...

  2. 【Matlab语音处理】声音信号频谱分析仪【含GUI源码 325期】

    一.代码运行视频(哔哩哔哩) [Matlab语音处理]声音信号频谱分析仪[含GUI源码 325期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]韩纪庆,张磊, ...

  3. 【Matlab图像检索】综合特征图像检索【含GUI源码 395期】

    一.代码运行视频(哔哩哔哩) [Matlab图像检索]综合特征图像检索[含GUI源码 395期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  4. 【Matlab肌电信号】肌电信号处理【含GUI源码 966期】

    一.代码运行视频(哔哩哔哩) [Matlab肌电信号]肌电信号处理[含GUI源码 966期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余继周,杨 ...

  5. 【Matlab条形码识别】二维条形码识别【含GUI源码 607期】

    一.代码运行视频(哔哩哔哩) [Matlab条形码识别]二维条形码识别[含GUI源码 607期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 蔡利梅.MAT ...

  6. matlab中值滤波法算法,基于MATLAB中值滤波算法的优化与实现

    总第238期2014年第4期 舰 船 电 子 工 程 Ship Electronic Engineering Vol.34No.437 基于 MATLAB中值滤波算法的优化与实现* 赵建春 刘力源 ( ...

  7. 3 3中值滤波 matlab,MATLAB中值滤波在灰度图像处理中的应用研究和仿真(3)

    MATLAB中值滤波在灰度图像处理中的应用研究和仿真(3) 时间:2016-11-30 21:28来源:毕业论文 3.2 中值滤波的仿真 3.2.1 中值滤波仿真函数介绍 MATLAB能够支持多种图像 ...

  8. FPGA中值滤波实现并Modelsim仿真,与MATLAB中值滤波进行对比

    文章目录 一.中值滤波算法 二.FPGA实现中值滤波 2.1 3*3窗口的生成 2.2 排序模块 2.3中值滤波模块 2.4 整体RTL图 三.modeslim仿真 四.matlab中值滤波 五.效果 ...

  9. 【Matlab图像融合】小波变换遥感图像融合【含GUI源码 744期】

    一.代码运行视频(哔哩哔哩) [Matlab图像融合]小波变换遥感图像融合[含GUI源码 744期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1] 包子阳,余 ...

  10. 【Matlab生物电信号】生物电信号仿真【含GUI源码 684期】

    一.代码运行视频(哔哩哔哩) [Matlab生物电信号]生物电信号仿真[含GUI源码 684期] 二.matlab版本及参考文献 1 matlab版本 2014a 2 参考文献 [1]董兵,超于毅,李 ...

最新文章

  1. 微信小程序wx:for 的使用
  2. R语言ggplot2可视化:绘制堆叠的密度图(Stacked Area Chart)
  3. python三步实现人脸识别
  4. KVM虚拟机内无agent情况下的监控方法
  5. 全球及中国阻力损失注射器行业“十四五”发展战略规划分与未来需求预测报告2021-2027年版
  6. csol永恒python怎么升级_python|怎么升级python的pip
  7. IO之StringIO和BytesIO
  8. MySQL中视图和触发器学习
  9. 【Caffe代码解析】convert_imageset
  10. JavaScript网页cookie的“简单”设置
  11. 什么是华为认证?华为技术认证工程师可以做什么?
  12. python输入输出字符图形_【Python教程】图片转字符画
  13. 登录英雄联盟显示正在连接服务器,windows10系统登录英雄联盟出现连接不上服务器如何解决...
  14. 计算机word文档无法工作,教您电脑word打不开怎么办
  15. Linux之open虚拟专业网安装部署
  16. Aircrack-ng 工具箱
  17. SIM7600CE TCP AT指令
  18. 基于STM32的ESP8266模块控制多路继电器
  19. CAN总线接口静电保护及ESD二极管选型
  20. AD21调整PCB大小操作步骤!

热门文章

  1. noip2013day1模拟赛
  2. 【BZOJ-4556】字符串 后缀数组+二分+主席树 / 后缀自动机+线段树合并+二分
  3. html5 sessionStorage 与 localStorage存储
  4. struts2 select标签
  5. poj 2195(KM求最小权匹配)
  6. vmware给linux虚拟机添加新的分区
  7. Linux 高性能集群搭建(1)---ssh节点通信
  8. 190104每日一句
  9. tinyxml读xml文件,转化字节,c#解析
  10. Atitit node.js的缺点 优缺点 和php比较 1. 门槛比较 php简单,node麻烦 1 1.1. php的优势是语法简单易学,学习曲线平滑度可能居所有语言之首 2 1.2. 当用N