【Python影像组学】医疗图像格式转换—nrrd格式转为png格式


首先需要导入必要的库,如果没有需要安装一下

安装方法:(可以直接在控制台输入以下命令进行安装)
pip install numpy
pip install pynrrd
pip install opencv-python
pip install opencv-contrib-python

import numpy as np
import nrrd
import os
import cv2

# nrrd_filename:读入的nrrd文件路径
# save_path:转换后的png保存路径
# patient_id:病人编号,如果没有将这个参数删去
# 如果删去patient_id参数,则函数中也要删掉这个参数
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出现了形状和3dslicer显示不一样,所以对数组做一下转置,就可以得到正确的图像了。

# path:上边图像的保存路径
def rotation(path):
    image = cv2.imread(path)
    image = cv2.transpose(image)
    # image = cv2.flip(image,1)
    cv2.imwrite(path, image)

具体调用过程如下:

nrrd_filename = "1_label.nrrd"  # nrrd 文件的保存路径
save_path = "D:/"  # 图片数据的保存文件夹
nrrd_to_png(nrrd_filename, save_path, "1")
rotation(save_path + "/1.png")  # 这个是最终保存的图像

你可能感兴趣的:(医学图像,python,opencv,计算机视觉,numpy,pip)