最近在做医学图像相关的实践,数据集图像是dicom格式的,标注是nrrd格式的图像.为了方便后期的模型搭建和训练转一下格式.python读取nrrd格式的图像需要用到pynrrd库,使用pip就可以安装:
pip install pynrrd
核心代码:
import numpy as np
import nrrd
import os
import cv2
def nrrd_to_png(nrrd_filename,save_path,patient_id):
nrrd_filename = nrrd_filename
nrrd_data, nrrd_options = nrrd.read(nrrd_filename)
h,w,slides_num = nrrd_data.shape
for i in range(slides_num):
img = nrrd_data[:,:,slides_num-i-1]*255
# img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
cv2.imwrite(save_path + '/' + patient_id + '_' + str(i+1) + '.png',img)
通过nrrd.read操作读取图像,返回值中的nrrd_data是一个numpy数组,形状是[h,w,slide_num],然后使用opencv保存一下就行了.保存以后mask出现了形状和itk-snap显示不一样,所以对数组做一下转置,就可以得到正确的图像了.
转置代码如下:
def rotation(path):
image = cv2.imread(path)
image = cv2.transpose(image)
# image = cv2.flip(image,1)
cv2.imwrite(path,image)