MITK Geometry

来源:互联网 发布:mac版炒股软件 编辑:程序博客网 时间:2024/05/16 19:54

geometry用来表示数据的时间和空间几何属性。正确使用geometry需要了解MITK里三种不同坐标系:

The different coordinate types

The different coordinate types

  1. 世界坐标系
    • 世界坐标系反映了MITK中所有物体的实际空间坐标,是一个全局坐标系。
    • 世界坐标由mitk::Point3D表示。
    • geometry定义了世界坐标系下数据对象的offset、orientation、scale。
    • 世界坐标的单位一般为mm。
    • 对于image geometry,图像的原点在左下后角上的体像素的中心。
    • 如果没有涉及image geometry(没有定义离散的体像素),原点在坐下后角。
    • 索引坐标可以转换为世界坐标,方法是调用BaseGeometry::IndexToWorld()

这里写图片描述
Corner-based coordinates

这里写图片描述
Center-based image-coordinates

  1. 连续索引坐标

    • 用pixel spacing分割世界坐标并在计算时考虑offset。所以连续索引坐标可能是浮点数。
    • mitk::Point3D表示连续索引坐标。
    • 调用BaseGeometry::WorldToIndex()可获得连续索引坐标,这里&pt_mm是世界坐标系中的一个点。
  2. 索引坐标

    • 索引坐标是离散值,代表数据中的某个体像素。索引坐标由 itk::Index<3>表示。
    • 总的来讲,索引坐标是加了0.5个坐标值的连续索引坐标。
    • (0,0)表示2D图像的起始像素,(0,1)表示位于同行下一列的像素。
    • 调用BaseGeometry::WorldToIndex()可将世界坐标系转换为索引坐标系。

点和矢量的区别

如同ITK,MITK中点和矢量的概念不同。点表示坐标系中的一个位置,而矢量表示两个点之间的距离。offset在坐标系转换中可以影响点,但不会影响矢量(因为距离是不会变的)。

Geometry

BaseGeometry是MITK中所有geometry的父类,内含:

  • 一个空间上的bounding box,在索引坐标系中平行于坐标轴,可通过BaseGeometry::GetBoundingBox()获得。
  • 一个时间上的bounding box,以毫秒计算数据对象的时效,可通过BaseGeometry::GetTimeBounds()获得。
  • 一个Euclidean变换公式形式存储的位置信息,可让世界坐标和索引坐标互相转换。可通过BaseGeometry::GetIndexToWorldTransform()获得。
  • 其他属性(如原点、extent,……),可通过类说明文档获得相关信息。
  • 重要:isImageGeometry是一个标识符,表示坐标系的原点是否在体素中心。

BaseData的每一个子类都有一个TimeGeometry( 可通过BaseData::GetTimeGeometry()获得)。这个TimeGeometry保存有一个或多个BaseGeometry对象用来描述该对象所处的时间点,允许世界和索引坐标之间的转换并包含数据所处区域的bounding box。

表示时间有两种方式, TimePointType或TimeStepType。第一种方式类似于连续索引坐标,以毫秒为单位记录了从零时间点到该时间点的时间。第二种类似于索引坐标,为离散值,可以从GetNumberOfTimeSteps()得到,表示当前时间点经过了多少个time step。time point 和time step之间的转换通过TimeGeometry::TimeStepToTimePoint()或TimeGeometry::TimePointToTimeStep()。注意,对象不同,time step也可能不同,所以一般最好用time point计算对应的time step。另外,时间段上的time step也无需相同,这取决于TimeGeometry的使用。

0 0
原创粉丝点击