zjb.main.data.regionmapping 源代码

from typing import TYPE_CHECKING

import numpy as np
from traits.api import Array

from zjb._traits.types import Instance
from zjb.main.data.space import SurfaceSpace, VolumeSpace
from zjb.main.dtb.atlas import Atlas
from zjb.main.trait_types import RequiredIntVector

from .base import ArrayData

if TYPE_CHECKING:
    from nibabel.gifti.gifti import GiftiImage


[文档] class SurfaceRegionMapping(ArrayData): """ 表面区域映射类。该类用于创建和处理表面区域映射。 Attributes ---------- space : SurfaceSpace 表面空间实例,表示数据所在的空间。 atlas : Atlas 图谱实例,用于区域映射。 data : array[int] shape (n_nodes) 整型向量表示的映射数据。 """ space = Instance(SurfaceSpace, required=True) atlas = Instance(Atlas, required=True) data = RequiredIntVector
[文档] @classmethod def from_label_gii( cls, left_label: "GiftiImage | str", right_label: "GiftiImage | str", space: "SurfaceSpace | str", atlas: "Atlas | str", ): """ 从左右脑标签的gii文件构造 SurfaceRegionMapping 实例。 Parameters ---------- left_label : GiftiImage 或 str 左脑的标签文件,可以是 GiftiImage 实例或文件路径。 right_label : GiftiImage 或 str 右脑的标签文件,可以是 GiftiImage 实例或文件路径。 space : SurfaceSpace 或 str 表面空间实例或文件路径。 atlas : Atlas 或 str 图谱实例或文件路径。 Returns ------- SurfaceRegionMapping 由指定参数构造的 SurfaceRegionMapping 实例。 """ from nibabel.gifti.gifti import GiftiImage if not isinstance(left_label, GiftiImage): left_label = GiftiImage.from_filename(left_label) if not isinstance(right_label, GiftiImage): right_label = GiftiImage.from_filename(right_label) if not isinstance(space, SurfaceSpace): space = SurfaceSpace.from_gii(space, left_label, right_label) if not isinstance(atlas, Atlas): atlas = Atlas.from_label_gii(atlas, left_label) data = np.concatenate([left_label.darrays[0].data, right_label.darrays[0].data]) return cls(space=space, atlas=atlas, data=data)
[文档] @classmethod def from_txt(cls, space: "SurfaceSpace", atlas: "Atlas", path: str): """ Parameters ---------- space : SurfaceSpace 表面空间实例。 atlas : Atlas 图谱实例。 path : str 包含映射数据的文本文件路径。 Returns ------- SurfaceRegionMapping 由指定参数构造的 SurfaceRegionMapping 实例。 """ f = open(path) lines = f.readlines() rows = len(lines) cols = len(lines[0].split()) mat = np.zeros((rows, cols), dtype=float) # 遍历每一行的数据,并将其转换为浮点型,然后存储到矩阵中 for i in range(rows): data = lines[i].strip().split() # 去掉每行的换行符,并用空格分割数据 data = [float(x) for x in data] # 将数据转换为浮点型 mat[i, :] = data # 将数据赋值给矩阵的第i行 mat = mat.squeeze() return cls(space=space, atlas=atlas, data=mat)
[文档] class VolumeRegionMapping(ArrayData): """ 体素空间映射类。 该类用于表示体素空间中的区域映射数据。 Attributes ---------- volume : VolumeSpace 体素空间的实例。 atlas : Atlas 图谱的实例。 data : array[int], shape (nx, ny, nz) 包含映射数据的 NumPy 数组。 """ volume = Instance(VolumeSpace, required=True) atlas = Instance(Atlas, required=True) data = Array(dtype=int, shape=(None, None, None), required=True)