我不确定这里是否有任何 3D 切片器开发人员可以提供帮助,但我认为值得一试。我正在开发一个基于内窥镜检查模块的扩展。内窥镜检查模块从一组基准点创建路径模型。我正在使用此路径模型设置垂直于其遵循的路径的平面视图,然后在其中一个视口中显示该视图。
问题是,有时视图上的平面随机旋转关于平面法线(或路径平行),我不确定如何固定,所以方向是静态的。
def reslice_on_path(self, p0, pN, orientation='normal'):
fx=np.poly1d(np.polyfit([p0[0],pN[0]],[p0[1],pN[1]], 1))
fdx = np.polyder(fx)
normal_line = lambda x: (-1/fdx(p0[0]))*(x-p0[0])+p0[1]
t=np.array([p0[0]+0.00001,normal_line(p0[0]+0.00001),p0[2]], dtype='f')
t=t-p0
n=pN-p0
t.astype(float)
n.astype(float)
p0.astype(float)
sliceNode = slicer.mrmlScene.GetNodeByID("vtkMRMLSliceNodeGreen")
if orientation == 'normal': orientation = 0
elif orientation == 'tangent': orientation = 1
sliceNode.SetSliceToRASByNTP(n[0], n[1], n[2], t[0], t[1], t[2], p0[0], p0[1], p0[2], orientation)
sliceNode.Modified()
最有可能的问题是,当曲线切线方向在某些方向范围之间转换时,以翻转的方式计算曲线法线方向。
在 3D 切片器的最新版本中,有一个专用曲线节点 (vtkMRMLMarkupsCurveNode),它基于 Frenet-Serret 框架提供一致、平滑变化的曲线切线和法线方向。您可以使用这些方向进行卷重新切片。请参阅详细信息in this post。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(22条)