欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

matlab图像处理关于细胞计数

程序员文章站 2024-03-08 12:57:40
...

第1章 问题重述

本题共给出了如下所示的二十五张图片,每张图片都是显微镜下对运动精子静态观察的微观显示,每张图片中都含有很多条精子,随机选取一张精子的静态图片,以第十张图片为例,从图片1-2中可以看出,精子的分布具有不均匀性,其分布毫无规律,十分散乱,精子的游动方向各不相同,其尾部有的张开,也有的和头部重合,且背景以灰色为主,还有白色等混杂的颜色。本题要求在这样混杂的二十五张图片中求出每张图内所含的精子数目。   

                         matlab图像处理关于细胞计数

                             图1-1 二十五张精子图

       matlab图像处理关于细胞计数

图1-2 第十张精子图

第2章 设计方案

2.1 解决思路

从所给的图片中,我们可以看到黑色的精子,灰白相间的背景,对于这样的看似只有黑白灰的图像,实则并不是灰度图像,所以首先要对图像进行灰度处理,将图像变成灰度值介于0-255之间的数,然后构造结构元素,将精子的轮廓选中,去除不均匀背景,调节灰度的对比度,最后将灰度图像二值化,标记二值化图像中的元素,即可得到一副图片中精子数量,若求取二十五幅图片中精子数量,可利用循环结构,将其求出。

2.2 设计流程

              matlab图像处理关于细胞计数

图2-1 设计流程图

2.3 原理介绍

2.3.1灰度处理

灰度数字图像是每个像素只有一个采样颜色的图像。这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑白两种颜色,灰度图像在黑色与白色之间还有许多级的颜色深度。

一幅完整的图像,是由红色、绿色、蓝色三个通道组成的。红色、绿色、蓝色三个通道的缩览图都是以灰度显示的。用不同的灰度色阶来表示“ 红,绿,蓝”在图像中的比重。通道中的纯白,代表了该色光在此处为最高亮度,亮度级别是255。

在计算机领域中,这类图像通常显示为从最暗黑色到最亮的白色的灰度,尽管理论上这个采样可以任何颜色的不同深浅,甚至可以是不同亮度上的不同颜色。灰度图像与黑白图像不同,在计算机图像领域中黑白图像只有黑色与白色两种颜色;灰度图像在黑色与白色之间还有许多级的颜色深度。但是,在数字图像领域之外,“黑白图像”也表示“灰度图像”,例如灰度的照片通常叫做“黑白照片”。

我们可以通过下面几种方法,将其转换为灰度:

1.浮点算法:Gray=R*0.3+G*0.59+B*0.11

2.整数方法:Gray=(R*30+G*59+B*11)/100

3.移位方法:Gray =(R*76+G*151+B*28)>>8;

4.平均值法:Gray=(R+G+B)/3;

5.仅取绿色:Gray=G;

通过上述任一种方法求得Gray后,将原来的RGB(R,G,B)中的R,G,B统一用Gray替换,形成新的颜色RGB(Gray,Gray,Gray),用它替换原来的RGB(R,G,B)就是灰度图了。

matlab图像处理关于细胞计数

图2-2 灰度处理效果对比图

2.3.2 构造结构元素

构造结构元素是利用膨胀、腐蚀、开运算、闭运算等方法对图像进行处理,膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的.
1.膨胀
         是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的.A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的.结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0.否则为1

matlab图像处理关于细胞计数

图2-3 膨胀原理示意图


2.腐蚀
         对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1.否则为0
         腐蚀处理的结果是使原来的二值图像减小一圈。

3.开运算

开运算数学上是先腐蚀后膨胀的结果,开运算的结果为完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。

4.闭运算

闭运算在数学上是先膨胀再腐蚀的结果,闭运算的结果也是会平滑对象的轮廓,但是与开运算不同的是,闭运算一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞。

matlab图像处理关于细胞计数

图2-4 腐蚀原理示意图

通常,由于噪声的影响,图象在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声孔,背景区域上散布着一些小的噪声物体。连续的开和闭运算可以有效地改善这种情况。有时需要经过多次腐蚀之后再加上相同次数的膨胀,才可以产生比较好的效果。

2.3.3灰度图像二值化

将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。

图像的二值化处理就是将图像上的点的灰度值为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于在对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者另外的物体区域。

2.3.4二值图像连通域标记

    讨论连通区域标记的算法之前,我们先要明确什么是连通区域,怎样的像素邻接关系构成连通。在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,即上下左右,如下左图所示。8邻接的点一共有8个,包括了对角线位置的点,如下图所示:

     matlab图像处理关于细胞计数 

图2-5 二值图像连通域示意图

