如何解决在 2D 图像上拟合 STL 文件
我使用了下面的代码,我想在图像上匹配 3D stl: 两个文件的大小相同,但是当您在两个不匹配的渲染器层中打开它们时,我尝试使用像素大小进行缩放,但它也不起作用。
#STL file
reader = vtk.vtkSTLReader()
reader.SetFileName(filename1)
reader.Update()
self.transform = vtk.vtkTransform()
#self.transform.Scale(0.25,0.25,0.25)
center = vtk.vtkCenterOfMass()
center.SetInputData(reader.GetOutput())
center.SetUseScalarsAsWeights(False)
center.Update()
center_x,center_y,center_z = center.GetCenter()
self.transform.Translate(-center_x,-center_y,-center_z)
self.transformFilter = vtk.vtkTransformPolyDataFilter()
self.transformFilter.SetTransform(self.transform)
self.transformFilter.SetInputConnection(reader.GetOutputPort())
self.transformFilter.Update()
mapper = vtk.vtkPolyDataMapper()
if vtk.VTK_MAJOR_VERSION <= 5:
mapper.SetInput(self.transformFilter.GetOutput())
else:
mapper.SetInputConnection(self.transformFilter.GetOutputPort())
self.actor = vtk.vtkActor()
self.actor.SetMapper(mapper)
#X ray File
readerX = vtk.vtkDICOMImageReader()
readerX.SetDirectoryName(pathDicomDir)
readerX.Update()
image_data = readerX.GetOutput()
reslice = vtk.vtkImageReslice()
reslice.SetInputConnection(readerX.GetOutputPort())
# Create a greyscale lookup table
table = vtk.vtkLookupTable()
table.SetRange(0,3000) # image intensity range
table.SetValueRange(0,1) # from black to white
table.SetSaturationRange(0.0,0.0) # no color saturation
table.SetRampToLinear()
table.Build()
# Map the image through the lookup table
color = vtk.vtkImageMapToColors()
color.SetLookupTable(table)
color.SetInputConnection(reslice.GetOutputPort())
# Create an image actor to display the image
actorX = vtk.vtkImageActor()
actorX.GetMapper().SetInputConnection(color.GetOutputPort())
self.background_renderer = vtk.vtkRenderer()
self.scene_renderer = vtk.vtkRenderer()
self.background_renderer.SetLayer(0)
self.background_renderer.InteractiveOff()
self.scene_renderer.SetLayer(1)
origin = image_data.GetOrigin()
spacing = image_data.GetSpacing()
extent = image_data.GetExtent()
camera = self.background_renderer.GetActiveCamera()
camera.ParallelProjectionOn()
xc = origin[0] + 0.5*(extent[0] + extent[1]) * spacing[0]
yc = origin[1] + 0.5*(extent[2] + extent[3]) * spacing[1]
xd = (extent[1] - extent[0] + 1) * spacing[0]
yd = (extent[3] - extent[2] + 1) * spacing[1]
d = camera.GetDistance()
camera.SetParallelScale(0.5 * yd)
camera.SetFocalPoint(xc,yc,0.0)
camera.SetPosition(xc,d)
self.vtkwidget = QVTKRenderWindowInteractor(self.centralwidget)
self.gridLayout.addWidget(self.vtkwidget,1,1)
self.vtkwidget.GetRenderWindow().AddRenderer(self.background_renderer)
self.vtkwidget.GetRenderWindow().AddRenderer(self.scene_renderer)
self.vtkwidget.GetRenderWindow().SetNumberOfLayers(2)
self.iren = self.vtkwidget.GetRenderWindow().GetInteractor()
self.iren.SetInteractorStyle(vtk.vtkInteractorStyleTrackballActor())
self.background_renderer.AddActor(actorX)
#self.scene_renderer.AddActor(self.actor)
self.iren.Start()
stl 文件太大,无法给你一张完美的照片。是相机问题还是缩放比例?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。