医工互联

 找回密码
 注册[Register]

手机动态码快速登录

手机号快速登录

微信登录

微信扫一扫,快速登录

QQ登录

只需一步,快速开始

查看: 287|回复: 0
收起左侧

医学影像中的基础知识: Hounsfield单位、Python实例和SimpleITK库

[复制链接]

  在线 

发表于 2022-10-20 05:16:45 | 显示全部楼层 |阅读模式 <
1.Hounsfield单位
      不同密度的组织具有不同的衰减系数,CT诊断中为了对不同组织进行区分,将不同密度的各种组织用不同的CT值表示,称为Hounsfield单位(Hu)。
      以水为0,空气为-1 000,致密骨为+1 000,这样CT将测得的信号高度精确地数字化,具有了很高的空间和密度分辨力。
062003sujb5gmrjbruag2u.png

      CT扫描图是包含了所有组织的,如果直接去看,看不到任何有用信息。需要做一些预处理,预处理中一个重要的概念是放射剂量,衡量单位为HU(Hounsfield Unit)。
Hounsfield Unit = pixel_value * rescale_slope + rescale_intercept
      一般情况rescale slope = 1, intercept = -1024。
      上表中肺部组织的HU数值为-500,但通常是大于这个值,比如-320、-400。挑选出这些区域,然后做其他变换抽取出肺部像素点。
2.Python实例 分割路径和文件名
import os.path
常用函数有三种:分隔路径,找出文件名.找出盘符(windows系统),找出文件的扩展名.

根据你机器的实际情况修改下面参数.

spath = " D:/download/repository.7z "
case 1:

p,f = os.path.split(spath);
print ( " dir is: " + p)
print ( " file is: " + f)
case 2:

drv,left = os.path.splitdrive(spath);
print ( " driver is: " + drv)
print ( " left is: " + left)
case 3:

