weixin_45823694 2020-04-27 11:27 采纳率: 0%
浏览 405

图像大小不一样,有什么办法吗?

请教一下,我有两张不同大小的mha图像,想将它们进行互信息计算,但是直接算就会报错,因为图像大小不一样,那有什么办法可以将它们弄成一样的吗?

  • 写回答

1条回答 默认 最新

  • 李佑辰 2023-05-21 13:28
    关注

    在计算两个不同大小的图像的互信息之前,需要将它们调整为同一大小。一种简单的方法是通过插值来实现。可以使用各种方法对图像进行插值,包括最近邻插值、双线性插值、三次样条插值等。

    以下是一个 Python 代码示例,将两个 MHA 格式的图像进行插值并调整大小,以便计算它们之间的互信息。示例中使用了 SimpleITK 库,它为医学图像的处理提供了许多方便的函数和工具:

    import SimpleITK as sitk
    
    # 读取原始图像
    image1 = sitk.ReadImage("image1.mha")
    image2 = sitk.ReadImage("image2.mha")
    
    # 获取原始图像信息
    size1 = image1.GetSize()
    size2 = image2.GetSize()
    
    spacing1 = image1.GetSpacing()
    spacing2 = image2.GetSpacing()
    
    origin1 = image1.GetOrigin()
    origin2 = image2.GetOrigin()
    
    direction1 = image1.GetDirection()
    direction2 = image2.GetDirection()
    
    # 计算新图像信息
    max_size = [max(size1[i], size2[i]) for i in range(3)]
    
    max_spacing = [max(spacing1[i], spacing2[i]) for i in range(3)]
    
    max_origin = [min(origin1[i], origin2[i]) for i in range(3)]
    
    identity_direction = [1, 0, 0, 0, 1, 0, 0, 0, 1]
    
    # 创建新图像
    new_image1 = sitk.Image(max_size, image1.GetPixelID())
    new_image1.SetSpacing(max_spacing)
    new_image1.SetOrigin(max_origin)
    new_image1.SetDirection(identity_direction)
    
    new_image2 = sitk.Image(max_size, image2.GetPixelID())
    new_image2.SetSpacing(max_spacing)
    new_image2.SetOrigin(max_origin)
    new_image2.SetDirection(identity_direction)
    
    # 对新图像进行插值
    resampler1 = sitk.ResampleImageFilter()
    resampler1.SetInterpolator(sitk.sitkLinear)
    resampler1.SetReferenceImage(new_image1)
    resampler1.SetOutputSpacing(max_spacing)
    resampler1.SetOutputOrigin(max_origin)
    resampler1.SetSize(max_size)
    resampler1.SetOutputDirection(identity_direction)
    new_data1 = resampler1.Execute(image1)
    
    resampler2 = sitk.ResampleImageFilter()
    resampler2.SetInterpolator(sitk.sitkLinear)
    resampler2.SetReferenceImage(new_image2)
    resampler2.SetOutputSpacing(max_spacing)
    resampler2.SetOutputOrigin(max_origin)
    resampler2.SetSize(max_size)
    resampler2.SetOutputDirection(identity_direction)
    new_data2 = resampler2.Execute(image2)
    

    在上面的代码中,我们使用 SimpleITK 库读取原始图像,然后获取它们的大小、间距、原点和方向信息。我们根据原始图像的大小和间距计算出新图像的大小和间距,并将新图像的方向设置为单位矩阵。然后,我们创建了两个新的 SimpleITK 图像对象,并将它们的间距、原点和方向设置为新的值。最后,我们使用 sitk.ResampleImageFilter 对新图像进行插值,并将插值结果保存在 new_data1 和 new_data2 中。

    这样,我们就可以使用 SimpleITK 库计算两个经过插值和调整大小后的图像之间的互信息。

    评论

报告相同问题?

悬赏问题

  • ¥15 MATLAB运行显示错误,如何解决?
  • ¥15 c++头文件不能识别CDialog
  • ¥15 Excel发现不可读取的内容
  • ¥15 UE5#if WITH_EDITOR导致打包的功能不可用
  • ¥15 关于#stm32#的问题:CANOpen的PDO同步传输问题
  • ¥20 yolov5自定义Prune报错,如何解决?
  • ¥15 电磁场的matlab仿真
  • ¥15 mars2d在vue3中的引入问题
  • ¥50 h5唤醒支付宝并跳转至向小荷包转账界面
  • ¥15 算法题:数的划分,用记忆化DFS做WA求调