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

OCT 医学图像分类

目录

    • 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.

相关文章:

OCT 医学图像分类

目录1. OCT 图像分类2. OCT图像数据集3. OCT图像预处理4. 特征提取5. 实验结果及分析github地址: https://github.com/aishangcengloua/OCT_Classification 1. OCT 图像分类 视网膜光学相干断层扫描(OCT)是一种成像技术,用于捕获活体患者视网膜的高分辨率横截面。…...

华为OD机试 - 合并数组 | 机试题算法思路 【2023】

最近更新的博客 华为OD机试 - 简易压缩算法(Python) | 机试题算法思路 【2023】 华为OD机试题 - 获取最大软件版本号(JavaScript) 华为OD机试 - 猜字谜(Python) | 机试题+算法思路 【2023】 华为OD机试 - 删除指定目录(Python) | 机试题算法思路 【2023】 华为OD机试 …...

前端开发页面样式通用约定法则

代码组织 以组件为单位组织代码段;制定一致的注释规范;组件块和子组件块以及声明块之间使用一空行分隔,子组件块之间三空行分隔;如果使用了多个 CSS 文件,将其按照组件而非页面的形式分拆,因为页面会被重组,而组件只会被移动;良好的注释是非常重要的。请留出时间来描述…...

向上跳空缺口选股公式,选出回补后再启动的标的

一、向上跳空缺口选股公式 思路:先找出缺口,缺口前后有两根K线,缺口低价是前一根K线的最高价,缺口高价是后一根K线的最低价。(如上图)收盘价低于缺口低价,即实现缺口回补。回补缺口之后&#xf…...

【IoT】做短视频之前,你需要先做好内容定位

现在做内容无疑要从垂直领域入手,否则你就很难出圈。 干货类或者说垂直领域方向的内容,往往都偏向于枯燥,并且会涉及很多专业性的名词,读者理解起来会困难很多,阅读的兴趣也自然会降低。 这也是笔者个人开始做短视频…...

苏宁基于 AI 和图技术的智能监控体系的建设

汤泳,苏宁科技集团智能监控与运维产研中心总监,中国商业联合会智库顾问,致力于海量数据分析、基于深度学习的时间序列分析与预测、自然语言处理和图神经网络的研究。在应用实践中,通过基于 AI 的方式不断完善智能监控体系的建设&a…...

3、内存管理

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

【蓦然回首忆Java·基础卷Ⅰ】

文章目录开端通过引用创建对象Java的数据存储方式基本类型包装类和高精度数字操作符自动递增和自动递减老生常谈的问题:和equals()如何重写equals方法?短路字面量科学计数法位运算类型转换初始化和清理方法的重载方法的重写无参构造器this与构造器垃圾收…...

类属性和对象属性

6.3 类属性和对象属性 在类定义中,属性按照归属分为对象属性、类属性。按照调用的私密性分为一般属性和私有属性。 6.3.1 类属性和对象属性 对象属性是最常用到的一种属性。即使我们对上面的类:MyClass1实例化了一个mc的对象,mc对象也不能…...

【TensorFlow 】查看Tensorflow和python对应版本、将现有的TensorFlow更新到指定的版本

1、查看Tensorflow和python对应版本 1.1这里我是在TensorFlow官方网址产看的 1、打开官方网址 https://pypi.org/project/tensorflow/1.1.0rc2/#files但是这个网址好像打不开,点击会出现这样 问题不大 输入Tensorflow然后点击搜索,就会跳转到https://p…...

VO、DTO、BO、PO、DO区别

VO、DTO、BO、PO、DO区别 VO:(View Object)视图对象,一般位于Controller层,用于展示视图。DTO:(Data Transfer Object)数据传输对象, 即RPC 接口请求或传输出去的对象&a…...

速看!!!一套能直接拿捏大厂面试官的软件测试面试宝典

3.5.1、说说你们是怎么做自动化测试的☆☆☆☆☆我们的自动化测试主要是web UI的自动化测试,主要用于冒烟测试和主要功能的回归测试或者主流浏览器的兼容性测试,作为手工测试的一种补充,提高测试效率,减少一些重复性的测试工作。1…...

超级完整 的 Maven 讲解 以及私服搭建

第一章 Maven 简介 1.1、Maven 概述 Maven 是一款基于 Java 平台的项目管理和整合工具,它将项目的开发和管理过程抽象成一个项目对象模型(POM)。开发人员只需要做一些简单的配置,Maven 就可以自动完成项目的编译、测试、打包、发…...

数据结构之算法的时间复杂度和空间复杂度

本章重点: 1.算法效率 2.时间复杂度 3.空间复杂度 4. 常见时间复杂度以及复杂度oj练习 目录 1.算法效率 1.2算法的复杂度 2.时间复杂度 2.1 时间复杂度的概念 2.2 大O的渐进表示法 2.3常见时间复杂度计算举例 3.空间复杂度 4. 常见复杂度对比 5.复杂度…...

