关于医学图像中将mask涂到原图的操作
import SimpleItk as sitk
import numpy as np
import matplotlib.pyplot as plt
"""
这里有两种情况,第一种为原图和label都是由SimpleITK所读取
"""
img_path = ' '
ground_truth_path = ' '
img = sitk.ReadImage(img_path)
# SimpleITK需要将图像转为uint8
ImgUint8 = sitk.Cast(sitk.RescaleIntensity(img,), sitk.sitkUInt8)
overlay = sitk.LabelOverlay(ImgUint8, seg)
nda = sitk.GetArrayViewFromImage(overlay)
plt.imshow(nda[n, :, :]) # n为要读取的切片
"""
第二种情况为模型预测的label
模型预测的label为numpy格式,因此需要将numpy格式转为SimpleITK
要注意里面的属性的值要一致
"""
seg_path = 'xx.npy'
seg = np.load('seg.npy') # 读取预测标签
img_path = ' '
img = sitk.ReadImage(img_path)
ImgUint8 = sitk.Cast(sitk.RescaleIntensity(img,), sitk.sitkUInt8) # 读取原图
seg2sitk = sitk.GetImageFromArray(seg) # numpy 转 SimpleITK
# 由于np格式转为sitk,因此里面的属性要从原图的属性里面去获取
seg2itk.SetOrigin(ImgUint8.GetOrigin())
seg2itk.SetDirection(ImgUint8.GetDirection())
seg2itk.SetSpacing(ImgUint8.GetSpacing())
overlay1 = sitk.LabelOverlay(ImgUint8, seg2itk)
nda1 = sitk.GetArrayViewFromImage(overlay1)
plt.imshow(nda1[n, :, :]) # n为要读取的切片
- ### 第二种为Opencv 因为opencv读取图片的格式为numpy格式,因此预测结果不需要进行转化,只需要将float改为uint8,下面为SimpleITK读取的ground
truth ~~~python img_path = ’ ’ ground_truth_path = ’ ’ “”"
将图片转为uint8格式 ground_truth里面的值为[0, 1, 2, 4],转成uint8变为[0, 63, 127,
255] “”" ImgUint8 =
sitk.Cast(sitk.RescaleIntensity(sitk.ReadImage(img_path),
outputMinimum=0, outputMaximum=255), sitk.sitkUInt8) SegUint8 =
sitk.Cast(sitk.RescaleIntensity(sitk.ReadImage(ground_truth_path),
outputMinimum=0, outputMaximum=255), sitk.sitkUInt8)
# 得到二值图像 binary_seg = SegUint8 binary_seg[binary_seg ~= 0] = 1
版权声明:本文为qq_40797296原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。