OCT 医学图像分类

news2024/9/21 12:25:34

目录

    • 1. OCT 图像分类
    • 2. OCT图像数据集
    • 3. OCT图像预处理
    • 4. 特征提取
    • 5. 实验结果及分析

github地址: https://github.com/aishangcengloua/OCT_Classification

1. OCT 图像分类

  视网膜光学相干断层扫描(OCT)是一种成像技术,用于捕获活体患者视网膜的高分辨率横截面。每年大约进行3000万次OCT扫描,对这些图像的分析和解释占用了大量时间。OCT被眼科医生大量使用以获得眼睛视网膜的高分辨率图像,同时也可用于诊断许多视网膜相关的眼病,因此OCT图像对医学图像处理任务中十分重要。

2. OCT图像数据集

  OCT图像数据集包括训练集和测试集,均有4类图像分别是CNV、DME、DRUSEN和NORMAL,训练集共有84495张图片,测试集共有1000张图片,图像均标记为疾病类型-患者ID-该患者的图像编号。4种类别情况如图1所示。图中,最左侧为脉络膜新生血管(CNV),具有新生血管膜(白色箭头)和相关的视网膜下液(箭头);左中为糖尿病性黄斑水肿(DME)与视网膜增厚相关的视网膜内液(箭头);中右为早期AMD,存在多个玻璃疣(箭头);最右侧具有保留的中心凹轮廓且没有任何视网膜液及水肿的正常视网膜(NORMAL)。
在这里插入图片描述

图1. OCT图像

3. OCT图像预处理

  OCT图像中含有大量的噪声以及许多无关区域,即背景区域有很多,因此对OCT图像的处理的目的就是对OCT图像进行去噪,将前景区域对齐并裁剪,舍弃背景区域。预处理的流程图如图2所示。

在这里插入图片描述

图2. OCT图像预处理流程
本次对OCT图像的预处理过程主要包括6个过程,下面为各个过程的作用讲解:
  • 高斯滤波:高斯滤波的优点可以集中在高斯函数的特点上来看。首先,二维高斯函数是旋转对称的,在各个方向上平滑程度相同,不会改变原图像的边缘走向。第二,高斯函数是单值函数,高斯卷积核的锚点为极值,在所有方向上单调递减,锚点像素不会受到距离锚点较远的像素影响过大,保证了特征点和边缘的特性。第三,在频域上,滤波过程中不会被高频信号污染。

在这里插入图片描述

图3. 高斯滤波
  • 图像二值化:使用阈值过滤填充后的图像,使用平均值作为阈值,对图像进行二值化处理,得到二值图像。这是为了找到粗略的前景区域。
  • 中值滤波、轮廓填充:中值滤波基本原理是把数字图像或数字序列中一点的值用该点的一个邻域中各点值的中值代替,让周围的像素值接近的真实值,从而消除孤立的噪声点。其对脉冲噪声有良好的滤除作用,特别是在滤除噪声的同时,能够保护信号的边缘,使之不被模糊。在本次任务中,使用中值滤波的方法对二值图像进行处理,可以去除视网膜内脱落的黑点。而轮廓填充是为了去除由于前面二值化得到的小区域,此次先是找到二值化图像中的所有区域轮廓,随后对每个轮廓的面积进行统计,然后对具有最大面积的区域进行白色填充作为感兴趣区域。

在这里插入图片描述

图4. 中值滤波
  • 形态学开闭操作:图像依次经过腐蚀、膨胀处理后的过程。图像被腐蚀后,去除了噪声,但是也压缩了图像;接着对腐蚀过的图像进行膨胀处理,可以去除噪声,并保留原有图像,通过形态学开运算的方法,设置合适大小的卷积核,去除视网膜外脱落的白点。然后对图像进行闭操作,扩张图片。

在这里插入图片描述

图5.形态学操作
  • 图像数据拟合:此步骤是对图像的中间和底部的数据点集进行线性拟合或者二阶多项式拟合,该过程主要参考了[4],是为了后续的前景区域的对齐和裁剪,剔除背景区域,这样有利于特征提取。
  • 图像对齐、归一化、裁剪:将前景区域对齐到一个相对统一的形态学位置来归一化视网膜。根据拟合曲线将图像的每一列移动一定距离,使视网膜变平。然后对前景区域进行裁剪,提出背景区域。

OCT图像经过上述预处理流程的结果如图6所示。图中的A-F表示上述的预处理流程。

在这里插入图片描述

图6. OCT图像预处理结果可视化

