解剖空间惯例变得简单

bg-space的Python项目详细描述


背景空间

解剖空间惯例变得简单。在

Python VersionPyPIBuild StatusLicense: GPL v3Coverage StatusCode style: black

在处理解剖图像时,经常会遇到与轴方向和顺序有关的不同约定的堆栈方向的匹配问题。此外,当涉及多个交换和翻转时,将相同的变换映射到体积和点(例如,坐标或网格)可能会很麻烦。在

bg-space提供了一种定义解剖空间、操作堆栈和空间之间点转换的简洁方法。在

安装

您可以使用以下工具安装bg-space

pip install bg-space

使用

要定义新的解剖空间,只需给出堆栈原点位置的方向即可:

^{pr2}$

然后可以轻松地将堆栈从源空间转换到目标空间:

importbg_spaceasbgimportnumpyasnpstack=np.random.rand(3,2,4)mapped_stack=bg.map_stack_to(source_origin,target_origin,stack)

转换仅使用numpy索引操作处理;,即,不复杂 应用图像仿射变换。作为开始任何类型的图像注册的准备步骤,这通常非常有用。在

缩短的语法可用于使用原点方向的首字母来定义空间:

mapped_stack=bg.map_stack_to("lsa","ipr",stack)

注释

使用堆栈时,当使用matplotlib显示第一个元素stack[0, :, :]或使用ImageJ打开堆栈时,原点是左上角。第一个维度是要切片的维度,第二个维度是图像的高度,第三个维度是图像的宽度。在


AnatomicalSpace

有时,与堆栈一起,我们必须移动一组点(单元坐标、网格等)。这就增加了跟踪原点偏移的复杂性,以及轴交换和翻转。在

为了处理这种情况,我们可以使用AnatomicalSpace定义一个源空间 类,同时指定堆栈形状:

stack=np.random.rand(3,2,4)# a stack in source spaceannotations=np.array([[0,0,0],[2,1,3]])# related point annotationssource_space=bg.AnatomicalSpace(target_origin,stack.shape)mapped_stack=source_space.map_stack_to("ipr",stack)# transform the stackmapped_annotations=source_space.map_points_to("ipr",annotations)# transform the points

通过生成变换矩阵对点进行变换。 最后,如果我们想记录这个矩阵(例如,重建注册的完整转换序列),我们可以得到:

target_space=bg.AnatomicalSpace("ipr",stack.shape)transformation_matrix=AnatomicalSpace.transformation_matrix_to(target_space)# equivalent to:transformation_matrix=AnatomicalSpace.transformation_matrix_to("ipr",stack.shape)

目标get始终定义为bg.AnatomicalSpace对象,或有效的原始规范加上形状(仅当需要轴翻转时才需要该形状)。在

匹配空间分辨率和偏移

AnatomicalSpace类还可以处理堆栈重采样/填充/裁剪。这需要在实例化AnatomicalSpace对象时简单地指定分辨率和偏移量的值。完成后,使用AnatomicalSpace.transformation_matrix_to创建从一个空间到另一个空间的仿射变换矩阵将是小菜一碟!在

source_space=bgs.AnatomicalSpace("asl",resolution=(2,1,2),offset=(1,0,0))target_space=bgs.AnatomicalSpace("sal",resolution=(1,1,1),offset=(0,0,2))source_space.transformation_matrix_to(target_space)

此外,我们现在可以使用这些空间对象对堆栈进行重新采样,并通过指定目标偏移量来生成与目标形状匹配的堆栈:

source_space=bgs.AnatomicalSpace("asl",resolution=(2,1,2),offset=(1,0,0))target_space=bgs.AnatomicalSpace("asl",resolution=(1,1,1),shape=(5,4,2))# we need a target shapesource_space.transformation_matrix_to(target_space,stack,to_target_shape=True)

投影上的简单迭代

最后,BGSpace的另一个方便功能是可以轻松迭代堆栈的投影,并生成节名和轴标签:

sc=bg.AnatomicalSpace("asl")# origin for the stack to be plottedfori,(plane,labels)inenumerate(zip(sc.sections,sc.axis_labels)):axs[i].imshow(stack.mean(i))axs[i].set_title(f"{plane.capitalize()} view")axs[i].set_ylabel(labels[0])axs[i].set_xlabel(labels[1])

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
Google应用程序引擎FreeMarker模板java。安全AccessControlException   在Java中,空字符串(“”)如何存储在内存中?   java如何使用PUT进行创建   java无法构造com的实例。谷歌。云数据存储。钥匙   Java递归中的堆栈溢出错误   java通过结构化设计模式重构冗余代码   javascript使用Selenium IDE 2.9.1上传文件   JAVAutil。扫描仪在Java中将文本文件加载到对象中   这个JAVA程序的时间复杂度是多少   java Springboot+tomcat+ssh=连接链路故障   矢量Java不安全操作   用于Java不同生成代码的协议缓冲区gRPC protobuf生成器   java OSGi为什么我的包命名为“unknown0.0.0”和MANIFEST。MF文件被覆盖了吗?   java日期保持为空(Android)   使用stax解析器java解析xml   java有一种方法可以在运行时确定对象是否是使用Lambdaj创建的。关于()方法?