最近要参照论文 基于深度学习的眼底图像血管分割方法研究_谢林培 复现一个小实验,用深度学习的方法分割识别眼底图像中的血管,数据下载了DRIVE眼底图像数据库中的数据。
DRIVE数据说明:
DRIVE 数据库是由 N iemeijer 等人收集而成,里面有 40 张彩色眼底图像,训练集和测试集各包含 20 张,图像尺寸均为 565×584(单位为像素)。此外,每一张彩色眼底图像都配有显示有效区域的二值图像 mask,另外训练集中还有对应的第一专家标注的眼底血管二值图(即第一专家结果),测试集中还有对应第一和第二两位专家标注的眼底血管二值图(即第一专家结果和第二专家结果)。
DRIVE眼底血管图像如下图所示:
为了便于网络处理,首先要对565*584的图像进行裁剪,并且选择图片的绿色通道来进行识别(绿色通道相对来说血管更清晰),选择以横向4个像素为一个步长,纵向5个像素为一个步长将图片裁剪为29*29的图像块,最终一个眼底图像可以得到15120个图像块,以下是操作流程:
#使用opencvhe numpy pillow import cv2 import numpy as np #读取眼底图像 image = cv2.imread('data/21_training.tif') #得到图像的绿色通道 b, g, r = cv2.split(image) cv2.imwrite('data/masked_g.tif',g)
from PIL import Image im = Image.open('data/masked_g.tif') # 进行图像裁剪,传入一个元组参数,元组里的元素分别是:(距离图片左边界距离x, # 距离图片上边界距离y,距离图片左边界距离+裁剪框宽度x+w,距离图片上边界距离+裁剪框高度y+h) x = 0 y = 0 w = 29 h = 29 #记录行数和列数 row = 0 col = 0 #纵向步长为5 for i in range(0,555+1,5): row = row + 1 #横向步长为4 for j in range(0,536+1,4): col = col + 1 #使用crop方法进行裁剪 region = im.crop((j, i, j + w, i + h)) region.save('result/1/%d_%d.tif'%(row,col)) print('图片%d_%d.tif裁剪成功'%(row,col)) col = 0
裁剪结果如下:
接下来再用逆向过程合成一下这些图像块,验证一下分割是否正确:
from PIL import Image #新建一个图像,元组传入图像的宽和高 target = Image.new('L', (565, 584)) #读取图片 xi = 0 yi = 29 for i in range(1,113): imagefile = [] if i == 1: #读取第一行图片,第一个图片29*29,其余图片4*29 for j in range(1, 136): if j == 1: imagefile.append(Image.open('results/21/%d_1.tif' % i)) else: imagefile.append(Image.open('results/21/%d_%d.tif' % (i,j)).crop((25, 0, 29, 29))) #拼凑原图的第一行 x = 0 for n in range(len(imagefile)): if n == 0: target.paste(imagefile[0], (x, 0)) x = x + 29 else: target.paste(imagefile[n], (x, 0)) x = x + 4 imagefile.clear() else: #读取2-112行图片,第一个图片29*5,其余图片4*5 for j in range(1, 136): if j == 1: imagefile.append(Image.open('results/21/%d_1.tif'%i).crop((0,24,29,29))) else: imagefile.append(Image.open('results/21/%d_%d.tif' % (i,j)).crop((25, 24, 29, 29))) #拼凑 for n in range(len(imagefile)): if n == 0: target.paste(imagefile[0], (xi,yi)) xi = xi+29 else: target.paste(imagefile[n], (xi,yi)) xi = xi+4 imagefile.clear() xi = 0 yi = yi+5 target.save('results/21.tif', quality = 100)
完美合成原图,分割成功!