[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域

文末有代码链接!!!!!

修改 2023-03-14

偷空写个帖子。
在处理全病理切片(WSI)的时候,经常会碰到一个问题。就是整个WSI很大,其中有很多空白的地方,深度学习或者传统的图像处理都不需要处理的,如何把这些空白区域去掉。

用的最多的是传统的灰度图OTSU分割,简单的说就是:

import cv2
import numpy as np

import skimage
import skimage.morphology
#删除小空洞,可以看我另一片文章。
def remove_small_hole(mask, h_size=10):
    """remove the small hole

    Args:
        mask (_type_): a binary mask, can be 0-1 or 0-255
        h_size (int, optional): min_size of the hole

    Returns:
        mask
    """
    value = np.unique(mask)
    if len(value)>2:
        return None
    pre_mask_rever = mask<=0
    pre_mask_rever = skimage.morphology.remove_small_objects(pre_mask_rever, \
                                                            min_size=h_size)
    mask[pre_mask_rever<=0] = np.max(mask)
    return mask
    
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Remove noise using a Gaussian filter
gray = cv2.GaussianBlur(gray, (35,35), 0)
# Otsu thresholding and mask generation
ret, thresh_otsu = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 删除小的组织区域
 thresh_otsu = remove_small_hole(thresh_otsu, min_size*4)
 thresh_otsu = 255-thresh_otsu
 # 删除小的空白区域
 thresh_otsu = remove_small_hole(thresh_otsu, min_size)


可以得到类似下列的效果:
[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第1张图片

但这种方式只能按照灰度值来提取组织区域,无法去除一些污染。比如说下面的:
[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第2张图片
类似的污染是由于临床医生为了方便查看,用马克笔画上去的。还有很多制片,扫描时导致的污染,在WSI处理的时候都非常普遍,用灰度的阈值很难去除。
那就有第二种方法。这个是来源于 Anant Madabhushi团队开发的工具,叫HistoQC。论文题目如下:
HistoQC: An Open-Source Quality Control Tool for Digital Pathology Slides
github上有开源的代码:
代码
其主要原理是利用图像的一些传统特征,比如说灰度直方图,熵值啥的对像素进行分类,从而判别是组织区域还是污染或者空白,论文中的效果如下:
[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第3张图片
这个工具在一些质量较好的片子上效果还是很不错的,而且速度还是比较快的。但我在别的肿瘤上用的时候效果就很让我失望,会删掉不少组织区域。
[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第4张图片
可以看到不少组织区域都被剔除了。
然后最近我用了第三种方法。
我自己挑了不少组织区域,空白和一些污染区域的图像,一共3万个patch左右,训练了一个分类模型。只分两类,一类是背景(包括空白和污染),另一类是组织。用的是resner34网络,训了10个epoches,大概10分钟吧(用的3090,所以比较快),就能得到一个很不错的分割结果。
[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第5张图片

现在的分割结果是锯齿形边缘,看着不太舒服,我们再结合文章一开始说到的阈值分割,就能得到一个更加好看的分割结果:

[病理图像质控]分割病理图像(whole slide images,WSI)中包含组织的区域,去掉空白区域_第6张图片

制片时的污渍都被很好的剔除了。

我自己的代码链接:Github。

你可能感兴趣的:(医疗图像处理,病理图像WSI处理,组织区域分割,病理组学,HE图像处理)