3D slicer获取segment相关数据(centroid质心,ROI体表面积等)

以获取质心为例(以中心点为坐标原点,坐标含负数)

目录

目录

3Dslicer

区段统计Segment statistics

标注图统计Labelmap statistics

标量体积统计Scalar volume

闭合曲面统计Closed surface statistics

python控制台


3Dslicer

区段统计Segment statistics

这是一个用于计算与分割结构相关的统计数据的模块,例如体积、表面积、平均强度以及每个分割的各种其他指标。

标注图统计Labelmap statistics

标注图统计数据是使用段的二进制标注图表示形式计算的。

  • 体素计数:片段中的体素数

  • 体积 mm3 分段的体积(以 mm3 为单位)

  • 体积 cm3 以 cm3 为单位的段的体积

  • 质心:以 RAS 坐标表示的线段的质心

  • 费雷特直径:可以包含整个段的球体的直径

  • 表面积 mm2:以 mm2 为单位的段的表面积

  • 圆度:段的圆度。根据球体的面积之比计算,从费雷特直径减去实际面积。值 1 表示球形结构。请参阅此处的详细定义。

  • 平坦度:线段的平坦度。从第二个最小主力矩的比值的平方根乘以最小值计算。值 0 表示平面结构。请参阅此处的详细定义。

  • 伸长率:刀头的伸长率。从第二大主力矩的平方根乘以第二小的比值计算。请参阅此处的详细定义。

  • 主力矩:线段每个轴的主要惯性矩

  • 主轴:线段旋转的主轴(Principal axis为径向坐标,Orientation about principal axis为轴向坐标)

  • 定向边界框:包含线段的非轴对齐边界框。主轴方向用于定向边界框。

  • 旋转主轴(或主方向)是相对于某个点(通常是质心)定义的性矩张量(在上一节中介绍)的特征向量。相应的特征值称为主惯性矩。由于惯性矩张量是相对于空间中的点定义的,因此主轴都通过该点

    (通常是质心)。

  • 径:半径,轴:中心轴,周:圆周

标量体积统计Scalar volume

  • 体素计数:片段中的体素数

  • 体积 mm3 分段的体积(以 mm3 为单位)

  • 体积 cm3 以 cm3 为单位的段的体积

  • 最小值:线段中的最小标量值

  • 最大值:线段中的最大标量值

  • 平均值:线段中的平均标量值

  • 中位数:细分中的标量值中位数

  • 标准偏差:线段中标量值的标准偏差(使用校正后的样本标准偏差公式计算)

闭合曲面统计Closed surface statistics

  • 表面积 mm2:以 mm2 为单位的段的体积

  • 体积 mm3 分段的体积(以 mm3 为单位)

  • 体积 cm3 以 cm3 为单位的段的体积

python控制台

#used LabelmapSegmentStatistics to pull the centroid for each segment in the Segmentation
#Then I used the centroid coordinates to generate new spherical segments with a 1mm diameter (or radius?)
#These can be used with Segment statistics to query core lesion locations based on anatomical atlases
#用LabelmapSegmentStatistics为分割中的每个线段拉出质心,然后使用质心坐标生成直径为1 mm(或半径?)的新球形线段。
#这些数据可与分段统计数据结合使用,以根据解剖图谱查询核心位置

import numpy as np
import SegmentStatistics
segmentationNode = slicer.util.getNode("Segmentation")#
volume_node = slicer.util.getNode("Volume")
segmentation = segmentationNode.GetSegmentation()
segnum = segmentation.GetNumberOfSegments()
for i in range(segnum):
    segment = segmentation.GetNthSegment(i) 
    segmentId = segmentationNode.GetSegmentation().GetSegmentIdBySegment(segment)
    segmentName = segment.GetName()
    segStatLogic = SegmentStatistics.SegmentStatisticsLogic()
    segStatLogic.getParameterNode().SetParameter("Segmentation", segmentationNode.GetID())
    segStatLogic.getParameterNode().SetParameter("LabelmapSegmentStatisticsPlugin.centroid_ras.enabled", str(True))
    segStatLogic.computeStatistics()
    stats = segStatLogic.getStatistics()
    print(segmentName)
    centroid_ras = stats[segmentId,"LabelmapSegmentStatisticsPlugin.centroid_ras"]
    print(centroid_ras)
    tumorCentroid = vtk.vtkSphereSource()
    tumorCentroid.SetCenter(centroid_ras)
    tumorCentroid.SetRadius(1)
    tumorCentroid.Update()
    CentroidSegmentName = segmentName + "-centroid"
    segmentId = segmentationNode.AddSegmentFromClosedSurfaceRepresentation(tumorCentroid.GetOutput(), CentroidSegmentName, [1.0,0.0,0.0])

 

 

参考链接:

段统计信息 — 3D 切片器文档 (slicer.readthedocs.io)

猜你喜欢

转载自blog.csdn.net/qq_28838891/article/details/127448325
今日推荐