<div dir="ltr">Hello,<br><br>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.<br>
<br>Thank you,<br><br>Talita<br clear="all"><br>-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------<br>
<br> std::string strFolderPath = "/home/talita/Desktop/COMUNIX/Neck 1HEAD_NECK_PETCT/CT HEAD-NK 5.0 B30s";<br><br> vtkDICOMImageReader *reader = vtkDICOMImageReader::New();<br> reader->SetDirectoryName (strFolderPath.c_str());<br>
reader->Update();<br><br> reader->SetDataScalarTypeToUnsignedShort();<br> reader->UpdateWholeExtent(); <br><br> // Calculate the center of the volume<br> reader->GetOutput()->UpdateInformation();<br>
int extent[6];<br> double spacing[3];<br> double origin[3];<br> reader->GetOutput()->GetWholeExtent(extent);<br> reader->GetOutput()->GetSpacing(spacing);<br> reader->GetOutput()->GetOrigin(origin);<br>
<br> double center[3];<br> center[0] = origin[0] + spacing[0] * 0.5 * (extent[0] + extent[1]); <br> center[1] = origin[1] + spacing[1] * 0.5 * (extent[2] + extent[3]); <br> center[2] = origin[2] + spacing[2] * 0.5 * (extent[4] + extent[5]); <br>
<br> // Matrices for axial, coronal, sagittal, oblique view orientations<br> static double axialElements[16] = {<br> 1, 0, 0, 0,<br> 0, 1, 0, 0,<br> 0, 0, 1, 0,<br> 0, 0, 0, 1 };<br>
<br> static double coronalElements[16] = {<br> 1, 0, 0, 0,<br> 0, 0, 1, 0,<br> 0,-1, 0, 0,<br> 0, 0, 0, 1 };<br><br> static double sagittalElements[16] = {<br> 0, 0,-1, 0,<br>
1, 0, 0, 0,<br> 0,-1, 0, 0,<br> 0, 0, 0, 1 };<br><br> //static double obliqueElements[16] = {<br> // 1, 0, 0, 0,<br> // 0, 0.866025, -0.5, 0,<br> // 0, 0.5, 0.866025, 0,<br>
// 0, 0, 0, 1 };<br><br> // Set the slice orientation<br> vtkMatrix4x4 *resliceAxes = vtkMatrix4x4::New();<br> resliceAxes->DeepCopy(coronalElements);<br> // Set the point through which to slice<br>
resliceAxes->SetElement(0, 3, center[0]);<br> resliceAxes->SetElement(1, 3, center[1]);<br> resliceAxes->SetElement(2, 3, center[2]);<br> <br> // Extract a slice in the desired orientation<br>
vtkImageReslice *reslice = vtkImageReslice::New();<br> reslice->SetInputConnection(reader->GetOutputPort());<br> reslice->SetOutputDimensionality(2);<br> reslice->SetResliceAxes(resliceAxes);<br>
//reslice->SetInterpolationModeToNearestNeighbor();<br><br> // Create a greyscale lookup table<br> vtkLookupTable *table = vtkLookupTable::New();<br> table->SetRange(0, 2000); // image intensity range<br>
table->SetValueRange(0.0, 1.0); // from black to white<br> table->SetSaturationRange(0.0, 0.0); // no color saturation<br> table->SetRampToLinear();<br> table->Build();<br><br> // Map the image through the lookup table<br>
vtkImageMapToColors *color = vtkImageMapToColors::New();<br> color->SetLookupTable(table);<br> color->SetInputConnection(reslice->GetOutputPort());<br> <br> vtkImageViewer *viewer = vtkImageViewer::New();<br>
<br> viewer->SetInput(color->GetOutput());<br> printf("\n%d\n",viewer->GetWholeZMax());<br> viewer->SetZSlice(35);<br> viewer->SetColorWindow(2000);<br> viewer->SetColorLevel(1000);<br>
viewer->Render();<br><br></div>