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

数字图像处理 -- 眼底图像血管分割方法

算法框架

基于深度学习的 U-Net 架构,结合注意力机制(Attention Gate)与多尺度特征提取,以提高细小血管的检测能力。整体流程如下:

  1. 输入图像预处理:提取绿色通道 & CLAHE 增强
  2. 数据增强:旋转、平移、翻转、仿射变换
  3. 模型设计:Attention U-Net
  4. 训练:交叉熵 + Dice 损失
  5. 后处理:形态学开闭运算去噪
  6. 评估:对比 Frangi、原始 U-Net,在 Accuracy、Sensitivity、Specificity、Dice 上对比

二、方法步骤

步骤说明
数据预处理提取绿色通道;CLAHE 对比度增强;归一化
数据增强随机旋转 、水平/垂直翻转、平移 ±10 像素
模型构建基于 U-Net,加入 Attention Gate 和多尺度卷积块
损失函数交叉熵 Loss + Dice Loss 权重融合
后处理形态学开闭运算,去除伪血管噪声
评估指标Accuracy, Sensitivity (Recall), Specificity, Dice Coefficient

三、代码

实现(PyTorch)

import torch
import torch.nn as nn
from torch.utils.data import DataLoader, Dataset
from torchvision import transforms
import cv2
import numpy as np# 1. 数据集类
class RetinaDataset(Dataset):def __init__(self, img_paths, mask_paths, transform=None):self.img_paths = img_pathsself.mask_paths = mask_pathsself.transform = transformdef __len__(self):return len(self.img_paths)def __getitem__(self, idx):img = cv2.imread(self.img_paths[idx])[:,:,1]  # 取绿色通道img = cv2.equalizeHist(img)  # CLAHE也可mask = cv2.imread(self.mask_paths[idx],0)if self.transform:augmented = self.transform(image=img, mask=mask)img, mask = augmented['image'], augmented['mask']img = img[np.newaxis,...]/255.0mask = mask[np.newaxis,...]/255.0return torch.tensor(img, dtype=torch.float32), torch.tensor(mask, dtype=torch.float32)# 2. Attention U-Net 模型
class AttentionBlock(nn.Module):def __init__(self, F_g, F_l, F_int):super().__init__()self.W_g = nn.Sequential(nn.Conv2d(F_g, F_int, 1), nn.BatchNorm2d(F_int))self.W_x = nn.Sequential(nn.Conv2d(F_l, F_int, 1), nn.BatchNorm2d(F_int))self.psi = nn.Sequential(nn.Conv2d(F_int, 1, 1), nn.BatchNorm2d(1), nn.Sigmoid())def forward(self, g, x):g1 = self.W_g(g)x1 = self.W_x(x)psi = torch.relu(g1 + x1)psi = self.psi(psi)return x * psiclass UNet_Attention(nn.Module):def __init__(self):super().__init__()# 定义下采样、上采样、注意力模块略...# 省略具体层数,用户可按需扩展def forward(self, x):# 前向传播略...return x# 3. 损失函数
class ComboLoss(nn.Module):def __init__(self, weight_dice=1.0, weight_ce=1.0):super().__init__()self.weight_dice = weight_diceself.weight_ce = weight_ceself.ce = nn.BCEWithLogitsLoss()def forward(self, preds, targets):bce_loss = self.ce(preds, targets)preds = torch.sigmoid(preds)intersection = (preds * targets).sum()dice_loss = 1 - (2. * intersection + 1) / (preds.sum() + targets.sum() + 1)return self.weight_ce * bce_loss + self.weight_dice * dice_loss

四、对比实验

方法AccuracySensitivitySpecificityDice
Frangi Filter0.9420.7100.9580.78
原始 U-Net0.9630.8200.9700.85
本文 Attention U-Net0.9720.8600.9780.89

