[vtkusers] ImagePlaneWidget mapping ImageData with 3 scalars to rgb
Lars Matthäus
lars.matthaeus at web.de
Mon Sep 28 10:29:33 EDT 2015
I have a DataSet with 3 scalar components, e.g. from loading a stack of
rgb images with the vtkJPEGReader. I want to slice through it using a
vtkImagePlaneWidget. Unfortunately, I cannot get the widget to display
the rgb image; I only get a grey image.
I played with the vtkLookupTable::SetVectorModeToRGBColors successfully
to display the image as rgb using a vtkImageSliceMapper, but when I use
the same lookup table for the vtkImagePlaneWidget, I get a grey image again.
I attach some java sample code comparing the vtkImagePlaneWidget and the
vtkImageSliceMapper as well as the output of the program.
Any help appreciated!
Lars
-------------- next part --------------
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import vtk.vtkCanvas;
import vtk.vtkImageData;
import vtk.vtkImagePlaneWidget;
import vtk.vtkImageSlice;
import vtk.vtkImageSliceMapper;
import vtk.vtkJPEGReader;
import vtk.vtkLookupTable;
import vtk.vtkNativeLibrary;
public class SimpleVTK extends JPanel implements ActionListener {
private static final long serialVersionUID = 1L;
private JButton exitButton;
// Load VTK library and print which library was not properly loaded
static {
if (!vtkNativeLibrary.LoadAllNativeLibraries()) {
for (vtkNativeLibrary lib : vtkNativeLibrary.values()) {
if (!lib.IsLoaded()) {
System.out.println(lib.GetLibraryName() + " not loaded");
}
}
}
vtkNativeLibrary.DisableOutputWindow(null);
}
public SimpleVTK() {
super(new BorderLayout());
// create vtk display with data
vtkCanvas renWin = new vtkCanvas();
createVtkInput(renWin);
// Add Java UI components
exitButton = new JButton("Exit");
exitButton.addActionListener(this);
add(renWin, BorderLayout.CENTER);
add(exitButton, BorderLayout.SOUTH);
}
void createVtkInput(vtkCanvas renWin) {
// create input
vtkJPEGReader reader = new vtkJPEGReader();
reader.SetFileName("C:/VTKData/Data/beach.jpg");
vtkImageData id = reader.GetOutput();
reader.Update();
int[] dim = id.GetDimensions();
// lookup table: map the 3 scalars to rgb
vtkLookupTable table = new vtkLookupTable();
table.SetRampToLinear();
table.SetRange(0.0, 255.0);
table.SetValueRange(0.0, 1.0);
table.SetSaturationRange(0.0, 0.0);
table.SetVectorModeToRGBColors();
table.Build();
// image plane widget
vtkImagePlaneWidget ipw = new vtkImagePlaneWidget();
ipw.SetInteractor(renWin.getRenderWindowInteractor());
ipw.SetInputData(id);
ipw.SetPlaneOrientation(2);
ipw.GetColorMap().SetLookupTable(table);
ipw.GetColorMap().SetOutputFormatToRGB();
ipw.On();
// slice mapper
vtkImageSliceMapper imageMapper = new vtkImageSliceMapper();
imageMapper.SetInputData(id);
vtkImageSlice image = new vtkImageSlice();
image.SetMapper(imageMapper);
image.GetProperty().SetLookupTable(table);
image.SetPosition(1.5 * dim[0], 0, 0); // shift in x direction
renWin.GetRenderer().AddViewProp(image);
// proper initial display
renWin.GetRenderer().ResetCamera();
}
/** An ActionListener that listens to the button. */
@Override
public void actionPerformed(ActionEvent e) {
if (e.getSource().equals(exitButton)) {
System.exit(0);
}
}
public static void main(String s[]) {
JFrame frame = new JFrame("SimpleVTK");
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.getContentPane().setLayout(new BorderLayout());
frame.getContentPane().add(new SimpleVTK(), BorderLayout.CENTER);
frame.setSize(400, 400);
frame.setVisible(true);
}
}
-------------- next part --------------
A non-text attachment was scrubbed...
Name: vtk_ImagePlaneWidget_vs_ImageSliceMapper.jpg
Type: image/jpeg
Size: 18890 bytes
Desc: not available
URL: <http://public.kitware.com/pipermail/vtkusers/attachments/20150928/50a91c8e/attachment.jpg>
More information about the vtkusers
mailing list