医学图像的转化(jpeg转png,png转mhd,mha转png)

医学图像的分析可以大大减轻医疗人员的负担,智能辅助医生识别医学图像中的病变或异常是现代医学发展的方向,
随着深度学习火爆,越来越多的人将目光投向深度学习,希望可以通过深度学习的方法来做图像分割等之类的问题。
做金标准是深度学习的第一步,本文讲的是最基本的东西,怎样将一幅一幅的二维图像转化为三维数据,并画金标准保存label。
个人见识浅短,有错欢迎大家指出!

下面我就按我的思路简单的介绍一下:
第一步:将jpeg转化为png
from PIL import Image
import numpy as np
import os
import glob

img_path = glob.glob(r"img/*.jpeg")#此处img是我存放jpeg图片的文件夹
print(len(img_path))
save_path = 'savepic/'#savepic是保存png图片的文件夹

for index in range(len(img_path)):
    img = Image.open(img_path[index])
    img_name = os.path.split(img_path[index])[1]
    img_name = os.path.splitext(img_name)[0]
    img.save(save_path+str(index+1)+'.png')
    
    print(img_path[index])

第二步,将png转化为mhd文件,事先要先安装一下SimpleITK库,当然也别忘了将png图像编号,方便后面使用。python版本用的是python3.6, 直接在pip install SimpleITK就好,相当简单:另外,这部分是参考https://blog.csdn.net/weixin_43061687/article/details/82051674
依据我自己的图片做了适当修改:

import SimpleITK as sitk
import cv2
import numpy as np
import os
import glob

img = []
img1 = cv2.imread('1.png',0)
img1 = np.array(img1)
img.append(img1)

width = img1.shape[1]
height = img1.shape[0]

img_path = glob.glob(r'512_496_482/*.png')#512_496_482是存放png图片的地址,有很多张二维图片
chanel = len(img_path)

img_resize = np.zeros([chanel,height,width],dtype=np.uint8)

for i in range(chanel):
    print(i)
    img = cv2.imread(img_path[i],0)
    img_resize[i,(height- img1.shape[0]) // 2:(height - img1.shape[0]) // 2 + img1.shape[0],
    (width - img1.shape[1]) // 2:(width - img1.shape[1]) // 2 + img1.shape[1]] = img

img_resize=np.reshape(img_resize,[chanel,height, width])
mhd_data = sitk.GetImageFromArray(img_resize)
sitk.WriteImage(mhd_data, "1.mhd")

然后就将mhd文件拖到ITK snap中画金标准,保存金标准时我选择的是保存为mha文件。
最后一步,将mha转化为png,用于训练。

import cv2
import SimpleITK as sitk
import numpy as np

image = sitk.ReadImage('label.mha')
img_data = sitk.GetArrayFromImage(image) 
height = img_data.shape[1]
weight = img_data.shape[2]
channel = img_data.shape[0]
savepath = 'imgtest'

for i in range(200):
    img = np.zeros((height,weight), dtype=np.uint8)
    img = img_data[i,:,:]*255
    img = cv2.normalize(img, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
    
    cv2.imwrite(savepath+'/'+str(i+1)+'.png',img)
    
  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
LUNA16数据集是一个医学影像数据集,包含了用于肺癌检测的CT扫描影像。要将LUNA16数据集换为PNG格式,可以按照以下步骤进行: 1. 下载LUNA16数据集,包含了DICOM格式的CT扫描图像和CSV文件。 2. 安装Python的pydicom库,用于读取DICOM图像。 3. 编写Python脚本,读取DICOM图像并将其换为PNG格式。以下是一个示例脚本: ``` python import os import numpy as np import pydicom from PIL import Image # 设置数据集路径和输出路径 data_path = "path/to/LUNA16/data/" output_path = "path/to/output/folder/" # 读取CSV文件,获取需要换的图像ID列表 with open(os.path.join(data_path, "annotations.csv"), "r") as f: lines = f.readlines() ids = [line.split(",")[0] for line in lines[1:]] # 逐个读取DICOM图像换为PNG格式 for id in ids: # 读取DICOM图像 filename = os.path.join(data_path, "subset1", id + ".mhd") ds = pydicom.dcmread(filename) # 将DICOM图像换为numpy数组 img = ds.pixel_array # 将CT值归一化到0-255范围 img = (img - np.min(img)) / (np.max(img) - np.min(img)) * 255 img = img.astype(np.uint8) # 将numpy数组换为PIL图像 pil_img = Image.fromarray(img) # 保存为PNG格式 output_filename = os.path.join(output_path, id + ".png") pil_img.save(output_filename) ``` 4. 运行脚本,等待换完成。 需要注意的是,LUNA16数据集非常大,包含数千个图像文件,换过程可能比较耗时。建议使用GPU加速和多线程处理来提高换速度。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值