一种基于深度学习的全自动纸心电图数字化算法

2023-10-23 22:50

本文主要是介绍一种基于深度学习的全自动纸心电图数字化算法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

深度学习在医学检测仪方面的应用

在这里插入图片描述
人们越来越关注将深度学习方法应用于心电图 (ECG),最近的研究表明,神经网络 (NN) 可以仅通过 ECG 预测未来的心力衰竭或心房颤动。然而,神经网络的训练需要大量的心电图,而目前很多心电图只是纸质的,不适合神经网络的训练。在这种背景下开发了一种全自动在线心电图数字化工具,可将扫描的纸质心电图转换为数字信号。

该算法使用自动水平和垂直锚点检测,自动将 ECG 图像分割成 12 个导联的单独图像,然后应用动态形态学算法提取感兴趣的信号。然后,我们在 515 个数字 ECG 上验证了算法的性能,其中 45 个被打印、扫描和重新数字化。在排除具有导联信号重叠的 ECG 后,自动数字化工具在数字化信号和地面实况 ECG(n = 515 标准 3×4 ECG)之间实现了 99.0% 的相关性。在不排除的情况下,所有 3×4 ECG 上导联的平均相关性为 90% 至 97%。在排除具有导联信号重叠的 ECG 后,12×1 和 3×1 ECG 格式的相关性为 97%。在不排除的情况下,12×1 ECG 中一些导联的平均相关性为 60-70%,而 3-by-1 ECG 的平均相关性达到 80-90%。

打印、扫描和重新数字化的心电图,我们的工具与原始信号的相关性达到 96%。我们开发并验证了一种全自动、用户友好的在线 ECG 数字化工具。与其他可用工具不同,这不需要对 ECG 信号进行任何手动分割。我们的工具可以促进大型纸质 ECG 存储库的快速和自动化数字化,使它们能够用于深度学习项目。

方法概论

图1:ECG数字化算法
图 1概述了我们的自动 ECG 数字化算法:首先对纸质 ECG 图像进行预处理,去除任何编辑区域和网格线,然后将其转换为二值图像,从而能够随后检测到 ECG 基线。检测到 ECG 基线后,使用垂直锚点检测每个 ECG 导联信号的上下边界。此步骤还允许算法确定印刷 ECG 上 ECG 导联的布局(即行数)。接下来,使用导联名称检测,每个导联的水平锚点,即要数字化的 ECG 信号的左右边界,分别表示它们的开始和结束,用于裁剪和提取信号12 导联心电图的每个导联。最后,每个导联中的信号都被单独数字化。

数据源

我们的在线心电图数字化工具是使用 12 导联心电图开发的,该心电图记录在伦敦帝国理工学院 NHS 信托基金的患者中。这些 ECG 最初打印在纸上,并以便携式文档格式 (PDF) 的匿名扫描版本提供给研究团队,随后重新格式化为 250 dpi 便携式网络图形 (PNG) 文件。这些心电图通常在传统的 3 × 4 导联配置,带导联 II 节奏条。该数据库仅包含纸质 ECG,没有数字 ECG 地面实况数据。

为了进行验证,我们使用来自美国马萨诸塞州波士顿贝斯以色列女执事医疗中心 (BIDMC) 的匿名 12 导联心电图作为 PNG 文件,格式为 3 × 4, 12 × 1 和 3 × 1 铅配置来验证我们的数字化工具。第二个数据库包含心电图图像和数字心电图地面实况数据。在我们的数字化工具的开发和测试中使用的所有 ECG 都校准到 1 mV = 10 mm,并以 25 mm/s 的纸速记录。

帝国理工学院和 BIDMC 都为该项目提供了伦理审查。所有方法均按照相关指南和法规进行。本研究中使用的数据收集的伦理批准由伦敦卫生研究局研究伦理委员会(汉普斯特德)授予(协议编号 20HH5967,REC 参考 20/HRA/2467,赞助商伦敦帝国理工学院)。所有受试者和/或其法定监护人均获得知情同意。本研究符合赫尔辛基宣言。

方法步骤

预处理

在用于开发的数据库中,所有 ECG 都包含一个标题,该标题由经过编辑的患者信息的黑色像素组成,这可能会对 ECG 轨迹的数字化产生不利影响。因此,在实施数字化过程之前,自动删除了每个 ECG 的编辑区域。编辑区域为黑色,导致编辑区域每一行的平均像素强度为零,而平均像素强度在要数字化的感兴趣区域中变为正标量值。这使得编辑区域能够在 ECG 信号数字化之前被可靠地识别和移除。
在这里插入图片描述
上图演示了自动 ECG 数字化算法概述:第 I 步:对 12 导联 ECG 图像进行预处理,以去除 ECG 和 ECG 网格的编辑部分。然后在垂直锚点的帮助下确定 ECG 基线以获得 ECG 配置。第二步:确定水平和垂直锚点和导联配置后,裁剪 12 导联信号。第三步:从单导联心电图图像中提取心电信号。第四步:使用仪表板工具设计用户界面。

