Res: [vtkusers] Extracting Slices using vtkImageReslice - Calculating extract spacing factor

Wagner Sales wsalles2003 at yahoo.com.br
Sat Apr 21 15:08:35 EDT 2007


Hi David,

I was tested then now. But the results are empty slices yet. 
The spacing values are (just to better explain):
Before SetOutputSpacing:
- 0.9765625
- 0.9765625
- 3.4000...

When I set OutputSpacing to minSpacing, the spacing in all axis will be 0.9765625, wich are the minimum spacing in all axis.
These two values are to coronal and sagittal axis, and the series are in transversal axis, wich have the 3.4000.... spacing.
After the update information, the spacing will return to the original value. 
Just to make simple, I'll use only coronal axys:
- The result for an GetExtent(int[6]) are 0 to 511 to this axy;
- Using the value 0.97... ( spacing before SetOutputSpacing and after UpdateInformation ), only 255 slices will be valid.
- After multiplication ( 0.97... * 0.5 ) all 511 slices are writed. 
I was used the factor 0.5 just because only  half of the 511slices are ok.
I'm a little bit confused if the axis spacing value are not ok, or information at my dataset ( I think a good dataset, are from OsiriX ) are wrong, or I'm completely wrong...
Just because that I was asked by "how factor I can safely use?".
If you have some idea, thks in advance.


Regards,
Wagner Sales




----- Mensagem original ----
De: David Gobbi <dgobbi at atamai.com>
Para: Wagner Sales <wsalles2003 at yahoo.com.br>
Cc: vtkusers at vtk.org
Enviadas: Sábado, 21 de Abril de 2007 13:10:06
Assunto: Re: [vtkusers] Extracting Slices using vtkImageReslice - Calculating extract spacing factor

Hi Wagner,

I think that I know what the error in your code is.

Since you are setting the OutputSpacing() to minSpacing.  This means
the spacing of the output will always be minSpacing regardless of
whether you are looking at the x spacing, y spacing or z spacing.

Maybe what you should do instead is get the input spacing:

  m_ImageData->UpdateInformation();
  m_ImageData->GetSpacing()[i];

This will return the original spacing as stored in the DICOM file,
which will allow you to properly go through the data set
slice-by-slice.

 - David


On 4/21/07, Wagner Sales <wsalles2003 at yahoo.com.br> wrote:
>
> Hi all,
>
> I'm extracting slices from a DICOM dataset and writing on disk. The aproach
> are following:
> - Load using vtkDICOMImageReader;
> - Extract slices using vtkImageReslice.
> - Write using vtkPNGImageWriter
>
> -- CODE:
>  m_Reslicer->SetInput(m_ImageData);
>      m_Reslicer->SetInterpolationModeToLinear();
>      double minSpacing = fabs(spacing[0]);
>      if (fabs(spacing[1]) < minSpacing)
>      {
>      minSpacing = fabs(spacing[1]);
>      }
>      if (fabs(spacing[2]) < minSpacing)
>      {
>      minSpacing = fabs(spacing[2]);
>      }
>      m_Reslicer->SetOutputSpacing(minSpacing, minSpacing,
> minSpacing);
>      m_Reslicer->GetOutput()->UpdateInformation();
>      m_Reslicer->SetOutputDimensionality(2);
>        m_Reslicer->SetResliceAxes(m_Matrix);
>      m_Reslicer->GetOutput()->UpdateInformation();
>      double point[4];
>      double temp[4];
>      point[0] = 0.0;
>      point[1] = 0.0;
>      switch(m_Axy)
>      {
>          case VolumeRepresentation::Coronal:
>              point[2] =
> m_Reslicer->GetOutput()->GetSpacing()[0] * 0.5 // what's
> are the factor?;
>                break;
>          case VolumeRepresentation::Saggital:
>              point[2] =
> m_Reslicer->GetOutput()->GetSpacing()[1] * 0.5 // what's
> are the factor?;
>              break;
>          case VolumeRepresentation::Transversal:
>              point[2] =
> m_Reslicer->GetOutput()->GetSpacing()[2];
>              break;
>      }
>      vtkMatrix4x4 *matrix = m_Reslicer->GetResliceAxes();
>      point[3] = 1.0;
>          matrix->MultiplyPoint(point, temp);
>          matrix->SetElement(0, 3, temp[0]);
>          matrix->SetElement(1, 3, temp[1]);
>          matrix->SetElement(2, 3, temp[2]);
>      m_Reslicer->Update();
>      m_Slice->DeepCopy(m_Reslicer->GetOutput());
>      return m_Slice;
>
>
> When I extract slices from the transversal axis, all are extracted ok, but
> when I extract from coronal and sagittal axis, a lot of slices are empty.
> After some playing, I was discovered that's my error are these lines:
>
>     point[2] = m_Reslicer->GetOutput()->GetSpacing()[];
>
> Then I was multiplied, when extracting coronal or sagittal slices, like
> showed in the code.
> Works fine! No empty slices anymore! But, the factor are fixed, and I don't
> know how to calculate the factor 0.5.
> I'm completely wrong? Someone can help?
>
> Thks in advance,
>
> Wagner Sales
>
>
>
>
>
> __________________________________________________
> Fale com seus amigos de graça com o novo Yahoo! Messenger
> http://br.messenger.yahoo.com/
> _______________________________________________
> 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
>
>
_______________________________________________
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






__________________________________________________
Fale com seus amigos  de graça com o novo Yahoo! Messenger 
http://br.messenger.yahoo.com/ 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20070421/3de6392e/attachment.htm>


More information about the vtkusers mailing list