当前位置: 首页 > news >正文

HistoQC|病理切片的质量控制工具

小罗碎碎念

这期推文介绍的内容,我相信研究病理组学的人,一定都非常熟悉——HistoQC——病理切片的质量控制。

之前写过Hover Net系列的推文,反响还可以,但是Hover Net是用于细胞核检测和分类的,直接从这里开始还不够系统,所以我想了想,还是觉得要从头开始。

最开始要做的,就是数据收回来以后,怎么处理?为了保证模型的准确性,最开始要做的就是把质量差的数据剔除(类似于临床数据的纳入排除标准),所以这一期推文介绍的就是如何批量筛除质量差的切片

另外,这篇文章并不是教你怎么用哈,只是给你梳理一下知识背景,让你系统的了解一下这个工具而已。


这篇文章介绍了一个名为HistoQC的开源工具,它用于对数字病理切片进行质量控制。

数字病理(DP)指的是组织切片的数字化,这一技术正在改变临床诊断工作流程,并在计算病理学领域引起了积极的研究。

HistoQC工具的主要目的是自动识别和描绘数字切片中的伪影,并发现队列级别的异常情况(例如,与其他切片相比,染色过深或过浅的切片)。这个工具结合了图像度量(如颜色直方图、亮度、对比度)、特征(如边缘检测器)和监督分类器(如笔迹检测),通过交互式图形用户界面向用户展示无伪影区域和度量,使用户能够通过实时可视化和过滤来检测伪影。用户还可以明确定义他们工作流程中可接受的容差。

HistoQC在450张来自癌症基因组图谱(The Cancer Genome Atlas)的切片上进行了测试,由两位病理学家进行了评审,结果表明,超过95%的情况下,HistoQC的输出适合进行计算分析。这表明HistoQC可以为识别伪影和测量切片质量提供一个自动化、可量化的质量控制流程,从而帮助提高DP工作流程的重复性和稳健性。

文章还讨论了HistoQC的潜在改进空间,包括检测压缩效果、整合更多特征,以及扩展到其他类型的多模态显微镜图像。此外,作者希望HistoQC能够成为一个社区驱动的参考实现集合,包括复杂的检测器和度量方法。

HistoQC的源代码是公开可用的,可以自由使用、修改和贡献。


一、引言

精准的疾病诊断通常依赖于病理学家在显微镜下对组织切片的视觉检查。在此之前,必须先创建组织切片。这一过程包括大体器官解剖、选择和准备用于制作切片的组织块、显微切片(切割并将组织放置在玻片上)、染色和封片,存在许多分析前引入人为误差和批次效应的机会[1-3]。

这些人为误差可能包括:

  • 不正确的组织放置(例如,折叠、压缩、撕裂、气泡)
  • 不正确的试剂(例如,过度或不足染色、染料浓度差异、染料批次变化)
  • 较差的显微切片(例如,刀片颤动、厚度差异)

对这些切片进行日益流行的数字化处理,以便利用计算机辅助诊断方法[4-6],例如,又引入了另一种潜在的人为误差源。这一数字化过程将通常用于显微镜病理学的玻璃切片放置在相当于数码相机上,以构建切片的数字表示。扫描机制造商可能采用不同的方法进行切片数字化,包括不同的硬件(例如,照明用的灯泡、数字化用的电荷耦合器件芯片)和图像处理算法(例如,拼接、压缩)以及文件格式。因此,切片扫描仪的选择可能会影响图像外观,进而可能对任何后续的图像分析程序产生影响[7]。

这些数字病理学(DP)切片可能还会包括数字化误差,如模糊、照明和对比度问题。总的来说,存在多种不同的来源组合,可能导致组织切片的外观和质量产生重大差异。


这些同样的人为误差和差异可能会对下游的临床和研究工作流程产生负面影响[8]。

在当今使用的模拟工作流程中,连续质量控制(QC)过程是有限的,与实验室医学依赖的连续统计过程控制不同。临床上,因质量原因被拒绝的切片会拖慢临床病理工作流程,因为需要重新切割或重新扫描这些切片,从而造成额外的延误和不必要的成本。

从研究的角度来看,人为误差是噪声的来源,可能会不利地影响疾病检测、诊断和预后等任务的解析分类器的开发和验证[9,10]。这对于日益流行的深度学习和机器学习方法尤为重要[11-16],这些方法依赖于良好注释且相对无误差的图像来学习特定疾病的表示。


