将医学图像.dcm格式与.nii.gz格式进行一些处理

news/2024/7/21 3:53:09 标签: 计算机视觉, 图像处理, opencv

介绍

  • .dcm文件是一种医学上用于存储CT、核磁共振等成像方式得到的患者器官图像的文件格式
  • .nii.gz是通过标注软件导出的3D标签(可以看作一个np数组)

我们通过pydicom和nibabel这两个包来辅助我们进行操作

  1. 读取dcm数据并用plt显示

# 读取dcm数据并使用plt显示

# ······································ #
fpath = ""
ds = pydicom.dcmread(fpath)
new_image = ds.pixel_array
scaled_image = (np.maximum(new_image, 0) / new_image.max()) * 255.0
plt.figure(figsize=(10, 10))
plt.imshow(scaled_image, cmap=plt.cm.bone)
plt.show()
print(scaled_image.max())
# ······································ #
  1. 批量处理.dcm文件,将其转化为.png格式:
def dcm_to_image(filepath, aimfile):
    fpath = os.listdir(filepath)
    for f in fpath:
        if f[-4:] != ".dcm":
            continue
        img_path = os.path.join(filepath, f)
        img = pydicom.dcmread(img_path)
        img_data = img.pixel_array
        # dcm的值转化为0 ~ 255之间
        img_data = (np.maximum(img_data, 0) / img_data.max()) * 255.0
        # 开始转换为图像
        fname = f.replace('.dcm', '')  # 去掉nii的后缀名
        print(fname)
        imageio.imwrite(os.path.join(aimfile, fname + '.png'), img_data)
  1. 批量处理.nii.gz文件,将其转化为.png格式:
def nii_to_image(filepath, imgfile):
    filenames = os.listdir(filepath)  # 读取nii文件夹
    slice_trans = []

    for f in filenames:
        # 开始读取nii文件
        if f[-7:] != ".nii.gz":
            continue
        img_path = os.path.join(filepath, f)
        img = nib.load(img_path)  # 读取nii
        img_fdata = img.get_fdata()
        fname = f.replace('.nii.gz', '')  # 去掉nii的后缀名
        img_f_path = os.path.join(imgfile, fname)
        # 创建nii对应的图像的文件夹
        if not os.path.exists(img_f_path):
            os.mkdir(img_f_path)  # 新建文件夹

        # 开始转换为图像
        (x, y, z) = img.shape
        for i in range(z):  # z是图像的序列
            silce = img_fdata[:, :, i]  # 选择哪个方向的切片都可以
            silce = silce.transpose()
            imageio.imwrite(os.path.join(
                img_f_path, '{}.png'.format(i)), silce)
            # 保存图像

http://www.niftyadmin.cn/n/1444482.html

相关文章

django 快速实现登陆,接着注册的项目写(五)

1.改项目的urls.py from django.conf.urls import url,include from django.contrib import adminadmin.autodiscover()urlpatterns [url(r^admin/, admin.site.urls),url(r^account/, include(account.urls)), ]改应用的urls.py from django.conf.urls import url from accou…

uva 10794 - The Deadly Olympic Returns!!!(几何)

题目链接&#xff1a;uva 10794 - The Deadly Olympic Returns!!! 点到线段的距离&#xff0c;终点定无穷远。 #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <vector> #include <algorithm>using …

linux so 动态库中全局变量 被覆盖问题

问题描述 回归正题&#xff0c;前段时间项目开发中&#xff0c;实现了一个动态库&#xff0c;封装了一些方法。然后基于这个动态库&#xff0c;实现了一个应用程序。应用程序中含有全局变量A&#xff0c;动态库中也含有全局变量A&#xff0c;当我调用动态库中函数后&#xff0c…

SCSI WRITE SAME failed问题初步分析与测试

2019独角兽企业重金招聘Python工程师标准>>> 问题描述 在SCSI的LUN上创建的LVM卷&#xff0c;使用“qemu-img convert -t none -O raw in.img /dev/vg/lv”命令直接转换时&#xff0c;可能会导致输出到LVM卷上的转换结果不正确&#xff0c;使用dmesg查看到的输出错误…

Scrollbar

Scrollbar(滚动条)组件用于滚动一些组件的可见范围&#xff0c;可分为垂直和水平的。 用法&#xff1a; from tkinter import * root Tk()#滚动条组件 sb Scrollbar(root) sb.pack(sideRIGHT,fillY)#列表组件 #用列表组件里面的yscrollballcommand命令启动滚动条 lb Listbox(…

uva 11836 - Star War(几何)

题目链接&#xff1a;uva 11836 - Star War 就三种情况&#xff0c;点到线段&#xff0c;点到面&#xff0c;线段到线段。 #include <cstdio> #include <cstring> #include <cmath> #include <cstdlib> #include <vector> #include <algorith…

每隔两分钟删除指定文件夹内容

#!/bin/bash while [ true ]doif ! [ -d ./live ]thenecho "path not exist!" mkdir livecontinueelsefind ./live -mmin 2 -exec rm -rf {} \;echo "删除文件..."sleep 120fidone

CMMI过程改进反例

&#xfeff;&#xfeff;近期一直在看CMMI的资料&#xff0c;越看认为越有意思。今天看到过程改进的时候&#xff0c;突然想起来之前所在的公司发生的过程改进相关的事儿来。公司通过CMMI3级认证之后。PMO部门经理&#xff08;公司还有质量管理部门经理、也有EPG&#xff09;说…