首页 > 行业资讯 > 【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码

【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码

时间:2023-02-11 来源: 浏览:

【细胞分割】基于中值滤波+分水岭法实现细胞计数matlab源码

原创 天天Matlab 天天Matlab
天天Matlab

TT_Matlab

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,完整matlab代码或者程序定制加qq1575304183。

收录于合集 #图像处理matlab源码 954个

一、简介

分水岭算法是一种图像区域分割法,分割的过程中将图片转化为灰度图,然后我会将灰度值看作是海拔,然后向较低点注水,这种基于地形学的解释,我们着重考虑三种点: 极小值点,该点对应一个盆地的最低点,当我们在盆地里滴一滴水的时候,由于重力作用,水最终会汇聚到该点。注意:可能存在一个最小值面,该平面内的都是极小值点。 盆地的其它位置点,该位置滴的水滴会汇聚到局部最小点。 盆地的边缘点,是该盆地和其它盆地交接点,在该点滴一滴水,会等概率的流向任何一个盆地。 明白上述三种点之后,我们开始往盆地的极小值点注水,然后随着注水的深入,每一个极小值点慢慢的向外扩展,然后知道两个盆地的水汇合,汇合处就是我们需要的分水岭。

从下图可以直观理解一下,首先这三块区域都含有极小值点 然后逐渐填充就能获得分水岭(即分界线) 得到分界线就能完成图像分割:

二、源代码

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.

五、代码下载

版权:如无特殊注明,文章转载自网络,侵权请联系cnmhg168#163.com删除!文件均为网友上传,仅供研究和学习使用,务必24小时内删除。
相关推荐