DRIVE视网膜血管分割——基于像素点分割(BP网络和CNN网络)

本文介绍了基于像素点分割的BP网络和CNN网络在DRIVE数据集上的视网膜血管分割应用。讨论了数据预处理、BP网络构建与训练,以及遇到的Batchsize设置、多GPU运算等问题。同时提到了模型训练后的预测问题及解决策略。
摘要由CSDN通过智能技术生成


前言

视网膜血管分割是一种计算机视觉任务,旨在从眼底图像中分割出视网膜图像的血管。这个任务对于糖尿病视网膜病变等眼部疾病的早期诊断和治疗至关重要。视网膜血管分割的方法主要有两种:基于规则的方法和基于深度学习的方法。基于规则的方法通常需要手工设计特征提取器和分类器,而基于深度学习的方法则利用深度神经网络来自动地学习特征并进行分类。近年来,基于深度学习的方法在视网膜血管分割中取得了许多优秀的成果,成为当前的主流方法。

像素点分割和语义分割

基于像素的分割是指将图像中的每一个像素都进行分类,通常会生成一个与原始图像大小相同的分割结果图,每一个像素点都被标记为属于哪一类别。这种方法适用于需要对图像进行详细分类的任务,例如边缘检测或者物体检测。而语义分割则是将图像中的每一个像素都赋予一个语义标签,即将图像中每一个像素点都标注为属于哪一个物体类别或者场景类别。这种方法适用于需要对图像进行高层次理解的任务,例如自动驾驶中的路面识别、物体分割等。
总体来说,基于像素的分割和语义分割都是图像分割技术的一种,但是它们的目标和应用场景有所不同。

DRIVE数据集

DRIVE(Digital Retinal Images for Vessel Extraction)是一个常用的眼底图像数据集,用于研究视网膜血管分割算法。该数据集包含了40个具有挑战性的视网膜图像,其中20个用于训练,另外20个用于测试。每张图像的大小为565×584像素,并且包含手动标注的视网膜血管。这些标注提供了血管的位置和形状信息,可以用于训练和评估血管分割算法。DRIVE数据集在医学图像处理领域被广泛使用,是许多血管分割算法的基准数据集之一。


一、BP网络分割

代码注释写的很详细,这里就不过多介绍了。

1、数据预处理

这里的工作主要是把DRIVE数据集的训练和测试数据读进来,然后把图片灰度化、对图片进行填充、根像素点切片(9*9)、归一化等。

import os
import cv2
import json
import torch
from PIL import Image
import numpy as np
import torch.nn as nn
from torch.utils.data import Dataset, DataLoader

class DriveDataset(Dataset):
    def __init__(self, root: str, train: bool, size=9):
        super(DriveDataset, self).__init__()
        self.size = size
        self.flag = "training" if train else "test"             # 选择训练还是测试
        data_root = os.path.join(root, "DRIVE", self.flag)      # 数据集路径拼接
        assert os.path.exists(data_root), f"path '{data_root}' does not exists."  # 判断路径是否存在

        img_names = [i for i in os.listdir(os.path.join(data_root, "images")) if i.endswith(".tif")] # 遍历images路径下的图片名
        self.img_list = [os.path.join(data_root, "images", i) for i in img_names]                    # images图片路径列表
        self.manual = [os.path.join(data_root, "1st_manual", i.split("_")[0] + "_manual1.gif")       # 1st_manual图片路径列表
                       for i in img_names]
        # check files
        for i in self.manual:     # 判断1st_manual下的图片是否存在
            if os.path.exists(i) is False:
                raise FileNotFoundError(f"file {i} does not exists.")

        data = []    # 总数据数组
        target = []  # 标签图片数组
        for image_filename, label_filename in zip(self.img_list, self.manual):  # 遍历每一张图片和对应的标签图片
            image = Image.open(image_filename).convert('L') # 读取图片、转灰度
            label = Image.op
  • 1
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Chaoy6565

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值