【微信小程序】使用页面跳转并携带多个特定参数

前言在我们项目的搭建时常常会用到页面跳转,在微信小程序中也支持多个跳转类型。如(wx.switchTab\wx.reLauch\wx.redirectTo\wx.navigateTo\wx.navigateBack)等等,每一个路由API都是有相对应的特定跳转功能,在这里我就不赘述了。微信开发者文…...

CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子

CVPR 2021 | Involution:超越convolution和self-attention的神经网络算子 论文地址:https://arxiv.org/pdf/2103.06255v2.pdf 代码地址:https://github.com/d-li14/involution Involution卷积,文章描述说它比convolution更轻量更高效,形式上比self-attention更加简洁,可以…...

11 OpenCV图像识别之人脸识别

文章目录1 Eigenfaces1.1 建模流程1.2 示例代码2 Fisherfaces2.1 建模流程2.2 示例代码3 Local Binary Histogram3.1 建模流程3.2 示例代码OpenCV 提供了三种人脸识别方法:Eigenfaces Eigenfaces是一种基于PCA(Principal Component Analysis&#xff0c…...

ssh设置:免密登入、修改默认端口、禁止root登入、限制错误登入次数

服务器: 客户端: 在下面不再说明服务器和客户端。 1.修改ssh默认端口 是在服务器中设置。 该设置涉及三部分:sshd配置文件修改/增加新端口、Selinux添加新端口、Firewall开放新端口。 vim /etc/ssh/sshd.config,找到#Port行&…...

【Fastdfs】| 入门连续剧——安装

作者:狮子也疯狂 专栏:《spring开发》 坚持做好每一步,幸运之神自然会降临在你的身上 目录一. 🦁 前言Ⅰ. 🐇 为什么要使用分布式文件系统?1.1 单机系统 vs 独立文件服务器1.2 分布式文件系统1.3 FastDFS引…...

【ESP32-S3】Pycharm 使用 microPython 教程(避坑)

一、下载Pycharm等操作 1.百度云下载链接 链接:https://pan.baidu.com/s/1tkbMzS5B_v-Cn4WQlTqS3Q?pwd0108 提取码:0108 2.安装 按照压缩包中的教程来,你懂的。 二、配置microPython环境 1.安装 microPython 插件 1.1 File > Sett…...

RocketMQ延迟消息机制

两种延迟消息 RocketMQ中提供了两种延迟消息机制 指定固定的延迟级别 通过在Message中设定一个MessageDelayLevel参数,对应18个预设的延迟级别指定时间点的延迟级别 通过在Message中设定一个DeliverTimeMS指定一个Long类型表示的具体时间点。到了时间点后&#xf…...

大话软工笔记—需求分析概述

需求分析,就是要对需求调研收集到的资料信息逐个地进行拆分、研究,从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要,后续设计的依据主要来自于需求分析的成果,包括: 项目的目的…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

深入浅出:JavaScript 中的 `window.crypto.getRandomValues()` 方法

深入浅出:JavaScript 中的 window.crypto.getRandomValues() 方法 在现代 Web 开发中,随机数的生成看似简单,却隐藏着许多玄机。无论是生成密码、加密密钥,还是创建安全令牌,随机数的质量直接关系到系统的安全性。Jav…...

12.找到字符串中所有字母异位词

🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)

骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...

Caliper 配置文件解析:config.yaml

Caliper 是一个区块链性能基准测试工具,用于评估不同区块链平台的性能。下面我将详细解释你提供的 fisco-bcos.json 文件结构,并说明它与 config.yaml 文件的关系。 fisco-bcos.json 文件解析 这个文件是针对 FISCO-BCOS 区块链网络的 Caliper 配置文件,主要包含以下几个部…...

Python竞赛环境搭建全攻略

Python环境搭建竞赛技术文章大纲 竞赛背景与意义 竞赛的目的与价值Python在竞赛中的应用场景环境搭建对竞赛效率的影响 竞赛环境需求分析 常见竞赛类型(算法、数据分析、机器学习等)不同竞赛对Python版本及库的要求硬件与操作系统的兼容性问题 Pyth…...

《信号与系统》第 6 章 信号与系统的时域和频域特性

目录 6.0 引言 6.1 傅里叶变换的模和相位表示 6.2 线性时不变系统频率响应的模和相位表示 6.2.1 线性与非线性相位 6.2.2 群时延 6.2.3 对数模和相位图 6.3 理想频率选择性滤波器的时域特性 6.4 非理想滤波器的时域和频域特性讨论 6.5 一阶与二阶连续时间系统 6.5.1 …...

数据库——redis

一、Redis 介绍 1. 概述 Redis(Remote Dictionary Server)是一个开源的、高性能的内存键值数据库系统,具有以下核心特点: 内存存储架构:数据主要存储在内存中,提供微秒级的读写响应 多数据结构支持&…...