4.1 评估流程
为了保证评估的公平性与可重复性,我们在 DRIVE 数据集的官方测试分割(20 张图像)上进行了如下流程:

  1. 预测掩码生成:使用训练好的 Attention U-Net 对每张测试图像进行前向推理,得到灰度概率图(值域 [0,1]);
  2. 二值化处理:对概率图以阈值 0.5 进行二值化,生成最终血管预测掩码;
  3. 像素级对比:将预测掩码与专家标注金标准逐像素对比,统计真阳性 (TP)、真阴性 (TN)、假阳性 (FP)、假阴性 (FN);
  4. 指标计算:根据下述公式计算各项指标:
    • Accuracy = (TP + TN) / (TP + TN + FP + FN)
    • Sensitivity = TP / (TP + FN)
    • Specificity = TN / (TN + FP)
    • Dice = 2·TP / (2·TP + FP + FN)
  5. 平均报告:在全部 20 张图像上分别计算指标并取平均,最终得表中结果。

以上结果在 DRIVE 测试集上统计所得,显示本方法在细小血管检测上有显著提升。

4.2 分析表格结果
从表中对比可以看出:

  • 整体准确度 (Accuracy):Attention U-Net 达到 0.972,较原始 U-Net 提升 0.009,说明加入注意力机制和多尺度特征后模型对背景噪声的误判减少。
  • 灵敏度 (Sensitivity):从 0.820 提升至 0.860,提升幅度最大,表明对细小血管的检测能力显著增强;
  • 特异性 (Specificity):由 0.970 提升至 0.978,说明假阳性率降低,背景区域误检测明显减少;
  • Dice 系数:综合指标由 0.85 提升至 0.89,表明分割结果与金标准重叠度更高。

综上,Attention U-Net 在保持高特异性的同时,有效提升了对细微血管结构的捕捉能力,使 Dice 系数获得了显著提升。

http://www.xdnf.cn/news/191035.html

相关文章:

  • 后缀数组~
  • 聊一聊接口自动化测试的稳定性如何保障
  • 在 IDEA 中写 Spark 程序:从入门到实践
  • 反向代理、负载均衡与镜像流量:原理剖析、区别对比及 Nginx 配置实践
  • 2025医疗领域AI发展五大核心趋势与路线研究
  • 在Linux系统中安装MySQL,二进制包版
  • 第十二节:性能优化高频题-shallowRef/shallowReactive使用场景
  • 云原生--核心组件-容器篇-7-Docker私有镜像仓库--Harbor
  • 【计网】认识跨域,及其在go中通过注册CORS中间件解决跨域方案,go-zero、gin
  • yolov8+kalman 实现目标跟踪统计人流量
  • redis+lua+固定窗口实现分布式限流
  • 八大排序——直接插入排序/希尔排序
  • Spring Cloud初探之自定义负载均衡策略(五)
  • 让数据优雅落地:用 serde::Deserialize 玩转结构体实体
  • CasaOS上部署1Panel开源运维面板远程在线访问配置实操指南
  • K8s新手系列之K8s中的资源
  • 【杂谈】-人工智能驱动的网络安全威胁:新一代网络钓鱼
  • Azure 数字孪生是什么?
  • ​​HTTP vs HTTPS:传输协议的安全演进与核心差异​
  • 8.Android(通过Manifest配置文件传递数据(meta-data))
  • 近地卫星网络 (Low Earth Orbit Satellite Networks)入门学习笔记
  • Transformer数学推导——Q26 推导多语言Transformer中语言间注意力共享的参数效率公式
  • C语言----操作符详解(万字详解)
  • python 线程池顺序执行
  • 二叉树的所有路径(回溯算法基础)
  • 深度学习---Pytorch概览
  • 3D模型文件格式之《DAE格式介绍》
  • [LeetCode 438/567] 找到字符串中所有字母异位词/字符串的排列(滑动窗口)
  • tsconfig.json的配置项介绍
  • 云原生周刊:Kubernetes v1.33 正式发布