[英]adjust window level in dicom file using vtk
I am trying to change image window width and level. 我正在尝试更改图像窗口的宽度和水平。
I understood that I need to create vtkWindowLevelLookupTable. 我了解我需要创建vtkWindowLevelLookupTable。 and attach it to mapper.
并将其附加到映射器。 like described here .
就像这里描述的那样。
I don't understand where this mapper comes from and what is it's input connection. 我不知道这个映射器来自哪里,它是什么输入连接。 my code:
我的代码:
_reader2 = vtkDICOMImageReader.New();
_reader2.SetDirectoryName(path);
_reader2.Update();
// Visualize
_ImageViewer2 = vtkImageViewer2.New();
_ImageViewer2.SetInputConnection(_reader2.GetOutputPort());
var image = _ImageViewer2.GetInput();
// get range of slices (min is the first index, max is the last index)
_ImageViewer2.GetSliceRange(ref _MinSlice2, ref _MaxSlice2);
this.vScrollBar2.Maximum = _MaxSlice2 + 1 + vScrollBar2.LargeChange - 1;
Debug.WriteLine("slices range from : " + _MinSlice2.ToString() + " to " + _MaxSlice2.ToString());
vtkRenderWindow renderWindow = renderWindowControl2.RenderWindow;
_interactorStyle2 = vtkInteractorStyleImage.New();
_interactorStyle2.MouseWheelForwardEvt += new vtkObject.vtkObjectEventHandler(interactor_MouseWheelForwardEvt2);
_interactorStyle2.MouseWheelBackwardEvt += new vtkObject.vtkObjectEventHandler(interactor_MouseWheelBackwardEvt2);
renderWindow.GetInteractor().LeftButtonPressEvt += new vtkObject.vtkObjectEventHandler(renderWindowControl2_Click);
renderWindow.GetInteractor().SetInteractorStyle(_interactorStyle2);
renderWindow.GetRenderers().InitTraversal();
vtkRenderer ren;
while ((ren = renderWindow.GetRenderers().GetNextItem()) != null)
ren.SetBackground(0.0, 0.0, 0.0);
_ImageViewer2.SetRenderWindow(renderWindow);
_ImageViewer2.GetRenderer().AddActor2D(sliceStatusActor);
_ImageViewer2.GetRenderer().AddActor2D(usageTextActor);
_ImageViewer2.SetSlice(_MinSlice2);
// Compute a simple window/level based on scalar range
vtkWindowLevelLookupTable wlLut = new vtkWindowLevelLookupTable();
double range = _reader2.GetOutput().GetScalarRange()[1] - _reader2.GetOutput().GetScalarRange()[0];
double level = (_reader2.GetOutput().GetScalarRange()[1] +
_reader2.GetOutput().GetScalarRange()[0]) / 2.0;
wlLut.SetWindow(1000);
wlLut.SetLevel(-1000);
// Create a mapper and actor.
vtkDataSetMapper mapper = new vtkDataSetMapper();
mapper.SetInputConnection(_reader2.GetOutputPort());
mapper.SetLookupTable(wlLut);
// mapper.SetScalarRange(0, 255);
vtkActor actor = new vtkActor();
var actors = _ImageViewer2.GetRenderer().GetActors();
actor.SetMapper(mapper);
// Add the actors to the scene
_ImageViewer2.GetRenderer().AddActor(actor);
_ImageViewer2.Render();
The vtkImageViewer2
has the Window/Level functionality already implemented. vtkImageViewer2
具有已经实现的窗口/级别功能。
You can access it like: 您可以像这样访问它:
myImageViewer2.GetWindowLevel().SetWindow(1000);
myImageViewer2.GetWindowLevel().SetLevel(-1000);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.