目前,大多数临床和研究应用的质量控制过程都是手动进行的,这使得过程具有主观性、劳动强度大且容易出错。

例如,尽管TCGA托管的30,000个数字化组织切片的图像在引入TCGA之前经过了手动质量控制,但在许多切片中仍可以看到广泛的人为误差和图像质量(图1)。

在这里插入图片描述

图中并列显示了原始的组织切片图像和HistoQC分析后的对应图像,其中品红色(fuchsia)表示可接受的组织区域。

(A) 显著的气泡伪影:HistoQC识别出一个需要从实验队列中移除的显著气泡伪影。气泡伪影可能会影响图像分析的准确性,因为它们可能与实际的组织结构相混淆。

(B) 盖玻片裂缝附近的模糊组织:HistoQC检测到盖玻片裂缝附近存在模糊的组织区域。模糊可能是由于切片过程中的技术问题或者扫描过程中的焦点问题造成的,这会影响图像的清晰度和分析质量。

© 折叠的组织:HistoQC识别出组织折叠的情况。组织在制备过程中可能会发生折叠,这会导致图像中出现不连续的区域,影响图像分析。

(D) 笔迹标记:HistoQC正确地识别出应避免的笔迹标记区域。这些标记可能是在切片的制备或标记过程中留下的,它们不是组织的一部分,可能会干扰图像分析。

这些分析结果表明HistoQC能够有效地识别出可能影响病理学图像分析的伪影和异常区域,帮助提高数字病理图像的质量控制。通过这些可视化的结果,用户可以快速识别出问题区域,并决定是否需要对切片进行重新制备或扫描。


这篇文献介绍了一个开源质量控制应用程序HistoQC,用于自动评估切片质量,以及一个包含人为误差的切片公共存储库。

HistoQC结合了图像度量(例如,颜色直方图、亮度、对比度)、特征(例如,边缘和平滑度检测器)和监督分类器(例如,笔检测),以帮助用户识别具有明显技术误差的切片、可能不适合计算分析的受误差影响的区域(数据补充提供了当前的分类器和度量列表)以及可能受批次效应影响的样本。

此外,HistoQC的模块化特性允许轻松嵌入额外的度量和误差检测算法


二、方法

2-1:HistoQC的工作原理

用户提供一个配置文件,定义QC流程的参数,例如执行哪些模块以及顺序。

当基于Python的流程在切片上执行时,将创建相关的输出图像(例如,缩略图显示潜在的模糊区域),并将元数据(例如,扫描仪类型、放大倍数、每像素微米数)和度量保存在一个制表符分隔的值文件中。按照设计,可以在整个切片上(即包括背景)或仅限于包含检测到组织的区域计算图像度量。

虽然任何常用的数据分析工具都可以用来审查制表符分隔的值输出(例如,Matlab [MathWorks, Natick, MA], Excel [Microsoft, Redmond, WA], R [R Foundation, Vienna, Austria]),但作者开发了一个基于HTML5的用户界面(图2),可以无缝地实现数据的实时可视化和过滤。


2-2:HistoQC用户界面的几个关键功能和组件

FIG 2展示了HistoQC用户界面的几个关键功能和组件,这些功能使得用户能够高效地进行质量控制和图像分析:

(A) 用户界面展示:

image-20240625194924908

  • 表格:HistoQC生成的度量指标以表格形式展示,具有可排序的列(绿色箭头指示)。这允许用户根据不同的度量标准对切片进行排序和筛选。
  • 平行坐标图(红色框内):这是一种可视化工具,用于展示切片的多个度量指标,帮助用户识别批次效应和异常值。具体的度量指标和它们的视觉表示将在图3中给出更多细节。
  • 缩略图:显示了整个队列的缩略图,以及HistoQC叠加输出,指示无伪影区域(蓝色箭头指示)。这为用户提供了一个快速概览,以识别可能需要进一步审查的切片。

(B) 选择单个图像:

在这里插入图片描述

  • 当用户在界面上选择单个图像时,平行坐标图中相应的线条会被突出显示。这有助于用户在平行坐标图中追踪和识别所选图像的度量指标。
  • 同时,界面会展示该图像由HistoQC流水线模块生成的一系列输出结果。这允许用户对选定的切片进行更详细的审查和分析。

© 双击图像:

