[vtkusers] vtkDistanceWidget and Dicom Images

John Drescher drescherjm at gmail.com
Tue Oct 19 14:27:19 EDT 2010


On Tue, Oct 19, 2010 at 2:26 PM, John Drescher <drescherjm at gmail.com> wrote:
> On Tue, Oct 19, 2010 at 2:11 PM, John Drescher <drescherjm at gmail.com> wrote:
>> On Tue, Oct 19, 2010 at 2:06 PM, Leonardo M. Ramé <l.rame at griensu.com> wrote:
>>> On 2010-10-19 13:53:19 -0400, David Doria wrote:
>>>> >
>>>> > I'm going crazy trying to find an example on the web, could you give me
>>>> > one?
>>>>
>>>>
>>>> This explains the filter:
>>>> http://www.vtk.org/doc/nightly/html/classvtkImageChangeInformation.html
>>>>
>>>> And this demonstrates it:
>>>> http://www.vtk.org/Wiki/VTK/Examples/Cxx/Images/CenterAnImage
>>>>
>>>> David
>>>
>>> Thanks, after checking the examples I come up with this:
>>>
>>> // get pixel spacing and apply to image
>>> double lPixelSpacing;
>>> m_qdicomImage->getDataSet()->findAndGetFloat64(DCM_PixelSpacing, lPixelSpacing, 0, false);
>>> m_imageDataVTK->SetSpacing(lPixelSpacing, lPixelSpacing,lPixelSpacing);
>>>
>>> // change image information
>>> vtkImageChangeInformation * in = vtkImageChangeInformation::New();
>>> in->SetInput(m_imageDataVTK);
>>> in->SetOutputSpacing(1.0, 1.0, 1.0);
>>> in->Update();
>>> m_imageDataVTK = in->GetOutput();
>>> ...
>>>
>>> Aparently in->SetOutputSpacing is reverting the changes that SetSpacing
>>> did. The measurement is multiplied by 5 (1 / 0.20), and I'm getting the
>>> same results like if I don't apply SetSpacing.
>>>
>>> Any hint?
>>>
>>
>> Don't create a loop. Put the vtkImageChangeInformation right after the
>> reader and before it gets to m_imageDataVTK.
>>
>
> Wait a minute. I am doing that myself with this code. That works..
>
> if (fZAxisSpacing > 0.0) {
>        double spacing[3];
>        m_pImage->GetSpacing(spacing);
>        pChangeInfo->SetInput(m_pImage);
>        spacing[2] = fZAxisSpacing;
>        pChangeInfo->SetOutputSpacing(spacing);
>        pChangeInfo->Update();
>        m_pImage = pChangeInfo->GetOutput();
> }
>
> This changes the z axes spacing because the vtkGDCMImageReader that I
> use does not get the spacing correct in that direction for all image
> types that I need to read.
>

pChangeInfo was defined before the conditional as:

vtkSmartPointer<vtkImageChangeInformation> pChangeInfo =
			vtkSmartPointer<vtkImageChangeInformation>::New();

John



More information about the vtkusers mailing list