以自己的数据集处理为例,仅供参考。 1:初始数据集介绍:图像为tif格式,dat文件中取5个字段作为类别标签。如下:第一张图显示数据所在文件夹,第二张图显示文件夹中的tif图像,第三张图显示标签信息dat文件。
目前拥有的是没有整理的数据集。为了更好的送入神经网络训练和数据处理,需要对数据进行一系列的整理。 主要思路:将数据集整理成3个txt文档:images.csv(以0、1、2、3…序号形式保存tif图像路径信息)、classes.csv(以0、1、2、3…序号形式保存标签信息)、image_classes.csv(保存每个tif图像对应的标签信息) *
**实现:images.txt:
***存储tif图像的路径信息,方便读取图像时快速找到图像,读取图像矩阵信息。由于图片分布在不同的子文件夹下,为了方便查询,将路径保存成“子文件夹”+“图像名”形式。
def file_name(file_dir):
L = []
for root, dirs, files in os.walk(file_dir):
for file in files:
if file.startswith("ND") and file.endswith(".tif"):
file_path = os.path.join(root, file)
img_path = file_path.split('\\')[3] + "\\" + file_path.split('\\')[4]
L.append(img_path)
return L
首先定位目录,在该目录下查询以“ND”开头“.tif”结尾的名称,将其与子路径进行拼接,写入L列表内。最后采用pandas中的to_csv生成images.csv文件。
cd = pd.DataFrame(txt_name)
d.to_csv('.\\data\\images.csv', index=True, header=None, sep=' ')
生成csv文件如下:
classes.csv
由于定义的标签较少,直接将标签写成列表形式,通过to_csv生成csv文件。
image_classes.csv
目前获得数据分析信息为.dat形式,内容较多。且只有一部分信息以json格式展示,因此,提取一部分信息,另存为json形式:
def get_json(path, out_dir):
for root, dirs, files in os.walk(path):
for file in files:
fname = file.split('.')
file_name = fname[0] + '.json' # 生成新的json文件名称
newfile = os.path.join(out_dir, file_name)
file_path = os.path.join(root, file)
with open(file_path, 'r') as f:
lines = f.readlines()
outlines = lines[980:]
with open(newfile, 'w') as nf:
for line in outlines:
line = line.strip('#')
nf.write(line)
nf.close()
f.close()
从json中提取有用字段,分别获取图像对应编码和标签对应编码。
def getlist(path):
labels1_list = []
labels2_list = []
images_list = []
for root, dirs, files in os.walk(path):
for file in files:
if file.endswith('.json'):
filepath = os.path.join(root, file)
with open(filepath, 'r') as jf:
j_data = json.load(jf)
images = j_data['history']['subtraction']['initial_file']
images = images[1]['averaged_files'] # list类型
labels1 = j_data['analysis']['molecularWeight']['VolumeOfCorrelation']['Type']
labels2 = j_data['analysis']['molecularWeight']['ShapeAndSize']['Shape']
for i in range(len(class_L)):
if (class_L[i].split('_')[-1] == labels1):
for j in range(len(images)):
labels1_list.append(i)
if (class_L[i].split('_')[-1] == labels2):
for j in range(len(images)):
labels2_list.append(i)
for k in range(len(txt_name)):
for j in range(len(images)):
if txt_name[k].split("\\")[-1] == images[j][0]:
images_list.append(k)
jf.close()
return images_list, labels1_list, labels2_list
将图像列表,标签类型列表组合。按列写入csv文件。
def final_list (out_list):
img_label = []
for i in range(len(out_list)):
img_label.append(out_list[i])
return img_label
img_label = final_list(out_list)
with open('.\\data\\img_class.csv', 'w') as cf:
csvfile = csv.writer(cf, delimiter=' ')
for column in zip(*[i for i in img_label]):
csvfile.writerow(column)
cf.close()
得到csv文件: 至此得到三个csv文件。 数据加载,待续。。。
|