image-20240625195053126

  • 用户可以通过双击任何图像来打开一个更高分辨率的版本,该版本具有动态缩放功能。这使得用户能够对潜在的伪影进行精细调整的检查。
  • 动态缩放功能对于识别和分析图像中的微小细节非常有用,尤其是在评估图像质量或伪影对分析可能产生的影响时。

在用户使用注释字段注释行或从表中删除行之后,可以保存结果表,并将其用作适合下游实验的样本列表。在安装后,不需要互联网连接,使得这个模型特别适用于非匿名临床数据。


三、结果

为了验证HistoQC生成的结果,邀请了两位具有DP经验的病理学家对HistoQC生成的每个掩模进行评估,将其分为可接受或不可接受。

可接受性定义为病理学家的视觉评估与HistoQC对无误差组织的计算评估之间至少有85%的区域重叠。每位病理学家独立审查了250个样本。

此外,两位病理学家和HistoQC共同评估了来自TCGA的50张图像,以确定对HistoQC输出的专家间一致性。总体而言,HistoQC与专家1的总体一致性为94%(250个中的235个),与专家2的一致性为97%(250个中的242个)。对于两位专家共同评估的50张切片,观察者间一致性为96%(50个中的48个),与HistoQC与个别读者的比较相当。

不一致的主要原因是染色较淡的切片导致组织检测失败,以及一些主要富含间质的区域被错误地识别为模糊(数据补充)。这些失败在HistoQC用户界面表现为异常值,主要是由于度量(例如,估计的组织面积)与所分析切片的其余部分相关的标准差数量级不同。


病理学家还提供了关于HistoQC似乎错误识别为受损或不受损的病例模式的定性反馈。这些病例通常分为三类:

  • 固定不良的组织
  • 坏死组织
  • 微妙的脂肪组织浸润伴少量组织反应

HistoQC在完全识别粘液瘤中的实质方面有时也遇到困难。作者正在努力进一步改进HistoQC,以解决这些局限性,并在下一个版本中予以解决。

【PS:文章于19年发表,我们在Github上可以看到,最新的一版更新于21年5月】

在这里插入图片描述


四、讨论

总结来说,作者提出并发布了一个名为HistoQC的开源DP切片质量控制工具。

4-1:HistoQC适用于界定切片级别的误差

将HistoQC与两位病理学家对450张图像的手动质量控制进行比较,平均一致性超过95%,与两位个别人类读者之间的同意范围相当。此外,HistoQC计算出的图像度量可以被研究人员和分析流程开发者用来精确定义他们的算法所训练和验证的输入图像特征。这些图像特征的严格规范使得算法可以选择性地仅在适当的图像上调用,这可能会提高算法的置信度。

DP工作流程正处于利用强大的计算机辅助诊断(CAD)支持算法的边缘,这可能会大大减少观察者内部和观察者之间的诊断变异性。正如最近的一些出版物所揭示的,许多CAD和人工智能(AI)算法在对其初始训练图像集之外的队列进行评估时,似乎不具有很好的泛化能力。

因此,这些AI和CAD算法必须在大量的异构输入上进行稳健的验证。像HistoQC这样的方法可以允许对测试集进行预评估,以确保CAD和AI算法在足够多样化的测试图像上进行评估。


4-2:HistoQC需要进一步改进的地方

例如,由于DP扫描仪之间通常存在的压缩水平异质性,以及压缩误差影响深度学习和AI算法性能的证据,HistoQC可以扩展到检测和测量压缩效果。

在需要整合更多特征的基础上,作者设想HistoQC将发展成为一个由社区驱动的复杂检测器和度量标准参考实现的集合。例如,Senaras等人提出了一种基于深度学习的模糊检测器,Avanaki等人提出了一种基于纹理的图像质量度量。作者希望这些类型的算法在未来能够嵌入到HistoQC中,以实现不同站点和实验室之间结果的比较。

本文所展示的工作重点是对HistoQC在苏木精和伊红明场显微镜图像背景下的评估。显然,还需要在其他类型的多元显微镜图像,如免疫组织化学染色和定量免疫荧光中应用质量控制度量。最后,作者希望汇集用户社区在使用HistoQC过程中识别的独特误差。作者已经建立了一个图像质量存储库,允许终端用户上传包含误差的切片。这个存储库将帮助提供未来CAD方法的基准测试所需的训练和验证材料。

相关文章:

HistoQC|病理切片的质量控制工具

小罗碎碎念 这期推文介绍的内容,我相信研究病理组学的人,一定都非常熟悉——HistoQC——病理切片的质量控制。 之前写过Hover Net系列的推文,反响还可以,但是Hover Net是用于细胞核检测和分类的,直接从这里开始还不够系…...

