[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