心电图通常打印在包含网格线的纸上,这些网格线在数字化过程之前被移除。鉴于心电图包含红色像素,将图像的红色通道设置为1,并将图像转换为灰度。0.94 的阈值用于区分构成 ECG 信号和网格线的像素。像素> 0.94被丢弃,那些与≤ 0.94被视为 ECG 信号或导联名称的指示。这样就提取了二值图像中的心电图和导联名信息,去除了背景和网格线。处理后的二值图像如图 2 A、B所示。

ECG基线检测和ECG配置确定

预处理后,自动化数字化过程的第一步要求算法检测信号基线并确定 ECG 信号的行数以确定 ECG 配置。我们将 ECG 基线视为在水平轴上具有最高 ECG 信号强度的水平线。

霍夫变换是一种将图像从笛卡尔坐标轴转换为极坐标轴的坐标变换,已用于数字图像的计算机视觉特征提取。在这里,我们应用 Hough 变换来识别 ECG 基线。为了执行霍夫变换并限制合理解决方案的数量,实施了两个限制以避免基线识别不准确。首先,鉴于 ECG 基线预计接近水平,只有线之间−2.5和+2.5考虑围绕 x 轴。其次,鉴于基线预计会延伸到几乎整个图像,任何小于打印 ECG 宽度 80% 的线条都将被丢弃。

在 ECG 导联波形之间存在空间的情况下,如果导联间空间不大于图像总宽度的 15%,则合并线条。这确保了相邻导联的 ECG 信号保持独立,并且不会在数字化过程中合并。这种方法还有助于确定印刷 ECG 上的基线数量,并结合下方的垂直锚点检测,提供有关导联配置的信息。
在这里插入图片描述
图2:裁剪每个导联的单个 ECG 信号图像:(A) 原始 12 导联 ECG 扫描,其中包含患者可识别信息;(B) 基线检测用于确定导联之间的垂直距离;© 引线名称检测用于确定引线之间的水平距离;(D) 裁剪以获得每个导联的 ECG 信号。crop 的宽度是引线名称的终点到相邻引线名称的起点的距离,而crop 的高度是检测到的基线在中间的垂直距离的1.4 倍。

自动锚点检测

垂直锚点检测

正如基线检测用于确定垂直锚点以识别空间中的 ECG 信号一样,垂直锚点用于确定每个 ECG 导联中信号的上下边界以识别要数字化的信号。垂直裁剪长度如图2 B所示。上下边界分别定义为 ECG 基线上方和下方两个相邻 ECG 信号(水平面)之间距离的 0.7 倍。

水平锚点检测

水平锚点用于确定要数字化的 ECG 信号的左右边界,分别表示它们的开始和结束。水平面内的导联名称和后续心电信号的起点构成了待数字化心电信号的起点和终点。包含同一 ECG 中其他导联中的 ECG 信号的最大水平距离用于定义图像最右侧导联的右手边界,这些导联没有右手边界。

当这些名称非常接近 ECG 基线时,我们的文本识别模型无法检测到这些名称。在这些情况下,ECG 基线被移除,以使数字化工具能够识别导联名称。此外,对图像应用了形态学膨胀和腐蚀,以增强引导名称与周围信号的可区分性。因此,它使文本识别模型能够更轻松地识别这些案例。膨胀是一种使线条变粗的迭代区域增长算法,腐蚀是一种使线条变细的迭代区域缩小算法,从而使任何感兴趣的对象更容易被自动化过程识别。以这种方式过滤图像中所有感兴趣的对象,以排除那些具有宽高比的对象>5和那些宽度或高度<5或者>500像素。
此后,经过训练的文本字符识别深度学习模型32用于专门检测其他过滤对象中的潜在客户名称。该模型的输入包括 12 导联 ECG 二值图像和 12 个地面实况导联名称文本字符串(‘I’, ‘II’, ‘III’, ‘avr’, ‘avl’, ‘avf’, ‘v1’, ‘v2’, ‘v3’, ‘v4’, ‘v5’, ‘v6’)。

输出构成了模型检测到的任何文本、文本的相应边界框和置信度分数。置信度分数的阈值被设置为检测潜在客户名称,以便识别其中一个文本字符串会导致置信度分数超过阈值。这样,线索名称对象、线索名称对象的位置、高度和宽度信息被识别用于它们作为水平锚点的实现。从铅名称检测中获得水平距离的过程如图2所示 C. 在某些导联名称检测不成功的情况下,水平锚点是根据在同一 ECG 中成功识别的其他导联名称之间的距离来确定的。在成功识别水平和垂直锚点后,裁剪每条导联的 ECG 片段,如图2 D所示。