4. 特征提取

  在对OCT数据集的所有照片进行预处理得到前景区域之后,就要对OCT图像进行特征提取,本次任务我使用了深度学习框架来提取特征,我选择的是ResNet50框架。我使用PyTorch加载ResNet50的预训练模型,该预训练模型参数在大型数据集ImageNet[5]上训练得到,我使用OCT数据集的训练集对ResNet50进行微调10个Epoch,并在ResNet50中插入PDBL[6]模块,PDBL可参考论文或者代码。使用交叉熵损失函数和SGD优化器训练网络主干,学习率为1e-3,权值衰减率为1e-4,动量为0.9,批次大小为20,所有的图像都将resize至224×224再输入网络。

5. 实验结果及分析

  使用OCT数据集的训练集微调ResNet50的训练过程入图7(左)所示,训练10个Epochs的损失和准确率如图8所示。训练过程中会保留微调后的模型参数,在微调完成之后,加载微调后的模型参数训练PDBL模块,同时要保存ResNet50+PDBL的模型参数,在全部训练过程完成之后,加载ResNet50+PDBL模型对OCT数据集的测试集进行预测验证模型性能,结果如图7(右)所示。

在这里插入图片描述

图7. 微调ResNet50过程以及ResNet50+PDBL的训练及预测结果

在这里插入图片描述

图8. 微调ResNet50的训练损失和准确率可视化

  结合图7(左)和图8,可以发现在微调ResNet50过程中,模型损失一直在下降,同时准确率一直在上升,最低和最高分别达到0.0179和0.99381,这说明ResNet50的模型适应能力很强,适合用于OCT图像的分类,这得益于ImageNet的大规模数据训练出的预训练模型。图7(右)是在ResNet50基础上插入了PDBL模块后的训练和测试,可以发现在测试集上准确率达到了0.996,F1分数达到了0.996,这要比只使用ResNet50的结果要高一点点。这说明在模型框架中插入PDBL模块有利于提升模型的性能,原因在后续博客会详细讲解。虽然我们在测试集上得到一个非常高的分类准确率,但是仍有一些不足,比如在OCT图像预处理过程中并不能100%的确定前景区域,有时会单纯截取到背景区域作为感兴趣区域,这是不利于模型训练的。

参考文献

