获取CustusX中视频源/探针的视频帧的位置信息

时间:2015-06-05 13:12:02

标签: plugins

在用于实现GUIExtenderService的CustusX扩展的自定义插件中,我想要访问超声探头的流图像及其位置。

Documentation说:

  

VideoSource 有两个主要用户:渲染到屏幕并录制到磁盘。 VideoGraphics 包含Reps在视图中渲染时使用的可视化功能。 VideoGraphics 需要探测来提供位置信息。 探测器还使用自己的ProbeAdapterVideoSource(使用适配器模式)包装 VideoSource ,以添加VideoSource未知的特殊信息,例如像素间距。

据我了解,VideoSource负责图像,Probe负责该位置。如果我从VideoSource开始并连接到newFrame并使用getVtkImageData检索图像,我只会获取图像数据。所以问题是:如何获得该帧的图像帧及其相应的位置信息? (通过VideoSourceProbe或其他方式)。

1 个答案:

答案 0 :(得分:1)

您需要Probe及相关对象的实例:

VisServicesPtr services = VisServices::create(context);
ToolPtr tool = services->trackingService->getTool("myprobe");
ProbePtr probe = tool->getProbe();
VideoSourcePtr video = probe->getRTSource();

现在您有tool,其中包含probe,其中包含videovideo提供图片流,toolprobe提供位置信息。根据{{​​3}},图像的位置可以表示为变换rMv,其中r是全局参考空间,v是以毫米为单位的图像空间。要转换为像素,请乘以图像间距。 rMv可以使用:

找到
Transform3D rMpr, prMt, tMu, uMv, rMv;
rMpr = services->patientModelService->get_rMpr();
prMt = tool->get_prMt();
tMu = probe->getSector()->get_tMu();
uMv = probe->getSector()->get_uMv();
rMv = rMpr*prMt*tMu*uMv;

变换rMpr是患者注册,如果您只进行流式传输,则为身份。

现在,像素位置p(以像素为单位)可以使用:

转换为全局空间r
Vector3D p_v(p[0]*spacing[0], p[1]*spacing[1])    
Vector3D p_r = rMv.coord(p_v);

注意:以这种方式获得的位置将是最后一次采样的跟踪位置,不一定与图像帧同时获得。插入下一个跟踪位置(在图像帧之后重现)可以提高准确性,但这取决于具体的用例。

相关问题