mha格式的CT体数据转为jpg切片

mha格式的CT体数据转为jpg切片

mha格式

.mha文件是一种体数据的存储格式,由一个描述数据的头和数据组成,通常咱们拿到的原始医学影像的数据是.dcm也就是dicom文件,dicom文件很复杂包含了各类各样的标签,一般咱们只关心dicom里的影像信息,因此通常会把多个dicom切片转成一个文件,例如.mha .mhd文件,这些文件里只包含简单的描述信息和体数据信息,便于处理。.mha的文件的样子以下图python

mha文件

上半部分是关于数据的介绍,例如数据的维数,体素的真实的大小,数据的存储的类型等,下面的XXX等,就是数据部分了,ElementType就解释了下面的数据是一个一个Short类型的数,一共51251258个Short类型的数。
.mhd文件和.mha文件类型,不过.mha文件通常分为.mhd文件和.raw文件,至关于.mha文件的两部分,一部分是描述信息,一部分是纯数据文件。git

窗宽窗宽

通常CT值在-1000~+1000范围内,有2000多个级别,而通常显示器能显示出256个级别(灰度图0-255),因此不能展示出全部信息(就算能够,人眼也分辨不了),因此须要定一个范围,例如在以40为中心,400为宽度的范围内,展现图像信息,即-160~240之间的CT值要显示出来,低于-160都算做-160,高于240的都算做240,即把-160~240映射到0~255,这样设置不一样窗位和窗宽就能展现不一样组织的信息(不一样组织的CT值不一样)。github

将.mha转换成jpg切片

下面将利用opencv和simpleitk,将.mha文件转为一组jpg文件。windows

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

def mha2jpg(mhaPath,outFolder,windowsCenter,windowsSize):
    
    """
    The function can output a group of jpg files by a specified mha file.
    Args:
        mhaPath:mha file path.
        outfolder:The folder that the jpg files are saved.
        windowsCenter:the CT windows center.
        windowsSize:the CT windows size.
    Return:void

    """
    image = sitk.ReadImage(mhaPath)
    img_data = sitk.GetArrayFromImage(image)
    channel = img_data.shape[0]

    if not os.path.exists(outFolder):
        os.makedirs(outFolder)


    low = windowsCenter-windowsSize/2
    high = windowsCenter+windowsSize/2

    for s in range(channel):
        slicer = img_data[s,:,:]
        slicer[slicer<low] = low
        slicer[slicer>high] = high
        slicer = slicer-low
        img = cv2.normalize(slicer, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U)
        cv2.imwrite(os.path.join(outFolder,str(s)+'.jpg'),img)

def main():
    mha = input("Enter the mha path:")
    out = input("Enter the out folder:")
    wc = int(input("Enter the windows center:"))
    ws = int(input("Enter the windows size:"))
    mha2jpg(mha,out,wc,ws)



if __name__ == "__main__":
    main()

结果

这里随机选取了两张张转换后的切片,分别选择不一样窗宽的窗位,能够获得下图学习

窗宽窗位1 窗宽窗位1

计划

博主正在学习医学影像处理相关方面的技能和知识,新开了一个git,会把以为有用的可复用的代码丢进去,刚刚起步,目前还比较空
https://github.com/MangoWAY/medicalImageScriptDemocode

相关文章
相关标签/搜索