如果像素点A与B邻接,我们称A与B连通,于是我们不加证明的有如下的结论:如果A与B连通,B与C连通,则A与C连通。在视觉上看来,彼此连通的点形成了一个区域,而不连通的点形成了不同的区域。这样的一个所有的点彼此连通点构成的集合,我们称为一个连通区域。

现在matlab中连通区域标记函数bwlabel中使的算法,它一次遍历图像,并记下每一行或列中连续的团和标记的等价对,然后通过等价对对原来的图像进行重新标记,这个算法是标记算法中效率最高的一个。

 第3章 一张图的精子数目统计

3.1 编程设计

% 载入图片

t=1;

RGB = imread(strcat(int2str(t),'.','jpg'));

figure,imshow(RGB)

I = rgb2gray(RGB);

se = strel('disk',20);

I2 = imbothat(I,se);  % 底帽变换,去除不均匀背景

figure,imshow(I2)

 

I3 = imadjust(I2);   % 调节灰度对比度

 

% 灰度图像二值化,全局阈值分割最大化类间方差

level = graythresh(I3);

BW = im2bw(I3,level);

figure,imshow(BW)

 

[L,N] = bwlabel(BW);  % N即为目标个数

 

% 标记目标物

figure,imshow(RGB)

hold on

for k = 1:N

    [r,c] = find(L == k);

    rbar = mean(r);

    cbar = mean(c);   plot(cbar,rbar,'marker','o','markeredgecolor','r','markersize',10);

end

 

% 对话框显示目标物个数

h = dialog('Name','目标个数','position',[580 300 220 100]);  % 创建一个对话框窗口

 

uicontrol('Style','text','units','pixels','position',[45 40 120 50],'fontsize',15,'parent',h,'string',strcat('第',num2str(t),'张图的精子数为',num2str(N),'个'));     % 创建文本内容

 

uicontrol('units','pixels','position',[80 10 50 20],'fontsize',10,

'parent',h,'string','确定','callback','delete(gcf)'); % 创建【确定】按钮

 
3.2 统计结果

每一步骤运行后的结果一次如下图所示:

matlab图像处理关于细胞计数

图3-1 第一张精子图

 

matlab图像处理关于细胞计数

图3-2 第一张构造结构元素后灰度处理图

matlab图像处理关于细胞计数

图3-3 第一张灰度二值化处理图

matlab图像处理关于细胞计数

图3-4 第一张目标标记图

matlab图像处理关于细胞计数

图3-5 第一张精子数目统计图

                      第4章 全部图片的数目统计

4.1 编程设计

 

% 载入图片

t=1;

RGB = imread(strcat(int2str(t),'.','jpg'));

figure,imshow(RGB)

I = rgb2gray(RGB);

se = strel('disk',20);

I2 = imbothat(I,se);  % 底帽变换,去除不均匀背景

figure,imshow(I2)

 

I3 = imadjust(I2);   % 调节灰度对比度

 

% 灰度图像二值化,全局阈值分割最大化类间方差

level = graythresh(I3);

BW = im2bw(I3,level);

figure,imshow(BW)

 

[L,N] = bwlabel(BW);  % N即为目标个数

 

% 标记目标物

figure,imshow(RGB)

hold on

for k = 1:N

    [r,c] = find(L == k);

    rbar = mean(r);

    cbar = mean(c);   plot(cbar,rbar,'marker','o','markeredgecolor','r','markersize',10);

end

 

% 对话框显示目标物个数

h = dialog('Name','目标个数','position',[580 300 220 100]);  % 创建一个对话框窗口

 

uicontrol('Style','text','units','pixels','position',[45 40 120 50],'fontsize',15,'parent',h,'string',strcat('第',num2str(t),'张图的精子数为',num2str(N),'个'));     % 创建文本内容

 

uicontrol('units','pixels','position',[80 10 50 20],'fontsize',10,

'parent',h,'string','确定','callback','delete(gcf)'); % 创建【确定】按钮

 

3.2 统计结果

 matlab图像处理关于细胞计数

图4-1 第三四五六张精子数目图

将全部的25张图片用循环算法求解出其精子数目,将其汇总如下表:

表4-1 二十五张精子数目统计表

第1张图

第2张图

第3张图

第4张图

第5张图

409

402

391

421

408

第6张图

第7张图

第8张图

第9张图

第10张图

409

395

406

410

383

第11张图

第12张图

第13张图

第14张图

第15张图

396

369

400

395

395

第16张图

第17张图

第18张图

第19张图

第20张图

390

400

385

399

381

第21张图

第22张图

第23张图

第24张图

第25张图

378

383

395

403

391

 

由此可知,将全部图片精子数目都统计了出来,本题得到了解决。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

相关标签: matlab