C/C++ - 编码规范(USNA版)

[IC210] Resources/C Programming Guide and Tips 所有提交的评分作业(作业、项目、实验、考试)都必须使用本风格指南。本指南的目的不是限制你的编程,而是为你的程序建立统一的风格格式。 * 这将有助于你调试和维护程序。 * 有助于他人&am…...

leetcode刷MySQL记录——sum/count里加条件判断、avg求满足条件记录数占比

leetcode题目:1934. 确认率 在刷leetcode的MySQL题中,从题目的题解知道了count和avg聚合函数的另外用法,在此记录。 count() 里加条件判断 count函数用于统计在符合搜索条件的记录中,指定的表达式expr不为NULL的行数有多少&…...

PHP的SHA256WithRSA签名和Curl POST请求函数

getCustomerEncryptionKey - 获取加密秘钥 /** * 获取加密秘钥 * param array $params * return string */ public function getCustomerEncryptionKey(array $params): string { //1.ASCII码(字典序-升序)排序…...

5G RAN

两个entity:NodeB、UE entity之间传输数据的东东 entity内部的流水线岗位:L3/L2/L1 岗位之间是消息交互/信令交互...

Mybatis动态sql标签

动态SQL标签简介: MyBatis的一个强大的特性之一通常是它的动态SQL能力。如果你有使用JDBC或其他相似框架的经验,你就明白条件地串联SQL字符串在一起是多么的痛苦,确保不能忘了空格或在列表的最后省略逗号。动态SQL可以彻底处理这种痛苦。 Mybatis中实现动态sql的标签有&#x…...

Linux CentOS Suhosin禁用php5.6版本eval函数详细图文教程

方法一:PHP_diseval_extension禁用 Linux CentOS 禁用php的eval函数详细图文教程_centos php 禁用 eval-CSDN博客 这个方法make报错,懒得费时间处理,直接用第二种 方法二:suhosin禁用 服务器只装了一个PHP5.6版本,一…...

这5招底层逆袭玄学,一个人越来越厉害的秘诀

在这个充满机遇与挑战的时代,每个人都渴望能够逆袭成功,摆脱底层的束缚,成为人生赢家。 然而,现实往往是残酷的,许多人在追逐梦想的路上遭遇挫折,甚至迷失了方向。 那么,有没有一些"…...

MySQL自学教程:1. MySQL简介与安装

MySQL简介与安装 一、MySQL简介二、MySQL安装(一)Windows系统上的安装(二)Linux系统上的安装(以Ubuntu为例)(三)Mac OS系统上的安装三、安装后的基本配置四、总结一、MySQL简介 MySQL是一个流行的开源关系型数据库管理系统(RDBMS),广泛应用于各种业务场景,从小型个…...

Jenkins多stage共享同一变量方式

在第一个stage中为这个变量赋值,在其它stage中使用这个变量 import java.nio.file.Files import java.nio.file.Path import java.nio.file.Paths import java.nio.file.StandardCopyOption import groovy.json.JsonOutput import groovy.json.JsonSlurper// 共享的…...

Ant design Vue 表格中显示不同的状态(多条件显示)

比如:后端一个字段有多种状态: 那么后端接口会返回:0 或者 1 或者 2 其中一个,前端需要展示的是对应的文字,像简单的只有两个状态的可以直接在列里面操作: {title: 状态,dataIndex: usable,customRender: …...

如何借助物联网实现土壤监测与保护

如何借助物联网实现土壤监测与保护 高标准农田信息化是指利用现代信息技术,如物联网、大数据、云计算等,对农田进行数字化、智能化的管理,以提高农田的生产效率和可持续发展能力。其中,土壤监测与保护是农田信息化的重要内容之一…...

Linux之prometheus安装和使用简介(一)

一、prometheus简介 普罗米修斯Prometheus是一个开源系统监控和警报工具包,最初构建于SoundCloud。自2012年成立以来,许多公司和组织都采用了普罗米修斯,该项目拥有非常活跃的开发人员和用户社区。它现在是一个独立的开源项目,独立…...

orcle数据表空间操作sql

orcle数据表空间操作sql 1.查询表空间路径: select t1.name,t2.name from v$tablespace t1,v$datafile t2 where t1.ts#t2.ts#2.删除表空间和空间里的表: drop tablespace LTSYSDATA01 including contents and datafiles;1、表空间的路径、名称查询&…...

【Unity Android】Unity链接安卓手机调试

一、物理连接手机 1.USB数据线链接 2.打开开发者模式 大部分手机在手机设置->系统管理->关于手机->软件版本型号中,点击7次以上,来开启系统管理中的开发者模式选项。 3.打开USB调试 打开开发者模式后,开启USB调试 二、Unity中…...

数据结构与算法笔记:高级篇 - 概率统计:如何利用朴素贝叶斯算法过滤垃圾短信?

概述 上篇文章我们讲到,如何用位图、布隆过滤器,来过滤重复数据。本章,我们再讲一个跟过滤相关的问题,如果过滤垃圾短信? 垃圾短信和骚扰电话,我想每个人都收到过吧?买房、贷款、投资理财、开…...

vue3中通过vditor插件实现自定义上传图片、录入echarts、脑图、markdown语法的编辑器

1、下载Vditor插件 npm i vditor 我的vditor版本是3.10.2,大家可以自行选择下载最新版本 官网:Vditor 一款浏览器端的 Markdown 编辑器,支持所见即所得(富文本)、即时渲染(类似 Typora)和分屏 …...

揭示数据库内核的奥秘--手写数据库toadb开源项目

揭示数据库内核的奥秘–手写数据库toadb 数据为王的时代 在信息化时代,数据已成为企业和应用不可或缺的核心,而数据库不仅是数据的仓库,更是支撑业务决策、系统运行的基石。对于求职者而言,掌握数据库知识已成为求职市场上的必考…...

Grafana调整等待时间,避免Gateway timeout报错

使用Grafana的HTTP时,有些即时数据需要运算量与时间,而grafana的默认timeout是30秒,因此需要通过修改配置文件,避免grafana提前中断连接 修改原始配置文件: 删除;调整timeout30为timeout60 # This setting also applies to cor…...

MetaGPT全面指南:多代理协作框架的深入解析与应用

文章目录 理解MetaGPT1.1 MetaGPT的基础1.2 MetaGPT的独特之处1.3 MetaGPT在AI领域的应用 MetaGPT的工作原理2.1 训练2.2 微调2.3 推理2.4 多代理协作的概念2.5 如何分配角色给GPTs2.6 复杂任务的完成过程 实际应用3.1 客户支持3.2 内容创作3.3 教育3.4 医疗保健3.5 在企业中的…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

django filter 统计数量 按属性去重

在Django中,如果你想要根据某个属性对查询集进行去重并统计数量,你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求: 方法1:使用annotate()和Count 假设你有一个模型Item,并且你想…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言:为什么 Eureka 依然是存量系统的核心? 尽管 Nacos 等新注册中心崛起,但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制,是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

三体问题详解

从物理学角度,三体问题之所以不稳定,是因为三个天体在万有引力作用下相互作用,形成一个非线性耦合系统。我们可以从牛顿经典力学出发,列出具体的运动方程,并说明为何这个系统本质上是混沌的,无法得到一般解…...

3403. 从盒子中找出字典序最大的字符串 I

3403. 从盒子中找出字典序最大的字符串 I 题目链接:3403. 从盒子中找出字典序最大的字符串 I 代码如下: class Solution { public:string answerString(string word, int numFriends) {if (numFriends 1) {return word;}string res;for (int i 0;i &…...

深入解析C++中的extern关键字:跨文件共享变量与函数的终极指南

🚀 C extern 关键字深度解析:跨文件编程的终极指南 📅 更新时间:2025年6月5日 🏷️ 标签:C | extern关键字 | 多文件编程 | 链接与声明 | 现代C 文章目录 前言🔥一、extern 是什么?&…...

在鸿蒙HarmonyOS 5中使用DevEco Studio实现录音机应用

1. 项目配置与权限设置 1.1 配置module.json5 {"module": {"requestPermissions": [{"name": "ohos.permission.MICROPHONE","reason": "录音需要麦克风权限"},{"name": "ohos.permission.WRITE…...

Java多线程实现之Thread类深度解析

Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...

ip子接口配置及删除

配置永久生效的子接口,2个IP 都可以登录你这一台服务器。重启不失效。 永久的 [应用] vi /etc/sysconfig/network-scripts/ifcfg-eth0修改文件内内容 TYPE"Ethernet" BOOTPROTO"none" NAME"eth0" DEVICE"eth0" ONBOOT&q…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...