【Segment Anything Model】做分割的專(zhuān)欄鏈接,歡迎來(lái)學(xué)習(xí)。
【博主微信】cvxiaoyixiao
本專(zhuān)欄為公開(kāi)數(shù)據(jù)集的介紹和預(yù)處理,持續(xù)更新中。
2023年11月2日更新補(bǔ)充
跟我要處理好的數(shù)據(jù)集的,我都給了。請(qǐng)自行注意檢查數(shù)據(jù)集是否是你想要的,我只處理了原數(shù)據(jù)集的第一部分
也就是frame01部分。并且測(cè)試集 現(xiàn)在是RGBA圖像,可以自行轉(zhuǎn)化為L(zhǎng)灰度圖像。
def convert_RGBA2L():
from PIL import Image
import os
path = "ACDC_dataset/testing/label"
for i in os.listdir(path):
old_path = os.path.join(path, i)
rgba_image = Image.open(old_path)
gray_image = rgba_image.convert("L")
new_name = os.path.splitext(i)[0] + ".png" # 更改擴(kuò)展名為.png
new_path = os.path.join(path, new_name)
gray_image.save(new_path, "PNG") # 指定保存格式為PNG
1?? ACDC數(shù)據(jù)集介紹
他是一個(gè)
多類(lèi)別的
心臟3D MRI影像數(shù)據(jù)集`,2017年ACDC挑戰(zhàn)賽(Automated Cardiac Diagnosis
Challenge)。
原數(shù)據(jù)集獲取,網(wǎng)盤(pán)永久有效:
鏈接:https://pan.baidu.com/s/1F4Xq1crtUSmFcSKxwO4Eaw?pwd=ejfa 提取碼:ejfa
–來(lái)自百度網(wǎng)盤(pán)超級(jí)會(huì)員V6的分享
2?? ACDC數(shù)據(jù)集樣例
首先夸夸?? ,ACDC數(shù)據(jù)集存放格式非常規(guī)律?? ,數(shù)據(jù)質(zhì)量非常高?? 清晰了分為3類(lèi)別。
training里有100例患者,testing里有50例患者。每個(gè)nii的切片個(gè)數(shù)不同根據(jù)勾畫(huà)的腫瘤。
Info
是媒體信息patient001_4d.nii.gz
是全部的切片,我也不知道從醫(yī)學(xué)上怎么描述,就是這個(gè)患者的立體影像,包括沒(méi)有腫瘤的部分patient001_frame01.nii.gz
是一個(gè)時(shí)期nii影響的壓縮包patient001_frame01_gt.nii.gz
對(duì)應(yīng)patient001_frame01.nii.gz的腫瘤勾畫(huà)的label的壓縮包。用四種像素對(duì)應(yīng)了四個(gè)類(lèi)別包括背景。patient001_frame12.nii.gz
是統(tǒng)一患者另一時(shí)期的影像patient001_frame12_gt.nii.gz
是對(duì)應(yīng)的label總之每個(gè)患者都有一個(gè)整體影像,還有兩個(gè)不同成像和對(duì)應(yīng)label。以下是打開(kāi)之后的影像圖。
3?? 預(yù)處理ACDC目標(biāo)
目標(biāo):
處理ACDC的nii.gz數(shù)據(jù)集到VOC格式的2d的png圖片
VOC格式 這篇文章有講直達(dá)
例如:
將patient001_frame01.nii.gz處理成幾張png作為網(wǎng)絡(luò)image的輸入。將patient001_frame01_gt.nii.gz處理成幾張png作為label。只處理了training的100例患者,把training當(dāng)成了整個(gè)集合劃分了訓(xùn)練測(cè)試。并且只關(guān)心了frame01第一階段
,第二個(gè)階段的未關(guān)心。只關(guān)心了留下的部分。夠了。
4?? 處理結(jié)果樣圖
處理結(jié)果樣圖:
img轉(zhuǎn)為jpg label轉(zhuǎn)為png 并且像素為0-3. 0代表背景,1-3代表分類(lèi)。label圖像素太小,這里看不出來(lái),可以看第三張數(shù)組圖
5?? 代碼
事先準(zhǔn)備好VOC文件夾文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-714918.html
"""
處理官網(wǎng)下載的ACDC到網(wǎng)絡(luò)要求的VOC格式,按需調(diào)用
author: cvxiayixiao
Wechat: cvxiayixiao
"""
import os
from os.path import join
import nibabel as nib
import gzip
import shutil
import matplotlib.pyplot as plt
import numpy as np
ori_ACDC_train_path = './ACDC_challenge_20170617/training'
def niigz2nii():
"""
解壓每個(gè)患者的01階段的nii.gz 和 gt.nii.gz 到輸入文件夾"ACDC_nii"
"""
input_path = ori_ACDC_train_path
# 處理image
# target='frame01.nii'
# output_path = 'ACDC_nii/images'
# 處理gt
target = 'frame01_gt.nii'
output_path = 'ACDC_nii/labels'
for patient in os.listdir(input_path):
# ACDC_challenge_20170617/training/patient001
patient_path = join(input_path, patient)
for niigz in os.listdir(patient_path):
if target in niigz:
niigzpath = join(patient_path, niigz)
new_nii_path = join(output_path, niigz)
shutil.copy(niigzpath, new_nii_path)
# niigz2nii()
def convert_nii_to_jpg():
'''
將ACDC_nii/images中的nii轉(zhuǎn)到VOCjpg中
:return:
'''
image_num = 0
nii_path = "./ACDC_nii/images"
output_dir = "./VOCdevkit/VOC2007/JPEGImages"
for patient in os.listdir(nii_path):
patient_path = join(nii_path, patient)
for one in os.listdir(patient_path):
one_patient_nii_path = join(patient_path, one)
# 加載 .nii 文件
nii_img = nib.load(one_patient_nii_path)
data = nii_img.get_fdata()
# 遍歷數(shù)據(jù)的每個(gè)切片,并保存為 .png 文件
for i in range(data.shape[2]):
image_num += 1
# 獲取當(dāng)前切片數(shù)據(jù)
slice_data = data[:, :, i]
# 創(chuàng)建輸出文件路徑
num = f"{image_num}".zfill(6)
output_path = os.path.join(output_dir, f'{patient}_{num}.jpg')
# 以灰度圖像格式保存切片數(shù)據(jù)為 .png 文件
plt.imsave(output_path, slice_data, cmap='gray')
# convert_nii_to_jpg()
def convert_nii_to_png():
'''
將ACDC_nii/labels中的nii轉(zhuǎn)到ACDC_nii/tmp_png_label中
此時(shí)的像素是原label 中的像素,不是網(wǎng)絡(luò)中的分類(lèi)像素,還需要一部轉(zhuǎn)換
:return:
'''
image_num = 0
nii_path = "./ACDC_nii/labels"
output_dir = "./tmp"
for patient in os.listdir(nii_path):
patient_path = join(nii_path, patient)
for one in os.listdir(patient_path):
one_patient_nii_path = join(patient_path, one)
# 加載 .nii 文件
nii_img = nib.load(one_patient_nii_path)
data = nii_img.get_fdata()
# 遍歷數(shù)據(jù)的每個(gè)切片,并保存為 .png 文件
for i in range(data.shape[2]):
image_num += 1
# 獲取當(dāng)前切片數(shù)據(jù)
slice_data = data[:, :, i]
# 創(chuàng)建輸出文件路徑
num = f"{image_num}".zfill(6)
output_path = os.path.join(output_dir, f'{patient}_{num}.png')
# 以灰度圖像格式保存切片數(shù)據(jù)為 .png 文件
plt.imsave(output_path, slice_data, cmap='gray')
from PIL import Image
def turnto255():
from PIL import Image
from PIL import Image
for i in os.listdir("tmp"):
output_path = os.path.join("./tmp1", i)
png_path = join("tmp", i)
# 讀取圖像
image = plt.imread(png_path)
# 取三個(gè)通道的平均值
im_gray = np.mean(image, axis=2)
im_gray = Image.fromarray((im_gray * 255).astype(np.uint8)).convert("L")
# 保存輸出圖像
im_gray.save(output_path)
def rename():
"""
處理好的VOC2007 train和test名稱(chēng)不同,名稱(chēng)不對(duì)應(yīng)不能訓(xùn)練
轉(zhuǎn)為對(duì)應(yīng)的,之前的留作副本可以對(duì)應(yīng)原圖
:return:
"""
root = "VOCdevkit/VOC2007/SegmentationClass"
for i in os.listdir(root):
img_old_path = join(root, i)
new_png_path = join(root, i[-10:])
shutil.copy(img_old_path, new_png_path)
# rename()
將0-255轉(zhuǎn)為0-3類(lèi)代碼,加微信cvxiayixiao
6?? 劃分測(cè)試集和訓(xùn)練集
import os
import random
import numpy as np
from PIL import Image
from tqdm import tqdm
# 修改train_percent用于改變驗(yàn)證集的比例 9:1
trainval_percent = 1
train_percent = 0.9
VOCdevkit_path = 'VOCdevkit'
if __name__ == "__main__":
random.seed(0)
print("Generate txt in ImageSets.")
segfilepath = os.path.join(VOCdevkit_path, 'VOC2007/SegmentationClass')
saveBasePath = os.path.join(VOCdevkit_path, 'VOC2007/ImageSets/Segmentation')
temp_seg = os.listdir(segfilepath)
total_seg = []
for seg in temp_seg:
if seg.endswith(".png"):
total_seg.append(seg)
num = len(total_seg)
list = range(num)
tv = int(num*trainval_percent)
tr = int(tv*train_percent)
trainval= random.sample(list,tv)
train = random.sample(trainval,tr)
print("train and val size",tv)
print("traub suze",tr)
ftrainval = open(os.path.join(saveBasePath,'trainval.txt'), 'w')
ftest = open(os.path.join(saveBasePath,'test.txt'), 'w')
ftrain = open(os.path.join(saveBasePath,'train.txt'), 'w')
fval = open(os.path.join(saveBasePath,'val.txt'), 'w')
for i in list:
name = total_seg[i][:-4]+'\n'
if i in trainval:
ftrainval.write(name)
if i in train:
ftrain.write(name)
else:
fval.write(name)
else:
ftest.write(name)
ftrainval.close()
ftrain.close()
fval.close()
ftest.close()
成功劃分文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-714918.html
到了這里,關(guān)于【ACDC數(shù)據(jù)集】:預(yù)處理ACDC心臟3D MRI影像數(shù)據(jù)集到VOC數(shù)據(jù)集格式,nii轉(zhuǎn)為jpg,label轉(zhuǎn)為png的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!