mha格式的CT體數據轉為jpg切片


mha格式的CT體數據轉為jpg切片

mha格式

.mha文件是一種體數據的存儲格式,由一個描述數據的頭和數據組成,一般我們拿到的原始醫學影像的數據是.dcm也就是dicom文件,dicom文件很復雜包含了各種各樣的標簽,通常我們只關心dicom里的影像信息,所以一般會把多個dicom切片轉成一個文件,例如.mha .mhd文件,這些文件里只包含簡單的描述信息和體數據信息,便於處理。.mha的文件的樣子如下圖

mha文件

上半部分是關於數據的介紹,例如數據的維數,體素的真實的大小,數據的存儲的類型等,下面的XXX等,就是數據部分了,ElementType就解釋了下面的數據是一個一個Short類型的數,一共51251258個Short類型的數。
.mhd文件和.mha文件類型,不過.mha文件一般分為.mhd文件和.raw文件,相當於.mha文件的兩部分,一部分是描述信息,一部分是純數據文件。

窗寬窗寬

一般CT值在-1000~+1000范圍內,有2000多個級別,而一般顯示器能顯示出256個級別(灰度圖0-255),所以不能展現出所有信息(就算可以,人眼也分辨不了),所以需要定一個范圍,例如在以40為中心,400為寬度的范圍內,展示圖像信息,即-160~240之間的CT值要顯示出來,低於-160都算作-160,高於240的都算作240,即把-160~240映射到0~255,這樣設置不同窗位和窗寬就能展示不同組織的信息(不同組織的CT值不同)。

將.mha轉換成jpg切片

下面將利用opencv和simpleitk,將.mha文件轉為一組jpg文件。

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/medicalImageScriptDemo


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM