基于自适应阈值的细胞图像分割系统
项目简介
本项目利用MATLAB实现了一套专门针对细胞图像的自动分割与计数系统。针对显微镜成像中常见的光照不均、背景复杂等问题,系统摒弃了传统的全局阈值方法,采用了鲁棒性更强的自适应阈值(Adaptive Thresholding)算法。该算法通过计算像素点局部的统计特性,动态确定分割阈值,从而能够精确地将细胞从亮度渐变的背景中提取出来。
该代码不仅包含核心分割算法,还内置了一个高性能的模拟数据生成器,能够在不依赖外部图像文件的情况下演示系统功能。系统集成了图像预处理、对比分析、形态学优化、轮廓可视化以及统计图表生成全套流程。
主要功能特性
- 内置模拟数据生成:代码包含一个合成图像生成模块,能够模拟显微镜下的光照不均(晕影效应)、高斯噪声以及随机分布的椭圆细胞,方便直接运行测试。
- 自适应阈值分割:利用局部均值滤波计算动态阈值,有效克服全局光照不均匀导致的分割失败问题。
- 算法对比演示:运行时直观展示“传统全局阈值法(Otsu)”与“自适应阈值法”的效果对比,突显本算法优势。
- 鲁棒的预处理机制:结合灰度转换、直方图拉伸(对比度增强)和高斯滤波去噪,提升输入图像质量。
- 形态学后处理:通过开运算、闭运算、孔洞填充及面积过滤,有效去除噪点、平滑边界并分离部分粘连细胞。
- 可视化与统计分析:提供多子图处理流程展示,在原图叠加分割轮廓,并自动生成细胞面积分布直方图和形态学散点图。
系统要求
- MATLAB R2016a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 确保MATLAB环境已安装图像处理工具箱。
- 将代码保存为
.m 文件。 - 直接运行主函数(
main)。 - 程序将自动生成一张模拟的细胞图像,并在弹出的窗口中显示处理流程对比图及统计分析图表。
- 控制台将输出检测到的细胞总数量。
如需处理自己的图片,请在代码中找到获取图像输入的区域,注释掉 generateSyntheticCellImage 调用,并使用 imread 读入实际图像。
详细功能与算法实现分析
本项目代码逻辑清晰,主要分为以下几个核心处理阶段:
1. 数据获取与模拟
代码首先尝试构建输入数据。为了保证代码的可移植性和演示效果,系统内置了一个图像生成函数。该函数通过数学模型模拟了显微镜成像特征:
- 光照模型:利用距离中心的平方反比规律生成中间亮、四周暗的背景(Vignetting),模拟真实显微环境。
- 细胞模拟:随机生成位置、大小不一的椭圆掩膜,并降低该区域亮度(模拟明场下的暗细胞)。
- 噪声添加:叠加高斯白噪声以测试算法的抗噪能力。
2. 图像预处理
为了提高后续分割的准确性,系统对原始图像进行了一系列预处理:
- 灰度化:将多通道图像转换为单通道灰度图。
- 对比度增强:使用
imadjust 进行直方图拉伸,扩展图像的灰度范围,增强细胞与背景的对比度。 - 高斯去噪:应用
imgaussfilt 对图像进行平滑处理,核心在于滤除高频噪声,防止其在局部阈值计算时被误判为前景。
3. 自适应阈值分割(核心算法)
这是本项目的核心模块,代码中并未直接调用现成的高级封装函数,而是手动实现了局部均值阈值算法,逻辑如下:
- 局部均值计算:利用一个指定大小(如35x35)的均值滤波器(
fspecial('average'))对图像进行卷积,得到每个像素点的局部背景估计值。 - 动态阈值判定:根据公式
Pixel < (LocalMean - C) 进行二值化。其中 C 是一个灵敏度常数。 - 逻辑解释:如果一个像素的灰度值显著低于其周围邻域的平均值,则认为该像素属于前景(细胞);否则属于背景。这种方法使得分割标准随背景亮度变化而浮动,完美解决了光照不均问题。
- 对比环节:代码同时执行了
graythresh (Otsu算法) 用于生成对比结果,通常Otsu在光照不均时会丢失暗部区域的细胞或保留过多背景。
4. 形态学后处理与优化
初步分割的图像通常包含噪点、孔洞或边缘毛刺,系统通过以下步骤进行优化:
- 开运算:使用圆盘结构元素进行腐蚀后膨胀,用于平滑轮廓、去除细小的背景噪点突起。
- 闭运算:进行膨胀后腐蚀,用于闭合细胞内部的细小断裂或填补边界缺口。
- 孔洞填充:使用
imfill 填充细胞内部封闭的黑色区域,确保细胞实心。 - 面积过滤:利用
bwareaopen 移除面积小于设定阈值(如50像素)的连通域,彻底消除非细胞的残留噪点。
5. 结果可视化与统计
- 轮廓叠加:代码通过提取二值掩膜的边界(
bwperim),直接操作图像矩阵的红色通道(R通道置为255),从而在原图上绘制出清晰的红色分割边界。 - 连通域分析:使用
bwlabel 统计细胞数量。 - 属性统计:利用
regionprops 提取每个检测对象的“面积”、“周长”和“离心率”。 - 图表展示:生成直方图展示细胞面积分布情况,并通过散点图(面积 vs 周长)展示细胞的形态学特征分布。
---
*注:本说明文档严格基于提供的
main.m 代码逻辑编写,真实反映了代码中实现的模拟数据生成、手动自适应算法实现及形态学处理流程。*