显微镜图像多目标分类、着色及面积计算算法咨询
显微镜灰度图双结构分割、上色与面积计算落地方案
核心算法流程(适配90%以上常规明场/灰度显微镜成像场景,无需标注训练数据)
- 第一步:前置降噪
用3*3核的中值滤波cv2.medianBlur()处理原图,去掉显微镜成像常见的椒盐噪点,不要用过大的模糊核,避免磨掉结构的真实边缘。 - 第二步:双类别阈值分割
不需要上复杂模型,两类结构灰度差异明显,用自适应阈值就能稳定区分:- 先抠除背景:如果是亮场成像(背景为浅白/亮灰色),用三角阈值法算出背景和有效结构的分界阈值T2,先把纯白背景的mask单独提出来,不参与后续两类结构的分类。
- 在剩下的有效结构区域里,用大津法(Otsu)自动算出分界阈值T1:灰度值低于T1的区域归为黑色结构,灰度值在T1到T2之间的区域归为灰度结构。
- 如果碰到载玻片光照不均的情况,把全局大津阈值换成局部自适应阈值
cv2.adaptiveThreshold(),块大小设21、常数偏移量设5,不用手动调参就能适配局部亮度差。
- 第三步:mask后处理
对两个类别各自的二值mask做形态学操作:先用3*3矩形核做开运算(先腐蚀后膨胀),去掉散落在背景里的小噪点连通域;再做闭运算填上结构内部因为成像透光出现的小空洞。最后直接过滤掉面积小于3个像素的极小连通域,这类都是成像噪点,不属于真实结构。 - 第四步:差异化标识色填充
新建和原图尺寸一致的三通道画布:给黑色结构mask区域填充高对比度的正红色,给灰度结构mask区域填充翠绿色,背景保留原图的灰度质感。如果需要对照原结构查看,把上色层的透明度设为40%,和原图做加权融合即可,不会遮挡原结构的细节。 - 第五步:面积自动计算
分两种统计逻辑,按需选就行:- 像素相对面积:直接统计对应mask内的非零像素总数,用
np.count_nonzero()就能快速计算,黑色结构、灰度结构的像素数比值可以直接用来做组间占比对比。 - 实际物理面积:提前用同倍率、同相机参数拍摄镜台测微尺做标定,算出单个像素对应的实际物理尺寸,把对应类别的像素总数乘上单像素对应的实际面积,就能得到平方微米级的真实结构面积,一次标定后同参数下可以重复使用。
- 像素相对面积:直接统计对应mask内的非零像素总数,用
特殊场景适配
- 如果结构存在粘连、边缘模糊的情况,在阈值分割后加Canny边缘检测+分水岭算法,就能把挨在一起的不同结构分开,不会把多个结构算成一个连通域导致面积统计不准。
- 如果是荧光显微镜的单通道灰度图,上述流程完全通用,不需要额外调整参数逻辑。
内容的提问来源于stack exchange,提问作者David Joelsson Borger
相关产品推荐
相关产品推荐