单导联心电图提取

从裁剪图像中提取 ECG 信号需要去除“椒盐”噪声,包括稀疏的白色和黑色像素,以及来自其他导联的任何部分 ECG 信号。后者对于会侵占相邻导联的裁剪图像的大幅值 ECG 迹线尤其如此,如图 3所示。为此,我们首先使用图像膨胀来连接感兴趣的 ECG 信号中的任何不连续性,这也防止了与噪声或相邻信号的任何虚假连接。此后,我们将图像中最大的可检测对象视为感兴趣的 ECG 信号,将所有其他对象视为伪影。这个过程如图3所示 这表明此方法保留了感兴趣的信号并删除了裁剪图像中包含的其他对象。

下一步涉及将提取的 ECG 二值图像转换为一维数字 ECG 信号。二值图像中的 ECG 信号包含一组具有 x(时间)和 y(电压)坐标的像素,以 25 mm/s 和 10 mm/mv 进行校准。对于任何给定的时间点(x 轴),几个像素可以构成相应的幅度。鉴于数字 ECG 信号对于每个 x 坐标只能有一个 y 坐标,我们使用二值图像中的中值幅度像素(y 轴)来重建数字 ECG 信号。这生成了以像素为单位的 x 和 y 坐标的数字 ECG 信号。

为了将时间和电压值归因于数字 ECG 信号,我们使用每个 ECG 中的节律(或最长信号)条带确定时间和电压分辨率。鉴于标准的 12 导联心电图持续时间为 10 秒,时间分辨率计算为 10 秒除以 x 轴上的像素数。电压-时间分辨率的标准值为 0.1 mV/40 ms = 0.0025 mV/ms,这使得信号的电压分辨率可以通过乘以时间分辨率和电压-时间分辨率 (0.0025 mV/ms) 来确定。这样,数字 ECG 信号的时间计算为 x 轴上的像素数乘以时间分辨率,幅度为 y 轴上的像素数乘以电压分辨率。
在这里插入图片描述
图3: 裁剪后的 ECG 图像的清洁过程。在感兴趣区域裁剪之后,扩张过程将可能的断点水平连接起来以获得完整的 ECG 信号。此后,标记过程将最大的对象识别为感兴趣的信号。最后,裁剪图像中的伪影被移除以保留感兴趣的信号。

Dashboard在线工具开发

我们用 Python dash plotly 开发了在线工具。以下步骤为最终用户提供了使用在线工具的分步说明。首先,用户需要扫描并上传心电图图像。提醒用户对所有机密或可识别患者身份的数据进行完全编辑和匿名处理。图像由 Python 方法“cv2.imread”读取,可以支持“cv2.imread”支持的任何图像格式。上传图片后,以固定高度 600 像素 (px) 显示。接下来,下拉栏提供了可视化每个数字化 ECG 信号的选项,并可选择通过放大或最小化图像来更改分辨率。数字化的 ECG 可以下载到包含 13 列的电子表格中,第一列提供时间轴数据,其余 12 列是 ECG 信号电压数据。

统计分析

我们使用 Pearson 相关性和均方根误差 (RMSE) 验证了我们的工具,以确定真实 ECG 信号与我们的数字化工具生成的数字化 ECG 信号之间的关联。验证是在从 BIDMC 获得的独立数据库上进行的。皮尔逊相关系数和均方根误差 (RMSE) 使用 Python 执行(“scipy.stat.pearsonr”用于皮尔逊相关系数,“sklearn.metrics.mean_squared_error”用于 RMSE).

结果

数字化过程的第一步要求算法使用水平和垂直锚点检测打印 ECG 的导联配置,以便于依次裁剪每个导联。其他数字化工具28开发了一个类似的界面,使用线检测算法进行水平和垂直锚点检测,该界面与打印在 6 中的 ECG 一起工作 × 2配置。尽管我们的工具采用了类似的垂直锚点检测方法,但我们还应用了基于深度学习的文本识别模型来检测水平锚点检测的主角名称。这具有允许软件从任何 ECG 配置中提取数据的优势。

虽然可以通过将 ECG 图像分成两半来识别水平锚点,但这种方法在导联不等距且仅适用于 6 个导联的 ECG 配置中可能不准确 × 2 心电图配置。其他数字化工具也需要手动标记锚点 ,并且在它们的应用中受到ECG配置的限制。它们也依赖于用户,需要在数字化过程之前手动选择每个导联。相比之下,我们的数字化工具可用于不同配置的 ECG,并且在数字化过程之前不需要手动输入。我们设想这将有助于其在临床和非临床环境中的应用,从而使更大量的印刷心电图能够在更短的时间内数字化。

