当前位置: 首页 > 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…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

JavaSec-RCE

简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性&#xff0c…...

蓝牙 BLE 扫描面试题大全(2):进阶面试题与实战演练

前文覆盖了 BLE 扫描的基础概念与经典问题蓝牙 BLE 扫描面试题大全(1):从基础到实战的深度解析-CSDN博客,但实际面试中,企业更关注候选人对复杂场景的应对能力(如多设备并发扫描、低功耗与高发现率的平衡)和前沿技术的…...

Redis数据倾斜问题解决

Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...

AI书签管理工具开发全记录(十九):嵌入资源处理

1.前言 📝 在上一篇文章中,我们完成了书签的导入导出功能。本篇文章我们研究如何处理嵌入资源,方便后续将资源打包到一个可执行文件中。 2.embed介绍 🎯 Go 1.16 引入了革命性的 embed 包,彻底改变了静态资源管理的…...

鸿蒙DevEco Studio HarmonyOS 5跑酷小游戏实现指南

1. 项目概述 本跑酷小游戏基于鸿蒙HarmonyOS 5开发,使用DevEco Studio作为开发工具,采用Java语言实现,包含角色控制、障碍物生成和分数计算系统。 2. 项目结构 /src/main/java/com/example/runner/├── MainAbilitySlice.java // 主界…...

蓝桥杯 冶炼金属

原题目链接 🔧 冶炼金属转换率推测题解 📜 原题描述 小蓝有一个神奇的炉子用于将普通金属 O O O 冶炼成为一种特殊金属 X X X。这个炉子有一个属性叫转换率 V V V,是一个正整数,表示每 V V V 个普通金属 O O O 可以冶炼出 …...

如何更改默认 Crontab 编辑器 ?

在 Linux 领域中,crontab 是您可能经常遇到的一个术语。这个实用程序在类 unix 操作系统上可用,用于调度在预定义时间和间隔自动执行的任务。这对管理员和高级用户非常有益,允许他们自动执行各种系统任务。 编辑 Crontab 文件通常使用文本编…...

解析奥地利 XARION激光超声检测系统:无膜光学麦克风 + 无耦合剂的技术协同优势及多元应用

在工业制造领域,无损检测(NDT)的精度与效率直接影响产品质量与生产安全。奥地利 XARION开发的激光超声精密检测系统,以非接触式光学麦克风技术为核心,打破传统检测瓶颈,为半导体、航空航天、汽车制造等行业提供了高灵敏…...

【安全篇】金刚不坏之身:整合 Spring Security + JWT 实现无状态认证与授权

摘要 本文是《Spring Boot 实战派》系列的第四篇。我们将直面所有 Web 应用都无法回避的核心问题:安全。文章将详细阐述认证(Authentication) 与授权(Authorization的核心概念,对比传统 Session-Cookie 与现代 JWT(JS…...