[1] Zhang X, Zhou X, Lin M, et al. Shufflenet: An extremely efficient convolutional neural network for mobile devices[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2018: 6848-6856.
[2] Tan M, Le Q. Efficientnet: Rethinking model scaling for convolutional neural networks[C]//International conference on machine learning. PMLR, 2019: 6105-6114.
[3] He K, Zhang X, Ren S, et al. Deep residual learning for image recognition[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2016: 770-778.
[4] https://github.com/hhyx/OCT-classification
[5] https://image-net.org/
[6] Han C, Lin J, Mai J, et al. Multi-layer pseudo-supervision for histopathology tissue semantic segmentation using patch-level classification labels[J]. Medical Image Analysis, 2022: 102487.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/359681.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Skywalking8.5.0-ES7 Rancher部署及ES高可用部署过程记录

背景 近期本司内部需要用到Skywalking进行链路追踪和日志收集,故记录下部署过程,方便后期学习与查询。 ElasticSearch高可用部署 ## 1.docker启动elasticsearch,并将内存设置的稍微大一些,然后进行端口和配置文件映射 docker run --name…

windows 安装Qt

下载 下载地址https://download.qt.io/,此文已5.7.0为例子。 根据图片依次选择即可。 安装 安装过程参考另一篇文章Ubuntu 安装 Qt5.7.0即可 配置环境变量 ps:我就是之前没配置环境变量,直接使用创建项目,项目源码直接运行是…

Shader Graph简介

使用着色器(shader)和材质(material),我们能够创造出非常多有趣的效果。除了Unity自带的shader外,还可以自己编写shader或使用其他人所编写的shader。编写shader通常需要我们了解shader编程语言的语法和相关…

IO流详解及常用方法

1.1. 什么是IO流IO流: Input/Output Stream流: 指的是一串流动的数据, 在数据在流中按照指定的方向进行流动。 实现数据的读取、写入的功能。1.2. IO流的使用场景使用File类, 只能做关于文件的操作, 获取属性、 创建文件、 删除文…

数字化时代,如何做好用户体验与应用性能管理

引言 随着数字化时代的到来,各个行业的应用系统从传统私有化部署逐渐转向公有云、行业云、微服务,这种变迁给运维部门和应用部门均带来了较大的挑战。基于当前企业 IT 运维均为多部门负责,且使用多种运维工具,因此,当…

[numpy算法复现]-第27节 Apriori算法原理(相关性)

文章目录 0. 结论1. 算法起源2. Apriori算法思想2.1 算法综述2.2 示例0. 结论 Apriori算法是常用的用于挖掘出数据关联规则的算法,它用来找出数据值中频繁出现的数据集合,找出这些集合的模式有助于我们做一些决策。比如在常见的超市购物数据集,或者电商的网购数据集中,如果…

公会发展计划(GAP)第三季

继前两季发布的公会发展计划取得成功之后,Yield Guild Games 现在推出了第三季的公会发展计划(GAP)。GAP 在第二季有了显著的增长,有超过 3000 个成就 NFT 被铸造。GAP 是以成就为导向的社区代币分配协议,下一次迭代将…

实验一 基于MATLAB语言的线性离散系统的Z变换分析法

实验一 基于MATLAB语言的线性离散系统的Z变换分析法 一、实验目的 1. 学习并掌握 Matlab 语言离散时间系统模型建立方法; 2.学习离散传递函数的留数分析与编程实现的方法; 3.学习并掌握脉冲和阶跃响应的编程方法;…

智慧校园:电子班牌+家长端小程序源码

说到智慧校园家长端微信小程序大家有多少了解呢?它有哪些优点和功能呢? 下面就来说说智慧校园家长端微信小程序的特色和优点。 1.学生通过闸机人脸、刷卡进出校,如出校则推送给家长小程序孩子已离校的信息,如进校则实时推送孩子已进校信息…

解决Visual Studio Code 热键冲突

因为最近很火的ChatGPT,更新了VSCode的版本,但是界面和配置有了一些变化,原来的热键也有所调整,在使用markdown的时候,enter键竟然都出现了冲突,在此记录一下操作步骤,非常简单。 报错如下&…

为什么要用数据库视图?

视图的定义 视图(View)是一种虚拟的表,其结构和数据来自于一个或多个基本表,可以被当作普通表一样进行查询操作,但实际上不存储任何数据。在数据库中,视图可以被看作是一种数据访问的方式,它可…

16.hadoop系列之MapReduce之MapTask与ReduceTask及Shuffle工作机制

1.MapTask工作机制 以上内容我们之前文章或多或少介绍过,就已网络上比较流行的该图进行理解学习吧 MapTask分为五大阶段 Read阶段Map阶段Collect阶段溢写阶段Merge阶段 2.ReduceTask工作机制 ReduceTask分为三大阶段 Copy阶段Sort阶段Reduce阶段 3.ReduceTask并…

eBPF双子座:天使or恶魔?

启示录 新约圣经启示录认为:恶魔其实本身是天使,但炽天使长路西法背叛了天堂,翅膀变成了黑色,坠落地狱,堕落成为恶魔。这些恶魔主宰著黑暗势力,阻碍人类与上帝沟通,无所不用其极。所以可以说天…

box-shadow详解

box-shadow详解 属性定义及使用说明 box-shadow属性可以设置一个或多个下拉阴影的框。 语法 box-shadow: h-shadow v-shadow blur spread color inset;注意:boxShadow 属性把一个或多个下拉阴影添加到框上。该属性是一个用逗号分隔阴影的列表,每个阴…

使用多种算法对sin函数进行拟合-学习记录

1.使用linear层拟合 原代码链接在这里,效果如下: 2.使用LSTM预测 原代码链接在这里,效果如下: 3.使用GAN拟合 忘记代码哪里找的了,不过效果很差。 4.使用LSTM-GAN 这个代码在GitHub上找的,然后改了改&…

3、内存管理

文章目录1、内存的基础知识1.1、什么是内存?1.2、进程的运行原理--指令1.3、逻辑地址 & 物理地址1.4、从写程序到程序运行1.5、装入模块到运行1.6、装入的三种方式--绝对装入1.7、装入的三种方式--静态重定位1.8、装入的三种方式--动态重定位(重定位…

移动WEB开发四、rem布局

零、文章目录 文章地址 个人博客-CSDN地址:https://blog.csdn.net/liyou123456789个人博客-GiteePages:https://bluecusliyou.gitee.io/techlearn 代码仓库地址 Gitee:https://gitee.com/bluecusliyou/TechLearnGithub:https:…

树的概念及结构

前言 什们是树?树是一种非线性的数据结构,它是由n(n>0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。树 (1)树的特点 有一个特殊的…

Blazor入门100天 : 身份验证和授权 (3) - DB改Sqlite

目录 建立默认带身份验证 Blazor 程序角色/组件/特性/过程逻辑DB 改 Sqlite将自定义字段添加到用户表脚手架拉取IDS文件,本地化资源freesql 生成实体类,freesql 管理ids数据表初始化 Roles,freesql 外键 > 导航属性完善 freesql 和 bb 特性 本节源码 https://github.com/…

采用aar方式将react-native集成到已有安卓APP

关于react-native和android的开发环境搭建、环境变量配置等可以查看官方文档。 官方文档地址 文章中涉及的node、react等版本: node:v16.18.1 react:^18.1.0 react-native:^0.70.6 gradle:gradle-7.2开发工具:VSCode和android studio 关于react-native和…