当前位置: 首页 > article >正文

nnunet报错 the direction does not match between the images

报错如下:
the direction does not match between the images

The geometry of the image does not match the geometry of the label file. The pixel arrays will not be aligned and nnU-Net cannot use this data. Please make sure your image modalities are coregistered and have the same geometry as the label

解决方案
找到检查对齐的代码,然后使用这段代码来验证原图和标注,来排除问题。
nnunet/preprocessing/sanity_checks.py

def verify_same_geometry(img_1: sitk.Image, img_2: sitk.Image):
    ori1, spacing1, direction1, size1 = img_1.GetOrigin(), img_1.GetSpacing(), img_1.GetDirection(), img_1.GetSize()
    ori2, spacing2, direction2, size2 = img_2.GetOrigin(), img_2.GetSpacing(), img_2.GetDirection(), img_2.GetSize()

    same_ori = np.all(np.isclose(ori1, ori2))
    if not same_ori:
        print("the origin does not match between the images:")
        print(ori1)
        print(ori2)

    same_spac = np.all(np.isclose(spacing1, spacing2))
    if not same_spac:
        print("the spacing does not match between the images")
        print(spacing1)
        print(spacing2)

    same_dir = np.all(np.isclose(direction1, direction2))
    if not same_dir:
        print("the direction does not match between the images")
        print(direction1)
        print(direction2)

    same_size = np.all(np.isclose(size1, size2))
    if not same_size:
        print("the size does not match between the images")
        print(size1)
        print(size2)

    if same_ori and same_spac and same_dir and same_size:
        return True
    else:
        return False

我们对原图和标注进行对齐操作就能解决问题

def align_image_direction(img_1: sitk.Image, img_2: sitk.Image):
    # 获取图像1的方向
    direction1 = img_1.GetDirection()

    # 获取图像2的方向
    direction2 = img_2.GetDirection()

    # 计算图像1到图像2的变换矩阵
    transform = sitk.AffineTransform(3)
    matrix = np.reshape(direction2, (3, 3)) @ np.linalg.inv(np.reshape(direction1, (3, 3)))
    transform.SetMatrix(matrix.ravel())

    # 对图像1应用变换矩阵
    aligned_img_1 = sitk.Resample(img_1, img_2, transform, sitk.sitkLinear, 0.0, img_1.GetPixelID())

    return aligned_img_1

http://www.kler.cn/a/301999.html

相关文章:

  • 在Typora中实现自动编号
  • Dubbo 核心知识全解析:原理、流程与关键机制
  • ceph文件系统
  • 服务器端请求伪造之基本介绍
  • 【现代摄像头作为一种视频输入摄像头】
  • LeetCode算法题——有序数组的平方
  • STM32-HAL库开发快速入门
  • React基础
  • [001-02-001]. 第07-03节:理解线程的安全问题
  • 空间物联网中的大规模接入:挑战、机遇和未来方向
  • 基于 onsemi NCV78343 NCV78964的汽车矩阵式大灯方案
  • Linux下进程间的通信--共享内存
  • 计算机视觉的应用33-基于双向LSTM和注意力机制融合模型的车辆轨迹预测应用实战
  • 五分钟让你学会threeJS
  • git 远程分支同步本地落后的有冲突的分支
  • Redis常用操作及springboot整合redis
  • web基础之文件上传
  • Kotlin 中的 `flatMap` 方法详解
  • wifiip地址可以随便改吗?wifi的ip地址怎么改变
  • Brave编译指南2024 Windows篇:安装Git(四)
  • FloodFill算法
  • 语言模型微调:提升语言Agent性能的新方向
  • HarmonyOS开发之使用Picker(从相册选择图片),并且通过Swiper组件实现图片预览
  • Day11笔记-字典基本使用系统功能字典推导式
  • 自定义spring security的安全表达式
  • Numpy中random.seed()函数的使用