这是2020的春节,实在是闲的无聊,写个贴子吧。
这篇文章主要是一个类似于综述性质的文章,里面会讲一下细胞核分割的图像,算法,当然也会给出引用的文献。
细胞核分割是个很久远的课题了。细胞核的分割在应用上有着很广泛的应用,比如说在溶液中统计单位体积的细胞数量可以统计细胞的密度和总数目,在病理图片中对细胞进行分割是计算机进行肿瘤精准分析的前提,对以后的计算机辅助病理分析有着很重要的影响。这里会介绍一些在病理图像细胞核分割上比较常用的算法和工具。
首先我们来了解一下病理图片。病理图片是病理组织(也就是人体的组织)经过染色后,在显微镜下拍摄的照片。放大倍率一般是由显微镜的放大倍率决定的。一般有200倍和400倍两种(也有文献说是20和40,其实都是一样的)。下图是一个HE染色的图片。
为什么病理图片要染色呢?因为在不染色的情况下,组织几乎是无色透明的,所以啥都看不出来。所以要进行染色。常用的染色方法是HE染色和IHC染色。HE染色主要是依靠染色剂和细胞核细胞质分别结合,将细胞核染成蓝紫色细胞质染成红色,上图就是一个HE染色的图像。IHC的染色原理稍有不同,它是利用抗体和体内某种抗原结合,再用DAB染色剂将抗原抗体结合后的物质进行着色,一般然出来的是细胞核是红棕色。常用的由CD3,CD8等蛋白染色,就是将带有这些蛋白的细胞染成红棕色。为了能够更加方便的区分带有目标蛋白细胞和普通细胞,IHC还会在DAB染色上再染一个H(H就是HE染色里面的H)这样子在图像上带有目标蛋白的细胞就是红棕色,不带有目标蛋白的就是和HE一样的蓝紫色。染色完了就将整个组织在显微镜下扫描出来,扫描出来的结果我们称作全病理切片(WSI)。
下面介绍一下传统的分割方法。
最传统的图像分割方法就是一个简单的二值化,比较常用的是OSTU阈值化。选取一个阈值,将图像二值化,直接区分出背景和前景。这种方法简单粗暴,直接的结果就是效果差的一批。重叠的细胞分不开,挨得近的细胞也分不开。所以一般都会在这个不步骤上加一个距离分水岭(用点到中心的距离做分水岭,而不是一般的分水岭),通过形态学上的差异,将重叠的细胞分开。但这两种算法一般只用在灰度图上,而病理图像是RGB图,所以就需要经RGB转化成灰度图,但是这里也有个问题。看下图:
第一个图象是RGB图,第二个是普通的灰度图,第三个是染色分离的图。我们可以看到灰度图直接表示的就是像素点大小的关系,在这个图像上很难通过一个简单的形态学操作分隔开细胞核和细胞质。最右边的是染色分离的图,这个图细胞核深色,细胞质明显浅色。比灰度图好分割。
那么什么是染色分离。染色分离就是将RGB颜色空间映射到染色剂染色的空间。就比如说,HE图像染色剂是H和E,那么RGB经过染色分离后可以得到H和E两个通道的信息,分别代表了H和E各自的染色强度。由于细胞核只有H染色,所以我们取H通道的图片,那么图像中细胞质就会变得很浅。在这种图像上进行分割,效果更好。染色分离参考文献Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images. 原文中有代码,但是是matlab的。
好了,传统的算法介绍到这里。本文也主要是想说说深度学习。
传统的方法是经验型的,就是处理人员根据所得的图片,看一下图片的规律,然后通过一些形态学操作,分割出细胞核。这种方法第一个是效率不高,结果不怎么好,而且很死板。当我们拿到新的图片的时候往往原来的方法效果非常差。深度学习在这方面就好很多。
现在的深度学习已经发展的很成熟,有很多很多的模型可以用。但是像mask R-CNN之类在模式识别里面用的很好的模型在细胞核分割里面往往不好。
为啥呢。一个是这种网络是为了适应千变万化的自然图像而设计的,本身就需要大量的图像进行训练。病理图像虽然可以切割成很多的小patch但是病理图像的ground truth非常难以制作。不像自然图像,病理图像需要专业的病理医生才能准确的勾画制作成本很高。所以能用来训练的样本就很少,这种网络自然训练不好。
第二个,自然图像的分割往往是平均值的体现。只要每个图像都分割的差不多,那么总体效果就不会差。也因为自然图像太多变,所以这种网络最后生成mask的时候都是4倍或者8倍上采样得到。这样子得到的mask必然是边缘不准确的。
但模式识别的网络也有好处,可以直接在模型上做分类,还可以部分解决细胞重叠的问题。
在细胞分割领域用的最多的还是U-net结构。这个结构有很多特点几乎是专门为细胞核分割设计的。
第一个,unet结构简单,用来处理细胞核这种形态简单的分割任务最适合不过。
二,unet的skip connect方式非常容易恢复细胞核的轮廓。
三,unet结构简单,容易训练,适合小样本的分割任务。刚好满足细胞核分割的实际情况。
四,uent采用2倍上采样的方式,可以在每次上采样很好的保证细胞核轮廓的清晰,可以分个出很清晰的边界。
很多深度学习分割细胞核的文章都是unet的变体,这种结构很适合细胞核的分割,效果也非常的好。下面我主要是介绍unet变体和一些细胞核分割不同的思路。
由于病理图像的颜色比较多变。由于染色时长,成像的机型等等不同,病理图像的颜色风格也比较多变。所以很多文章在分割前都会做颜色的标准化,就是把所有的颜色风格统一到一种颜色风格。但这样子会造成一定的信息损失,可做可不做,根据具体需求。颜色标准化有很多文章,用的比较多的:Structure-Preserving Color Normalization and Sparse Stain Separation for Histological Images
首先介绍一个水文,他的主要特点是利用细胞核轮廓辅助细胞核分割,这种利用细胞核轮廓辅助分割的论文有不少,我主要介绍两个。
RIC-Unet: An Improved Neural Network Based on Unet for Nuclei Segmentation in Histology Images
直接给网络结构图,太简单了,就不详细讲了。
上图左边用于预测细胞核的轮廓,轮廓就是细胞核的边界,可以通过cv2.Canny(img,30,100)函数从原始的GT种直接得到。主要思路就是通过左边轮廓的反向传播训练中间的下采样分支,为右边的细胞核分割提供帮助。论文最后是将分割出来的轮廓和核进行相减,然后再做膨胀操作。这个做法听起来很合理,但是效果并不好,比原来的unet提升了只是一点点,而且这个结构参数更多,提升一点点并没有什么说服力。所以只是提供个思路。
A Dataset and a Technique for Generalized Nuclear Segmentation for Computational Pathology
这个文章是MICCAI2018挑战赛的文章,提出了一个细胞核分割的数据库,论文里面的方法也是利用了细胞核轮廓,但是效果不好。在对比试验里面,连普通的unet都没有进行比较,只比较了老式的FCN。从后面的论文里面也可以知道,它的性能比不上unet,所以这个方法不怎么样。主要是这个数据库很好用,可以用来练手。
Segmentation of Nuclei in Histopathology Images by Deep Regression of the Distance Map
这个文章出发点有点意思。它不是用普通的GT进行训练,而是先得到GT的distance map,也就是距离图。说白了就是算出GT中每个细胞核里面,每个像素点距离所在细胞核中心像素点的距离,当成新的GT,放进网络进行训练。如上图。这个可以网上找一下算距离图的函数,很容易得到。这种方法可以用于所有的网络,要做的就是将原来的GT替换成disance map,最后得出的结果再通过分水林算法得到最终结果,从论文里面看,各种模型都有所提升。原文有代码。
Hover-Net: Simultaneous segmentation and classification of nuclei in multi-tissue histology images
这个论文也是用了距离图,但是不是点到中心的距离图,而是水平距离图核垂直距离图。网络结构如上。每个分支执行不同的分割任务,最上面的是一般的分割,中间的是水平距离图核垂直距离图的分割,最下面的是分类。想法不难可以看出效果也不错。这个也是unet的变体,原文有代码。
CIA-Net: Robust Nuclei Instance Segmentation with Contour-Aware Information Aggregation
这篇文章是miccai 2018挑战赛的冠军,达到了平均0.62的AJI。结果图如下:
可以看到,这个就是一个unet的变体,作者主要在上采样的时候做了功夫。首先通过分成两个分支,一个预测核,一个预测边界,同时学习核与边界两种语义信息。然后再上采样的时候,两个分支有3次交会的地方,使得核与边界两种信息在上采样的时候可以不断融合。而且作者还用了深监督的方式,在倒数第二个核第三个上采样层都进行监督。最后,文章还提出了一种损失函数。:
最常用的是交叉熵损失,这个损失不管是错误还是正确的点,都一样的算损失。CIAnet这个损失函数的出发点是:尽量减少分割错误的点对模型的影响。这个函数从论文中看,对模型性能的提升也很大,可以试着用用。但这个论文中没有代码。
好了,就讲到这里了。大家新春快乐。健健康康。