matlab图像处理关于细胞计数
第1章 问题重述
本题共给出了如下所示的二十五张图片,每张图片都是显微镜下对运动精子静态观察的微观显示,每张图片中都含有很多条精子,随机选取一张精子的静态图片,以第十张图片为例,从图片1-2中可以看出,精子的分布具有不均匀性,其分布毫无规律,十分散乱,精子的游动方向各不相同,其尾部有的张开,也有的和头部重合,且背景以灰色为主,还有白色等混杂的颜色。本题要求在这样混杂的二十五张图片中求出每张图内所含的精子数目。
图1-1 二十五张精子图
图1-2 第十张精子图
第2章 设计方案
2.1 解决思路
从所给的图片中,我们可以看到黑色的精子,灰白相间的背景,对于这样的看似只有黑白灰的图像,实则并不是灰度图像,所以首先要对图像进行灰度处理,将图像变成灰度值介于0-255之间的数,然后构造结构元素,将精子的轮廓选中,去除不均匀背景,调节灰度的对比度,最后将灰度图像二值化,标记二值化图像中的元素,即可得到一副图片中精子数量,若求取二十五幅图片中精子数量,可利用循环结构,将其求出。
2.2 设计流程
图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)就是灰度图了。
图2-2 灰度处理效果对比图
2.3.2 构造结构元素
构造结构元素是利用膨胀、腐蚀、开运算、闭运算等方法对图像进行处理,膨胀和腐蚀这两种操作是形态学处理的基础,许多形态学算法都是以这两种运算为基础的.
1.膨胀
是以得到B的相对与它自身原点的映像并且由z对映像进行移位为基础的.A被B膨胀是所有位移z的集合,这样,和A至少有一个元素是重叠的.结构元素B可以看作一个卷积模板,区别在于膨胀是以集合运算为基础的,卷积是以算术运算为基础的,但两者的处理过程是相似的.
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为0,结果图像的该像素为0.否则为1
图2-3 膨胀原理示意图
2.腐蚀
对Z中的集合A和B,B对A进行腐蚀的整个过程如下:
⑴ 用结构元素B,扫描图像A的每一个像素
⑵ 用结构元素与其覆盖的二值图像做“与”操作
⑶ 如果都为1,结果图像的该像素为1.否则为0
腐蚀处理的结果是使原来的二值图像减小一圈。
3.开运算
开运算数学上是先腐蚀后膨胀的结果,开运算的结果为完全删除了不能包含结构元素的对象区域,平滑了对象的轮廓,断开了狭窄的连接,去掉了细小的突出部分。
4.闭运算
闭运算在数学上是先膨胀再腐蚀的结果,闭运算的结果也是会平滑对象的轮廓,但是与开运算不同的是,闭运算一般会将狭窄的缺口连接起来形成细长的弯口,并填充比结构元素小的洞。
图2-4 腐蚀原理示意图
通常,由于噪声的影响,图象在阈值化后所得到边界往往是很不平滑的,物体区域具有一些噪声孔,背景区域上散布着一些小的噪声物体。连续的开和闭运算可以有效地改善这种情况。有时需要经过多次腐蚀之后再加上相同次数的膨胀,才可以产生比较好的效果。
2.3.3灰度图像二值化
将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,首先,图像的二值化有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。其次,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。
图像的二值化处理就是将图像上的点的灰度值为0或255,也就是将整个图像呈现出明显的黑白效果。即将256个亮度等级的灰度图像通过适当的阈值选取而获得仍然可以反映图像整体和局部特征的二值化图像。在数字图像处理中,二值图像占有非常重要的地位,特别是在实用的图像处理中,以二值图像处理实现而构成的系统是很多的,要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像,这样子有利于在对图像做进一步处理时,图像的集合性质只与像素值为0或255的点的位置有关,不再涉及像素的多级值,使处理变得简单,而且数据的处理和压缩量小。为了得到理想的二值图像,一般采用封闭、连通的边界定义不交叠的区域。所有灰度大于或等于阈值的像素被判定为属于特定物体,其灰度值为255表示,否则这些像素点被排除在物体区域以外,灰度值为0,表示背景或者另外的物体区域。
2.3.4二值图像连通域标记
讨论连通区域标记的算法之前,我们先要明确什么是连通区域,怎样的像素邻接关系构成连通。在图像中,最小的单位是像素,每个像素周围有8个邻接像素,常见的邻接关系有2种:4邻接与8邻接。4邻接一共4个点,即上下左右,如下左图所示。8邻接的点一共有8个,包括了对角线位置的点,如下图所示:
图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 统计结果
每一步骤运行后的结果一次如下图所示:
图3-1 第一张精子图
图3-2 第一张构造结构元素后灰度处理图
图3-3 第一张灰度二值化处理图
图3-4 第一张目标标记图
图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 统计结果
图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图像处理关于细胞计数
-
生物细胞计数软件MATLAB代码实现
-
基于matlab的数字图像处理--对比度增强
-
对图像进行对比度处理,Matlab
-
关于大并发在线实时图像处理的解决方案
-
关于matlab 中libsvm中model中的保存与调用新发现 博客分类: matlab 图像 matlablibsvmsavemodelloadmodel
-
关于matlab 中libsvm中model中的保存与调用新发现 博客分类: matlab 图像 matlablibsvmsavemodelloadmodel
-
(三)OpenCV图像处理_04_对象计数
-
关于大并发在线实时图像处理的解决方案
-
Matlab图像如何处理?Matlab图像处理的基本操作