2015_BOE_Chiu2 杜克大学oct数据集
数据集的获取与读取
这是一个用来做oct层分割和积液分割的数据集,格式为mat。一共有10位受试者的oct图,一位有61张,总共10*61=610张oct照片。
下载地址
http://www.duke.edu/~sf59/Datasets/2015_BOE_Chiu2.zip
数据集下载不了的可以留言我看到就回
数据集读取
下载解压后,使用matlab查看
查看某一个subject的数据
load('Subject_01.mat')
可以看到Subject_01包含了7类数据
图片–images
层的人工标注–manualLayers1,manualLayers2
层的自动标注–automaticLayersDME,automaticLayersNormal
积液的人工标注–manualFluid1,manuaFluid2
积液的自动标注–automaticFluidDME
以images为例子,496×768×61,意味着里面有61张496×768的图片。
图片的查看
frame_number=6;%取值为1-61
figure;imagesc(images(:,:,frame_number));colormap(gray)
python获取图片与积液的标注
图像与积液都可以直接保存得到,只需更改类别即可,需要关注的是,积液的值是[0,1],保存之前需要讲值转换为[0,255]才可以看见积液,否则保存下来的图片是黑的。
#对BOE .MAT格式文件处理成图片
import cv2
import scipy.io as scio
import os
def mkr(save_path):
if not os.path.exists(save_path):
os.makedirs(save_path)
srcdst = 'BOE/2015_BOE_Chiu'
path = os.listdir(srcdst)
imgdst = 'BOE/img/'
mkr(imgdst)
for mat in path:
filename, _ = os.path.splitext(mat)#将路径的文件名和后缀名分割
print('名称:',filename)
mat = os.path.join(srcdst, mat)
array_struct = scio.loadmat(mat)
img_data = array_struct['images'] # 可根据需要改类别
img_count = img_data.shape[2] #图像个数
for i in range(img_count):
cv2.imwrite(imgdst + filename+'_'+str(i+1)+ '.jpg', img_data[:, :, i])
层标注的获取
层标注不太一样,是8*768,意味着给的不是像素值,给的是每一层标注的坐标值,值得注意的是,并不是所有的图片都有标注,里面有空值。
1.查看
随机挑选一个subject
load("Subject_01.mat");
frame_number=10;%一共61张,随机挑选一张
a=manualLayers1(:,:,frame_number)
figure;imagesc(images(:,:,frame_number));colormap(gray);
hold on;
for i = 1:8
plot(manualLayers1(i,:,frame_number),'b')%一共8层
end
结果:如下所示,没有画出来,只有图片,不显示层标注,查看a的值 为空值
可知这张图片没有给出层标注,因此并不是61张都有层标注,需要先进行判断,如第二步所示。
以下为坐标不是空值的效果,可知所给坐标值的横坐标不是从0开始,也不是768结束。
2.获取有分层坐标的图片的下标
def get_valid_idx(manualLayer):
idx = []
num =
for i in range(0,61):#61是一个subject有61张,可根据需要更改
temp = manualLayer[:,:,i]
if np.sum(temp) != 0:
idx.append(i)
return idx
file_path="/.../"
for dirName, subdirList, fileList in sorted(os.walk(file_path)):
for filename in fileList:
print('正在处理:',filename[:-4])
if ".mat" in filename.lower():
mat_contents = loadmat(file_path + filename)
layers1 =np.array(mat_contents['manualLayers1'], dtype=np.uint16)
valid_idx = get_valid_idx(layers1)
print(valid_idx)
3.烂尾了