【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码
【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码
TT_Matlab
博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。
一、简介
分水岭算法是一种图像区域分割法,分割的过程中将图片转化为灰度图,然后我会将灰度值看作是海拔,然后向较低点注水,这种基于地形学的解释,我们着重考虑三种点:
极小值点,该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是极小值点。
盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。
盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何一个盆地。
明白上述三种点之后,我们开始往盆地的极小值点注水,然后随着注水的深入,每一个极小值点慢慢的向外扩展,然后知道两个盆地的水汇合,汇合处就是我们需要的分水岭。
从下图可以直观理解一下,首先这三块区域都含有极小值点
然后逐渐填充就能获得分水岭(即分界线)
得到分界线就能完成图像分割:
二、源代码
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.
五、代码下载
-
2023年血糖新标准公布,不是3.9-6.1,快来看看你的血糖正常吗? 2023-02-07
-
2023年各省最新电价一览!8省中午执行谷段电价! 2023-01-03
-
GB 55009-2021《燃气工程项目规范》(含条文说明),2022年1月1日起实施 2021-11-07
-
PPT导出高分辨率图片的四种方法 2022-09-22
-
2023年最新!国家电网27家省级电力公司负责人大盘点 2023-03-14
-
全国消防救援总队主官及简历(2023.2) 2023-02-10
-
盘点 l 中国石油大庆油田现任领导班子 2023-02-28
-
我们的前辈!历届全国工程勘察设计大师完整名单! 2022-11-18
-
关于某送变电公司“4·22”人身死亡事故的快报 2022-04-26
