使用plt.imshow展示SimpleITK切片图像时报Invalid shape错误如何解决
错误原因
你通过切片获取的im仍然是SimpleITK.SimpleITK.Image类型,matplotlib的imshow方法无法直接解析该类型的内部结构,读取数据时会错误将二维图像拉平为长度为14400的一维数组,因此触发形状不匹配的报错。
解决方法
- 方法1:先将提取的切片转为numpy数组再传入
imshow
import SimpleITK as sitk import matplotlib.pyplot as plt # 将SimpleITK图像对象转为numpy数组 im_arr = sitk.GetArrayFromImage(im) # 医学图像推荐指定灰度色图展示,也可根据需求调整cmap参数 plt.imshow(im_arr, cmap="gray") plt.show()
- 方法2:提前将3D图像整体转为numpy数组,再按层提取
注意:SimpleITK的
GetSize()返回维度顺序为(x, y, z),转为numpy数组后维度顺序会自动调整为(z, y, x),取层索引时需要对应调整
import SimpleITK as sitk import matplotlib.pyplot as plt # 整幅3D图像转numpy数组 fused_arr = sitk.GetArrayFromImage(fusedImage) # 提取第76层切片 im_arr = fused_arr[76, :, :] plt.imshow(im_arr, cmap="gray") plt.show()
内容的提问来源于stack exchange,提问作者Dushi Fdz
相关产品推荐
相关产品推荐

