Mitk数据操作和渲染

一、数据操作

1. BaseRenderer

mitk::BaseRenderer 是mitk的核心渲染组件,

  • 定义了哪些mapper能够被使用

    1
    2
    3
    4
    5
    enum StandardMapperSlot
    {
    Standard2D = 1,
    Standard3D = 2
    };
  • 哪些方向可以被渲染

    1
    2
    3
    4
    5
    6
    7
    enum class ViewDirection
    {
    AXIAL = 0,
    SAGITTAL,
    CORONAL,
    THREE_D
    };
  • 所有创建出来的renderer都会被存储到静态变量中,可以直接通过静态方法获取

mitk::BaseRenderer中还存储了当前窗口渲染数据时的几何信息,这些信息是后续做数据操作的重要依据,包括缩放、旋转和平移。

1
2
3
itkGetConstObjectMacro(WorldTimeGeometry, TimeGeometry);
itkGetConstObjectMacro(CurrentWorldGeometry, BaseGeometry);
itkGetConstObjectMacro(CurrentWorldPlaneGeometry, PlaneGeometry);

几何信息包括WorldTimeGeometry、CurrentWorldGeometry、CurrentWorldPlaneGeometry

阅读全文 »

一、凸性质 (Convexity)

1. 引入

  1. 颜色混合
    颜色混合
    我们可以使用几种只包含R,G的颜色来进行混合从而得到第三种颜色,但是第三种颜色是否可以用这几种颜色勾兑,我们只有从数学上进行尝试,下面我们使用代码进行处理。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
def cal_porp_two(color1, color2, resultColor):
for i in range(1, 10):
for j in range(1, 10):
if ((color1[0] * i + color2[0] * j) % resultColor[0] == 0 and
(color1[1] * i + color2[1] * j) % resultColor[1] == 0):
print("two kind of colors mix proportion: color1", i, ", color2: ", j)


def cal_porp_three(color1, color2, color3, resultColor):
for i in range(1, 10):
for j in range(1, 10):
for k in range(1, 10):
mixed_color = tuple(map(lambda color1_i, color2_i, color3_i: i * color1_i + j * color2_i + k * color3_i, color1, color2, color3))
if (mixed_color[0] % resultColor[0] == 0 and
mixed_color[1] % resultColor[1] == 0):
print("three kind of colors mix proportion: color1", i, ", color2: ", j, ", color3: ", k)


if __name__ == "__main__":
color1 = (10, 35)
color2 = (16, 20)
color3 = (7, 15)
result_color = (12, 30)
cal_porp_two(color1, color2, result_color)
cal_porp_three(color1, color2, color3, (13, 22))

也即是通过穷举混合比例来进行判断我们是否可以通过混合得到第三种颜色,从代码也可以看出这种方法的时间复杂度是非常高的,三种的时间复杂度为,如果要是4种、5种甚至更多呢?

接下来我们可以通过几何的方式来对数据进行解释,来尝试降低时间复杂度

阅读全文 »
0%