vtkPropPicker在图像处理中的应用

时间:2022-08-13 10:05:45

该文由Markdown编辑器编辑完成。

1. vtkPropPicker的类说明

关于vtkPropPicker的类说明,可以摘录VTK官方文档对于该类的说明。
http://www.vtk.org/doc/nightly/html/classvtkPropPicker.html#details
Pick an actor/prop using graphics hardware.
vtkPropPicker is used to pick an actor/prop given a selection point (in display coordinates) and a renderer. This class uses graphics hardware/rendering system to pick rapidly (as compared to using ray casting as does vtkCellPicker and vtkPointPicker). This class determines the actor/prop and pick position in world coordinates; point and cell ids are not determined.

翻译如下:
vtkPropPicker这个类是通过在渲染器屏幕坐标系中给定的一个点来拾取一个角色或属性。这个类相比于通过光线投射法来实现同样功能的vtkCellPicker和vtkPointPicker,通过使用显示设备或渲染系统更快地实现。这个类可以确定拾取的对象以及它在世界坐标系下的坐标,但是点或单元的id顺序无法确定。

2. vtkPropPicker在图像处理中的应用

在医学影像软件,医生需要知道图像上某一个点的灰度值,或者需要在这个点上面做一个标记,以便在另外的平面上确定这个点的位置……诸如此类的需求,都需要通过Pick的方法,来获取屏幕上的点对应的它在真实图像中的坐标位置。
以下可以通过Python展示一个vtkPropPicker的作用。这个例子的源代码如下链接:
http://www.vtk.org/Wiki/VTK/Examples/Python/Interaction/HighlightAPickedActor

这个例子首先随机地在窗口中放置几个颜色随机地小球,然后用户可以在窗口中拾取某一个小球,被拾取到的小球将会变为红色。

vtkPropPicker在图像处理中的应用
图1. 随机分布在窗口中,颜色和半径各异的小球

vtkPropPicker在图像处理中的应用
图2. 通过鼠标拾取某一个小球后,变为红色的小球

Python代码解读:
(1) 在屏幕中随机放置半径和颜色随机的15个小球:

NUMBER_OF_SPHERES = 15
for i in range(NUMBER_OF_SPHERES):
source = vtk.vtkSphereSource()

# random position and radius
x = vtk.vtkMath.Random(-5,5)
y = vtk.vtkMath.Random(-5,5)
z = vtk.vtkMath.Random(-5,5)
radius = vtk.vtkMath.Random(.5, 1.0)

source.SetRadius(radius)
source.SetCenter(x, y, z)
source.SetPhiResolution(11)
source.SetThetaResolution(21)

mapper = vtk.vtkPolyDataMapper()
mapper.SetInputConnection(source.GetOutputPort())
actor = vtk.vtkActor()
actor.SetMapper(mapper)

r = vtk.vtkMath.Random(.4, 1.0)
g = vtk.vtkMath.Random(.4, 1.0)
b = vtk.vtkMath.Random(.4, 1.0)
actor.GetProperty().SetDiffuseColor(r, g, b)
actor.GetProperty().SetDiffuse(.8)
actor.GetProperty().SetSpecular(.5)
actor.GetProperty().SetSpecularColor(1.0,1.0,1.0)
actor.GetProperty().SetSpecularPower(30.0)

renderer.AddActor(actor)

参考链接:

  1. VTK拾取相关的类
    http://blog.csdn.net/jane_yuhui/article/details/52189154
  2. 关于vtkPropPicker无法在空间中拾取vtkLineSource的讨论
    http://vtk.1045678.n5.nabble.com/Line-picking-td1253732.html
    http://public.kitware.com/pipermail/vtkusers/2013-September/081802.html