MATLAB 染色细胞分割计数

基于matlab图像处理的染色红蓝细胞分割、计数,主要算法运用了k均值聚类、形态学处理、分水岭分割等,花的时间较短,写的比较潦草,结果不是很准确。

根据细胞颜色进行k均值聚类分割,再利用分水岭分割计数。

clear;
close all;
%%%%%%%%%%%%%%%%%染色红色细胞分割%%%%%%%%%%%%%%%%%%%
im=imread('ceshi.jpg');%读取图像
im1_he=rgb2lab(im);%转化为lab颜色空间
ab=im1_he(:,:,2:3);%取a,b颜色
ab=im2single(ab);%转化为single数据类型
%k均值聚类-红蓝颜色分割
nColors=3;%3簇
pixel_labels=imsegkmeans(ab,nColors,'NumAttempts',3);
%figure;imshow(pixel_labels,[]);title('Image Labeled by Cluster Index');
mask1 = pixel_labels==1;
im_ = im .* uint8(mask1);
mask2 = pixel_labels==2;
im_red = im .* uint8(mask2);
%figure;imshow(im_red);title('染色红细胞分割');
mask3 = pixel_labels==3;
im_blue = im .* uint8(mask3);
%figure;imshow(im_blue);title('蓝细胞分割');
%%%%%%%%%%%%%%%%%%蓝色染色细胞分离-形态学分割%%%%%%%%%%%%%%%%%%%%
blue=rgb2gray(im_blue);
%figure;imshow(blue);
se = strel('disk',8);%创建半径20的圆盘,参数更改,越小细胞显示完整
Io = imopen(blue,se);%开运算
Ie = imerode(blue,se);%开运算重构
Iobr = imreconstruct(Ie,blue);%找出平面最大值
Ioc = imclose(Io,se);%闭运算
Iobrd = imdilate(Iobr,se);%膨胀图像
Iobrcbr = imreconstruct(imcomplement(Iobrd),imcomplement(Iobr));%重建
Iobrcbr = imcomplement(Iobrcbr);
bluecell_gray=Iobrcbr;
%figure;imshow(bluecell_gray);title('bluecell-gray');%蓝色染色细胞灰度
bw = imbinarize(Iobrcbr); %二值化
[m,n]=size(bw);
bluecell=im;
for i=1:m
    for j=1:n
        if bw(i,j)==0
            bluecell(i,j,1)=0;
            bluecell(i,j,2)=0;
            bluecell(i,j,3)=0;
        else 
            bluecell(i,j,1)=im(i,j,1);
            bluecell(i,j,2)=im(i,j,2);
            bluecell(i,j,3)=im(i,j,3);
        end
    end
end
%figure;imshow(bluecell);title('蓝色染色细胞');
%%%%%%%%%%%%%%%%%%%%%淋巴细胞分离,blue-bw - bluecell-bw%%%%%%%%%%%%%%%%%%%%%%%%%%
blue_bw=imbinarize(blue);%蓝+淋巴二值图
lb=medfilt2(blue,[5 5]);%蓝+淋巴灰度图滤波去噪

lvbo=medfilt2(bluecell_gray,[5 5]);
lvbo=imbinarize(lvbo);
% figure;imshow(lvbo);title('滤波');

lb=imbinarize(lb);
%figure;imshow(lb);title('lb-bw');
linba=imsubtract(lb,lvbo);
%figure;imshow(linba);title('减');
linba1=medfilt2(linba,[5 5]);
%figure;imshow(linba);title('linba-bw1');%1次去噪
linba2=medfilt2(linba1,[8 8]);
figure;imshow(linba2);title('linba-bw2');%二次去噪
linbacell=im;
[a,b]=size(linba2);
for i=1:a
    for j=1:b
        if linba2(i,j)==0
            linbacell(i,j,1)=0;
            linbacell(i,j,2)=0;
            linbacell(i,j,3)=0;
        end
    end
end
%figure;imshow(linbacell);title('淋巴细胞');
%细胞计数
%%%%%%%%%%%%红细胞计数%%%%%%%%%%%%%%%%%%%%%%
red=rgb2gray(im_red);
%figure;imshow(red);title('灰度图')
se = strel('disk',8);%创建半径20的圆盘,参数更改,越小细胞显示完整
Io = imopen(red,se);%开运算
Ie = imerode(red,se);%开运算重构
Iobr = imreconstruct(Ie,red);%找出平面最大值
Ioc = imclose(Io,se);%闭运算
Iobrd = imdilate(Iobr,se);%膨胀图像
Iobrcbr = imreconstruct(imcomplement(Iobrd),imcomplement(Iobr));%重建
Iobrcbr = imcomplement(Iobrcbr);
red_=imbinarize(Iobrcbr);
%figure;imshow(red_);title('二值图')
D = bwdist(red_);
DL = watershed(D);
bgm = DL == 0;
bgm_=imcomplement(bgm);
%figure;imshow(bgm_);title('Watershed Ridge Lines')
[L,number]=bwlabel(bgm_);
fprintf(1,'红细胞数量为:%d\n',number);
%%%%%%%%%%%%蓝细胞计数%%%%%%%%%%%
se = strel('disk',8);%创建半径20的圆盘,参数更改,越小细胞显示完整
Io = imopen(bluecell_gray,se);%开运算
Ie = imerode(bluecell_gray,se);%开运算重构
Iobr = imreconstruct(Ie,bluecell_gray);%找出平面最大值
Ioc = imclose(Io,se);%闭运算
Iobrd = imdilate(Iobr,se);%膨胀图像
Iobrcbr = imreconstruct(imcomplement(Iobrd),imcomplement(Iobr));%重建
Iobrcbr = imcomplement(Iobrcbr);
bw_blue=imbinarize(Iobrcbr);
%figure;%imshow(red_);title('二值图')
D = bwdist(bw_blue);
DL = watershed(D);
bgm = DL == 0;
bgm_=imcomplement(bgm);
%figure;imshow(bgm_);title('Watershed Ridge Lines')
[L,number]=bwlabel(bgm_);
fprintf(1,'蓝细胞数量为:%d\n',number);
%%%%%%%%%%%淋巴细胞计数%%%%%%%%%%%%
D = bwdist(linba2);
DL = watershed(D);
bgm = DL == 0;
bgm_=imcomplement(bgm);
%figure;imshow(bgm_);title('Watershed Ridge Lines')
[L,number]=bwlabel(bgm_);
fprintf(1,'淋巴细胞数量为:%d\n',number);

结果可以看出淋巴细胞分割非常不准,连接在一起的细胞也无法准确计数,有待改进。

 

结果:
红细胞数量为:31
蓝细胞数量为:21
淋巴细胞数量为:30 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值