在导联检测和单个导联裁剪之后,我们的数字化工具提供了一种有效的 ECG 信号提取方法。类似于其他数字化接口,我们应用连接算法来标记和删除小对象。然而,现有的其他数字化方法无法从其他导联中去除所有非 ECG 伪影或部分 ECG 信号,这需要其他过程,例如从图像的左到右选择像素的迭代过程。虽然这种方法可以提取心电图,但它可能是一个复杂且耗时的过程。相比之下,我们在将最大的标记对象识别为感兴趣的 ECG 信号之前,利用动态形态学方法连接 ECG 信号中的任何不连续性。这有效地消除了噪声而不需要进一步的计算处理。

传统上,许多现有的 ECG 数字化工具需要手动分割、移除网格线和处理以提取数字信号。拉维钱德兰等人。和 Lobodzinski 等人。已经应用光学字符识别来扫描和参考带有预定义字符模板数据库的印刷文本,或存储人口统计数据。除了传统方法外,其他人还使用端到端深度学习技术进行心电图数字化。然而,他们的技术在对不同 ECG 图像数据库的通用性方面受到限制,尤其是在不同配置的情况下。

开发我们工具的动机是让用户能够快速、轻松地从他们的纸张、图像或扫描副本生成大量数字心电图。我们预计这对希望在机器学习应用程序中使用 ECG 的个人特别有用。虽然这可以在不数字化 ECG 的情况下实现,例如使用纸质 ECG 或其图像30,但这些过程的任何输出本质上取决于输入的质量。相比之下,我们的工具将具有不同配置的纸质 ECG 数字化,从而为机器学习算法生成标准化输入。

总体而言,我们的数字化工具具有以下优势:
1、完全自动化,无需用户手动输入单导联信号分割。
2. 基于文本识别的导联名称检测使我们的数字化工具可在不同配置的 ECG 图像或纸质 ECG 扫描上通用。
3. 高效的 ECG 提取算法可在需要时快速数字化。
4. 真值数字心电图和数字化心电图波形的皮尔逊相关性和均方根误差是验证心电图数字化工具的有力方法。

参考

Tuncer, T., Dogan, S., Plawiak, P. & Subasi, A. A novel discrete wavelet-concatenated mesh tree and ternary chess pattern based ECG signal recognition method. Biomed. Signal Process. Control 72, 103331 (2022).
Tuncer, T., Dogan, S., Pławiak, P. & Acharya, U. R. Automated arrhythmia detection using novel hexadecimal local pattern and multilevel wavelet transform with ECG signals. Knowl. Based Syst. 186, 104923 (2019).
Baygin, M., Tuncer, T., Dogan, S., Tan, R.-S. & Acharya, U. R. Automated arrhythmia detection with homeomorphically irreducible tree technique using more than 10,000 individual subject ECG records. Inf. Sci. 575, 323–337 (2021).
Kobat, M. A., Karaca, O., Barua, P. D. & Dogan, S. Prismatoidpatnet54: an accurate ECG signal classification model using prismatoid pattern-based learning architecture. Symmetry 13, 1914 (2021).
Attia, Z. I. et al. An artificial intelligence-enabled ECG algorithm for the identification of patients with atrial fibrillation during sinus rhythm: a retrospective analysis of outcome prediction. Lancet 394, 861–867 (2019).
Raghunath, S. et al. Deep neural networks can predict new-onset atrial fibrillation from the 12-lead ECG and help identify those at risk of atrial fibrillation-related stroke. Circulation 143, 1287–1298 (2021).

这篇关于一种基于深度学习的全自动纸心电图数字化算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/270967

相关文章

Go中sync.Once源码的深度讲解

《Go中sync.Once源码的深度讲解》sync.Once是Go语言标准库中的一个同步原语,用于确保某个操作只执行一次,本文将从源码出发为大家详细介绍一下sync.Once的具体使用,x希望对大家有... 目录概念简单示例源码解读总结概念sync.Once是Go语言标准库中的一个同步原语,用于确保某个操

五大特性引领创新! 深度操作系统 deepin 25 Preview预览版发布

《五大特性引领创新!深度操作系统deepin25Preview预览版发布》今日,深度操作系统正式推出deepin25Preview版本,该版本集成了五大核心特性:磐石系统、全新DDE、Tr... 深度操作系统今日发布了 deepin 25 Preview,新版本囊括五大特性:磐石系统、全新 DDE、Tree

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

康拓展开(hash算法中会用到)

康拓展开是一个全排列到一个自然数的双射(也就是某个全排列与某个自然数一一对应) 公式: X=a[n]*(n-1)!+a[n-1]*(n-2)!+...+a[i]*(i-1)!+...+a[1]*0! 其中,a[i]为整数,并且0<=a[i]<i,1<=i<=n。(a[i]在不同应用中的含义不同); 典型应用: 计算当前排列在所有由小到大全排列中的顺序,也就是说求当前排列是第