f,ext = os.path.splitext(spath);
print ( " f is: " + f)
print ( " ext is: " + ext)
‘’’
知识点: 这三个函数都返回二元组.
* case1 分隔目录和文件名
* case2 分隔盘符和文件名
* case3 分隔文件和扩展名
‘’’
  1. 在医学图像上经常使用的一个库-SimpleITK,很多处理都只懂个大概或者只会简单的读取,保存图像,这里对常用的一些操作进行总结:
  2. import  SimpleITK as sitk
  3. 1、sitk.Cast(sitk.ReadImage(),sitk.sitkFloat32) 图像转换数据类型
  4. 2、sitk.ReadImage(图像路径)读取图像,如.mhd .nii .nrrd等
  5. 3、sitk.WriteImage(image,图像路径)保存图像
  6. 4、sitk.GetArrayFromImage(sitk.ReadImage
  7. 5、sitk.GetImageFromArray() 将数组转换成sitk图像
  8. 6、rescalFilt = sitk.RescaleIntensityImageFilter() 改变图像的像素值,转换为[0,255]
  9.       rescalFilt.SetOutputMaximum(255)
  10.       rescalFilt.SetOutputMinimum(0)
  11.       itkimage = rescalFilt.Execute(sitk.ReadImage()
  12. 7、resampler = sitk.ResampleImageFilter() 图像重采样
  13.      resampler.SetReferenceImage(itkimage)#需要重新采样的目标图像
  14.      resampler.SetSize(newSize.tolist())
  15.      resampler.SetTransform(sitk.Transform(3, sitk.sitkIdentity))
  16.      resampler.SetInterpolator(sitk.sitkNearestNeighbor)
  17.      itkimgResampled = resampler.Execute(itkimage)#得到重新采样后的图像
  18. 8、sitk.Threshold(sitk.ReadImage(), 0, 1.0, 255) 将图像中像素值<0和>1.0的像素值改为255,否则保持不变
  19. 9、sitk.BinaryThreshold(sitk_src, lowerThreshold=lowervalue, upperThreshold=uppervalue, insideValue=255, outsideValue=0) 图像二值化
  20. 10、image1 = sitk.ReadImage() 对sitk的image1处理完后恢复到世界坐标系
  21.       image2 = sitk.GetArrayFromImage(image1)
  22.       origin =  image1.GetOrigin()
  23.       spacing = image1.GetSpacing()
  24.       direction = image1.GetDirection()
  25.       image2 = sitk.GetImageFromArray(image2)
  26.       image2.SetOrigin(origin)
  27.       image2.SetSpacing(spacing)
  28.       image2.SetDirection(direction)
  29. 11、sitk_src_gaus = sitk.DiscreteGaussianImageFilter() 图像高斯滤波
  30.         sitk_src_gaus.SetVariance(3)
  31.         sitk_src_gaus.SetMaximumError(0.2)
  32.         sitk_src_gaus = sitk_src_gaus.Execute(sitk.ReadImage())
  33. 12、sitk.BinaryMorphologicalOpening(sitk.ReadImage() != 0, kernelsize) 图像的形态学操作:开、闭、膨胀、腐蚀
  34.         sitk.BinaryMorphologicalClosing(sitk.ReadImage() != 0, kernelsize)
  35.         sitk.BinaryDilate(sitk.ReadImage() != 0, kernelsize)
  36.         sitk.BinaryErode(sitk.ReadImage() != 0, kernelsize)
  37. 13、sitk_xorop = sitk.XorImageFilter() 图像的逻辑运算:异或、非
  38.         sitk_mask1 = sitk_xorop.Execute(imag1, imag2) image1和image2是sitk图像的二值化结果
  39.         sitk_notop = sitk.NotImageFilter()
  40.         sitk_mask2 = sitk_notop.Execute(image) image是sitk图像的二值化结果
  41. 14、sitk.BinaryFillhole(sitk的二值化图像)去除二值化图像内的孔洞
复制代码
dicom文件:
      dicom是一个存储患者所拍摄医学影像的某一层断面图和相关信息的文件。
mhd文件与raw文件的区别:
      Raw文件,意为“未处理的文件”,其保存的是纯像素信息。常常是一个病人的所有dicom文件中的图像提取出来放在一个raw文件里。也就是说,一个病人对应一个raw文件,其中存储的是该病人的图像信息。(可以理解为将该病人不同的dicom切片图像都叠到一起,形成了一个三维图像)。一个raw通常有几百兆,对应的mhd文件只有1kb。mhd文件需要借助python的SimpleITK包来处理。
      上面已经提到,dicom文件除了包含切片图像外,还包含其他的一些信息。那么在文件格式转换后,图像信息被raw文件提取,非图像信息则存储在mhd头文件中。简单来说,mhd头文件是存储关于一个病人的所有dicom文件中的非图像信息。
      由上述关系可以知道:raw文件与mhd文件是一一对应的,且它们的数量小于等于(实际中一定是小于)dicom文件数量
      因为DICOM图像通常是一个序列,普通的dcm格式的图像序列可以直接使用DICOM图像查看软件打开进行查看;但mhd格式的3D图像却无法方便地查看。
  1.   File "D:/RStudio/data/TumorType-WGS-master/CT_MHD/Mhd_Visualization.py", line 12, in <module>
  2.     im = cv2.cvtColor(im, cv2.COLOR_GRAY2RGB)
  3. cv2.error: OpenCV(4.4.0) c:\users\appveyor\appdata\local\temp\1\pip-req-build-iw3y3ir8\opencv\modules\imgproc\src\color.simd_helpers.hpp:94: error: (-2:Unspecified error) in function '__cdecl cv::impl::`anonymous-namespace'::CvtHelper<struct cv::impl::`anonymous namespace'::Set<1,-1,-1>,struct cv::impl::A0x4107568d::Set<3,4,-1>,struct cv::impl::A0x4107568d::Set<0,2,5>,2>::CvtHelper(const class cv::_InputArray &,const class cv::_OutputArray &,int)'
  4. > Unsupported depth of input image:
  5. >     'VDepth::contains(depth)'
  6. > where
  7. >     'depth' is 3 (CV_16S)
复制代码
参考该链接:https://blog.csdn.net/rocking_struggling/article/details/104825407
Dicom文件转mhd,raw文件格式
https://www.cnblogs.com/XDU-Lakers/p/10781321.html

来源:https://blog.csdn.net/qq_36717487/article/details/113103453
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

提醒:禁止复制他人回复等『恶意灌水』行为,违者重罚!
您需要登录后才可以回帖 登录 | 注册[Register] 手机动态码快速登录 微信登录

本版积分规则

发布主题 快速回复 收藏帖子 返回列表 客服中心 搜索
简体中文 繁體中文 English 한국 사람 日本語 Deutsch русский بالعربية TÜRKÇE português คนไทย french

QQ|RSS订阅|小黑屋|处罚记录|手机版|联系我们|Archiver|医工互联 |粤ICP备2021178090号 |网站地图

GMT+8, 2024-11-5 16:31 , Processed in 0.288773 second(s), 65 queries .

Powered by Discuz!

Copyright © 2001-2023, Discuz! Team.

快速回复 返回顶部 返回列表