[vtkusers] vtkImageReslice and vtkImageViewer

Talita Perciano talitaperciano at gmail.com
Wed Sep 24 01:27:42 EDT 2008


Thank you bu I just did that and I still get GetWholeZMax() returning 0...

2008/9/24 David Gobbi <david.gobbi at gmail.com>

> Hi Talita,
>
> When reslice->SetOutputDimensionality(2) is used, the output of
> vtkImageReslice contains only one slice.  That is why GetWholeZMax()
> is returning zero.
>
> To just change the axes without doing anything else to the image, use
> SetOutputDimensionality(3) and do not set the "center" in the
> resliceAxes.
>
>    David
>
>
>
> On Tue, Sep 23, 2008 at 10:16 PM, Talita Perciano
> <talitaperciano at gmail.com> wrote:
> > Hello,
> >
> > I'm trying to read DICOM image slices and to view them with a
> > vtkImageViewer. The thing is that I want to change the axis before I view
> > the slices, that is, if the slices are in axial direction I want to
> change
> > it to coronal direction. I'm doing that using the a vtkImageReslice. The
> > thing is that when I pass the DICOM reader directly to the vtkImageViewer
> > things work fine. However, when I use first the vtkImageReslice and than
> > pass it to the vtkImageViewer I can't view the slices anymore. It's
> strange
> > because when I call GetWholeZMax it returns 0. Does anybody could help
> me?
> > The code is attached.
> >
> > Thank you,
> >
> > Talita
> >
> >
> -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
> >
> >         std::string strFolderPath = "/home/talita/Desktop/COMUNIX/Neck
> > 1HEAD_NECK_PETCT/CT HEAD-NK 5.0 B30s";
> >
> >         vtkDICOMImageReader *reader = vtkDICOMImageReader::New();
> >         reader->SetDirectoryName (strFolderPath.c_str());
> >         reader->Update();
> >
> >     reader->SetDataScalarTypeToUnsignedShort();
> >       reader->UpdateWholeExtent();
> >
> >       // Calculate the center of the volume
> >       reader->GetOutput()->UpdateInformation();
> >       int extent[6];
> >       double spacing[3];
> >       double origin[3];
> >       reader->GetOutput()->GetWholeExtent(extent);
> >       reader->GetOutput()->GetSpacing(spacing);
> >       reader->GetOutput()->GetOrigin(origin);
> >
> >       double center[3];
> >       center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]);
> >       center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]);
> >       center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]);
> >
> >       // Matrices for axial, coronal, sagittal, oblique view orientations
> >       static double axialElements[16] = {
> >                1, 0, 0, 0,
> >                0, 1, 0, 0,
> >                0, 0, 1, 0,
> >                0, 0, 0, 1 };
> >
> >       static double coronalElements[16] = {
> >            1, 0, 0, 0,
> >            0, 0, 1, 0,
> >            0,-1, 0, 0,
> >            0, 0, 0, 1 };
> >
> >       static double sagittalElements[16] = {
> >            0, 0,-1, 0,
> >            1, 0, 0, 0,
> >            0,-1, 0, 0,
> >            0, 0, 0, 1 };
> >
> >       //static double obliqueElements[16] = {
> >       //         1, 0, 0, 0,
> >       //         0, 0.866025, -0.5, 0,
> >       //         0, 0.5, 0.866025, 0,
> >       //         0, 0, 0, 1 };
> >
> >       // Set the slice orientation
> >       vtkMatrix4x4 *resliceAxes = vtkMatrix4x4::New();
> >       resliceAxes->DeepCopy(coronalElements);
> >       // Set the point through which to slice
> >       resliceAxes->SetElement(0, 3, center[0]);
> >       resliceAxes->SetElement(1, 3, center[1]);
> >       resliceAxes->SetElement(2, 3, center[2]);
> >
> >       // Extract a slice in the desired orientation
> >       vtkImageReslice *reslice = vtkImageReslice::New();
> >       reslice->SetInputConnection(reader->GetOutputPort());
> >       reslice->SetOutputDimensionality(2);
> >       reslice->SetResliceAxes(resliceAxes);
> >       //reslice->SetInterpolationModeToNearestNeighbor();
> >
> >       // Create a greyscale lookup table
> >       vtkLookupTable *table = vtkLookupTable::New();
> >       table->SetRange(0, 2000); // image intensity range
> >       table->SetValueRange(0.0, 1.0); // from black to white
> >       table->SetSaturationRange(0.0, 0.0); // no color saturation
> >       table->SetRampToLinear();
> >       table->Build();
> >
> >       // Map the image through the lookup table
> >       vtkImageMapToColors *color = vtkImageMapToColors::New();
> >       color->SetLookupTable(table);
> >       color->SetInputConnection(reslice->GetOutputPort());
> >
> >     vtkImageViewer *viewer = vtkImageViewer::New();
> >
> >     viewer->SetInput(color->GetOutput());
> >     printf("\n%d\n",viewer->GetWholeZMax());
> >     viewer->SetZSlice(35);
> >     viewer->SetColorWindow(2000);
> >     viewer->SetColorLevel(1000);
> >     viewer->Render();
> >
> >
> > _______________________________________________
> > This is the private VTK discussion list.
> > Please keep messages on-topic. Check the FAQ at:
> > http://www.vtk.org/Wiki/VTK_FAQ
> > Follow this link to subscribe/unsubscribe:
> > http://www.vtk.org/mailman/listinfo/vtkusers
> >
> >
>



-- 
Talita Perciano
Instituto de Matemática e Estatísitca
Universidade de São Paulo - USP
Doutoranda em Ciência da Computação
São Paulo, SP, Brasil
Tel: +55 11 8826 7092

"Success is not final, failure is not fatal: it is the courage to continue
that counts."
(Winston Churchill)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20080924/2eb89baa/attachment.htm>


More information about the vtkusers mailing list