栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

【科研笔记】《Semi-Supervised PR Virtual Staining for Breast Histopathological Images》

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【科研笔记】《Semi-Supervised PR Virtual Staining for Breast Histopathological Images》

【科研笔记】《Semi-Supervised PR Virtual Staining for Breast Histopathological Images》
  • 0.引言
  • 1.文章介绍
    • 1.1 引言
    • 1.2 方法
      • 1.2.1 配准
      • 1.2.2 半监督GAN
    • 1.3 实验
    • 1.4 结论
  • 2.配准
  • 3.整理数据
    • 3.1 将HE和IHC的WSI切图
    • 3.2 配准预处理
    • 3.3 生成标签

说明:本文将继续不定时更新,最后也会把源码公开,但由于本人并非改论文的原作者,因此,征求原作同意及代码重构都需要一定的时间。请谅解!

0.引言

近期组内同学的论文《Semi-Supervised PR Virtual Staining for Breast Histopathological Images》被MICCAI2022接收,这项工作是一项十分难得且精巧的工作,因此我决定将这篇文章介绍一下,就是复现起来比较麻烦。特此写出本文供大家参考。

1.文章介绍 1.1 引言 1.2 方法 1.2.1 配准 1.2.2 半监督GAN 1.3 实验 1.4 结论 2.配准 3.整理数据

※说明:整理数据过程很是繁琐,由于该代码最初并非本人所写,因此里面很多流程都需要大家自己去更改代码的路径,也需要自己去建文件夹或改名,本教程也只能给大家一个大概的指引,望大家谅解。

3.1 将HE和IHC的WSI切图

首先要知道,我们拿到的图片都是sdpc这种格式的WSI,也就是说,这种格式在一开始就必须通过一些特殊的软件去访问,我们采用的是深圳市生强科技有限公司的扫片软件,先通过这个阅片软件把数据从sdpc转为svs文件,目录的组织结构是这样的,总的目录下,有35个文件夹,一个文件夹代表着一个患者,每个患者里头有1个HE.svs和1个HSP70.svs。这些原始的的svs被放置在/data112/lizx/data/svs1路径下。如图3.1.1所示:

之后,这些svs将被切图,使用的是create_patches_HE.py和create_patches_IHC.py,这两个脚本的作用只是将svs的图片切出来,并变成h5格式的文件。这一步操作过后,数据被存储在了/data112/lizx/SSPRVS/origin_data路径下,组织形式如图3.1.2所示。这里要注意,一开始IHCdata和HEdata文件夹下面不是1-35这样的子文件夹,而是患者的病历号,也就是大家在图3.1.1里看到的一长串数字,这都需要我们在后期命名的时候再改,或者也可以通过脚本处理一下,但是要记住序号1-35和原病历号的对应关系。

真正把这一整个h5文件分离成多个png的,还是得靠h5topng.py,经过这么一处理,数据的组织形式就变成了这种形式。如图3.1.3所示,HEdata文件夹内每一个患者的子文件夹里的HE文件夹内会存放切出来的patch,而IHCdata文件夹内每一个患者的子文件夹里的HSP-70文件夹内会存放切出来的patch。


到这一步,我们的切图工作就算完成了。

※注意,在整张图里,可能会存在一个对照区,医生根据这个对照区来诊断病例,这个对照区是一定要切下去的,否则会严重影响我们的配准工作。生成的patch里,这一部分对照区当然也不能存在,此外,应删除部分完全空白的patch,可以根据文件大小来判断,凡是文件小于30kb的,我们都可以认为这是空白并加以删除。如果你第一次复现的时候和我一样很不幸地没有删除,白边已经生成出来了,那就使用我提供的0_remove_irrelative_images.ipynb去删除吧,因为对照区一般都在右边,而patch对的命名中,用下划线_将文件名字符串split,倒数第二位就是横坐标,倒数第一位就是纵坐标,你可以测量一下对照区在右侧的宽度占图片总宽度的比例,用该比例乘最大的横坐标,就知道横坐标大于某个数值的patch应当被删去,这个横坐标临界值就是0_remove_irrelative_images.ipynb脚本里img_id这个变量存储的内容,当你print所有命令之后,把所有命令移动到shell脚本里,运行shell脚本就可以快速删除图片啦。同理,删除白边则是使用2_delete_white.ipynb这个文件,至于为什么会有i>100000这条判断语句,因为如果一下子删掉的图片太多,服务器很可能会崩掉,所以最好一批一批删,而且在删除HE的时候最好把IHC的部分注释掉,删除IHC的时候则注释掉HE,不然实在会很麻烦。

3.2 配准预处理

接下来我们就要进行配准工作的预处理。

首先,/data112/lizx/SSPRVS/prepare_data.py这个文件是专门用来整理出最初配准所需要的数据的,该脚本是把之前IHCdata/患者序号/mask里的png图片存放到一个统一的Registration_data文件夹内,如图3.2.1所示。

注意到/data112/lizx/SSPRVS/DeepHistReg文件夹下有一个path.py,事实上这是专门用于存储数据路径的地址。然后采用parse_to_mha.py将原有的WSI进行下采样缩小尺寸,因为原来的图片太大了。本脚本还会完成png格式的文件转化为mha的工作。转换之后的图片被存入MHAdata这个文件夹里,数据组织形式如图3.2.2所示。


然后是利用prepare_datasets_linyy.py和prepare_RGB_datasets.py分别去获取单通道的MHA和RGB三通道的MHA,分别被我保存在了One_channel_data_preparation和RGB_channel_data_preparation这两个文件夹里,这两个文件夹的目录结构也很类似,所以只放前者作为参照,如图3.2.3所示。


之后启用main.py,就执行了配准操作。我们配准的目的是,因为对于每个patch,我们只知道IHC的阴阳性,不知道HE的阴阳性,我们配准之后就可以知道HE的阴阳性,但是IHC和HE的图片不可能完全一致,所以我们才会用配准让二者的形式尽可能吻合,这就是我们的思路。最后使用mha2png.py把配准完成之后的mha转化为png格式。

配准结束后数据的组织形式是这样的,如图3.2.4所示。其中的source是原图片,target是目标图片,而transformed_target是转换出来的。

3.3 生成标签

我们需要的只是这个图中的transformed_target,这就是配准后的IHC,用它去生成mask,作为HE的mask。我们看到SSGAN根目录底下有一个HE_mask.py就是专门实现这个功能的。不过他要求所有的数据必须都位于一个文件夹内,现在我们就要进行一些改动了。这将分为重命名和移动位置两个部分。

在重命名部分,

我们首先在SSGAN的data里建立一个文件夹叫origin1,这个文件夹里存储的就是为了生成mask而汇聚的数据。然后编写脚本1_data_organization.ipynb,具体内容可以参见后面我的github,然后把这个地方的代码运行,输出结果粘贴到shell脚本1_data_organization.sh中,就可以坐到批量运行许多代码了。复制结果也就因此完成,这些复制出来的图片皆被保存在origin1里。具体而言,路径就在/data112/lizx/SSPRVS/SSGAN/data/HE2IHC这里。如图3.3.1所示。

接下来我们运行mask.py,这个mask结果会被保存在与origin1同级的IHC_mask文件夹里。

现在mask有了,到了打标签的时候了。这里要用到的是HE_label.py这个脚本,那么这个地方,我们要对数据进行重新整理。首先要用到刚刚的mask,这里的maskdir就是刚刚我们存储mask的地方。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/876426.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号