我正在尝试使用python中的vtkImageViewer2可视化RGB图像。该图像是灰度CTA图像(我已使用np.stack将其转换为3通道图像)和其红色通道中的蒙版的组合。我已经将3通道的numpy图片(CTA和掩码)转换为vtkImageData。
使用vtkImageViewer对其进行可视化时,可以正确显示图像(带有红色遮罩的灰度图像)。由于需要缩放和其他交互,因此我想使用vtkImageViewer2。但是,在这种情况下,蒙版显示为白色。我尝试使用lookuptable,但这会更改整个图像,并且灰度图像也会更改为蓝色。
有人做到了吗?
可能需要更改可视化工具,但需要选择CTA体积的切片。
这是代码的一部分:
#first generate image & mask combination
image = reader.GetOutput() #vtkImageData()
mask = maskReader.GetOutput()
# convert vtkImageData to numpy
scalars = image.GetPointData().GetScalars()
self.imgnumpy=vtk_to_numpy(scalars)
self.rgb_image = np.stack((self.imgnumpy,)*3, axis=-1)
sc = mask.GetPointData().GetScalars()
self.numpyMask=vtk_to_numpy(sc)
# generate image with a red mask
pos = self.numpyMask==1
redChannel = self.rgb_image[:,0]
redChannel[pos] = np.max(self.imgnumpy)
self.rgb_image[:, 0] = redChannel
# convert it to vtkImageData
im = numpy_to_vtk(self.rgb_image)
image3 = vtk.vtkImageData()
image3.SetDimensions(self.image.GetDimensions())
image3.SetSpacing(self.image.GetSpacing())
image3.SetOrigin(self.image.GetOrigin())
image3.GetPointData().SetScalars(im)
# visualize image with red mask
self.vtkWidget = QVTKRenderWindowInteractor()
self.axialViewer = vtk.vtkImageViewer2()
self.axialViewer.SetSliceOrientationToXY()
self.axialViewer.SetRenderWindow(self.vtkWidget.GetRenderWindow())
self.interactor = self.vtkWidget.GetRenderWindow().GetInteractor()
self.axialViewer.SetupInteractor(self.interactor)
maxIntensity = np.max(self.imgnumpy)
minIntensity = np.min(self.imgnumpy)
self.axialViewer.SetColorLevel((maxIntensity + minIntensity)*0.5)
self.axialViewer.SetColorWindow(maxIntensity - minIntensity)
self.axialViewer.SetSlice(0)
self.axialViewer.Render()
谢谢