[vtkusers] vtkImageReslice zoomed performance - no clipping?

Henning Meyer tutmann at gmail.com
Fri Jun 25 19:08:27 EDT 2010


Oh - this is obviously more complex than I expected it to be.
So let me be more precise:
My goal: Have a full-Widget View of a cross section slice of a 3D
Volume. This slice should be interactively modified (Zoom, Rotations,
Translations).

Right now I have:
vtkImageReslice->vtkImageMapToWindowLevelColors->vtkImageActor->vtkRenderer->QVTKWidget

To modifiy my slice, I modify a transform and set it via
vtkImageReslice::SetResliceAxes

Is that the correct setup?
Why can't the vtkImageReslice set its parameters accordingly, once the
Widget geometry changes?
What parameters should I setup in what way? Also change camera?

Another question: What do I have to do in order to refresh the
Rendering after changing the imagedata? My calls to Render(); seem to
be ignored? I even tried vtkImageData::Update() - it didn't help.

Thank you!

Henning

2010/6/25 David Gobbi <david.gobbi at gmail.com>:
> Saying that it's displayed in a QVTKWidget does not tell me much... I
> don't know if you are using an ImageViewer, and ImageViewer2, and
> ImageActor, or a Texture to display the image.
>
> For myself, I always use ImageActor to display images, and always
> catch events so that I can set the reslice parameters and the camera
> parameters for the window size.
>
>  David
>
>
> On Fri, Jun 25, 2010 at 1:04 PM, Henning Meyer <tutmann at gmail.com> wrote:
>> David,
>>
>> thank you very much!
>> That helped a lot. So I have to catch all resize-Events for my
>> QVTKWidget and adjust OutputExtent and OutputOrigin properly, right?
>> Odd thing is - still my reslice seems to be scaled up in QVTKWidget,
>> even after setting   m_reslice->SetOutputSpacing(1,1,1);
>>
>> What could be the reason?
>>
>> Henning
>>
>> 2010/6/25 David Gobbi <david.gobbi at gmail.com>:
>>> Hi Henning,
>>>
>>> The behaviour of vtkImageReslice can be counterintuitive, but be
>>> assured that its behaviour is correct.
>>>
>>> Probably the best way to think about it, is that vtkImageReslice
>>> presents a "viewport" into the image that you are reslicing.  This
>>> "viewport" is a rectangle with its lower-left corner set by
>>> reslice->SetOutputOrigin(), and its size set by
>>> reslice->SetOutputExtent().  The "pixel size" of the viewport is set
>>> by reslice->SetOutputSpacing().
>>>
>>> After this basic "viewport" has been set up with
>>> SetOutputOrigin()/Extent()/Spacing(), the ResliceAxes() are used to
>>> set its position and orientation with respect to the volume, i.e.
>>> ResliceAxes() applies a transform to the "viewport".  The transformed
>>> viewport is the slice that you will end up slicing from the volume.
>>>
>>> It is most useful to define the "viewport" so that (0,0,0) is at the
>>> center of the viewport, e.g. if you want to produce a 256x256 slice
>>> with pixel spacing of (1mm, 1mm) you would do this:
>>>
>>> reslice->SetOutputExtent(0,255,0,255,0,0);
>>> reslice->SetOutputSpacing(1,1,1);
>>> reslice->SetOutputOrigin(-127.5,-127.5,0.0);
>>>
>>> Then you would set the ResliceAxes to transform this "viewport" to
>>> somewhere inside the volume.
>>>
>>> Basically, you should always set the OutputExtent(), OutputSpacing(),
>>> and OutputOrigin() whenever you want to do anything sophisticated with
>>> vtkImageReslice.
>>>
>>> The default Extent/Origin/Spacing values are set that way as a flag
>>> for vtkImageReslice to create its own viewport according to some
>>> simplistic rules that usually don't give people what they want.  That
>>> is why you should always set these values.
>>>
>>>   David
>>>
>>>
>>> On Fri, Jun 25, 2010 at 7:33 AM, Henning Meyer <tutmann at gmail.com> wrote:
>>>> Hi David,
>>>>
>>>> thank you for your explanation.
>>>> I still can't help but get the impression something is odd there.
>>>> When I call
>>>> m_reslice->SetOutputExtent(0,100,0,100,0,0);
>>>> I get a nice square clipped area, which seems to be scaled up in my QVTKWidget.
>>>>
>>>> And when I start to use
>>>> m_reslice->SetResliceAxes(myTransform);
>>>> this clipped area will move inside (even outside) my QVTKWidget.
>>>>
>>>> So - what is going on here? Can I help to solve this issue?
>>>>
>>>> Henning
>>>>
>>>> Btw: When I never call SetOutputExtent, I get an OutputExtent of:
>>>> -2147483648 ,2147483647 ,-2147483648 ,2147483647 ,-2147483648 ,2147483647
>>>>
>>>>
>>>> 2010/6/24 David Gobbi <david.gobbi at gmail.com>:
>>>>> Hi Henning,
>>>>>
>>>>> The vtkImageReslice filter will clip the image if you call
>>>>> SetOutputExtent(), or if you don't set the OutputExtent, then clipping
>>>>> is done according the UpdateExtent set by the pipeline.  So those are
>>>>> the only ways to change the clipping: either set it manually with
>>>>> SetOutputExtent, or fiddle with the downstream filters to change the
>>>>> UpdateExtent.
>>>>>
>>>>> I've wanted to write an easier-to-use alternative to vtkImageReslice
>>>>> for a very long time (there really isn't any way to make
>>>>> vtkImageReslice "smarter" without breaking backwards compatibility in
>>>>> one way or another).
>>>>>
>>>>>   David
>>>>>
>>>>>
>>>>> On Thu, Jun 24, 2010 at 9:13 AM, Henning Meyer <tutmann at gmail.com> wrote:
>>>>>> Hi!
>>>>>>
>>>>>> When using vtkImageReslice, I get very low performance, once I zoom
>>>>>> into an image. It seems, that vtkImageReslice is rendering a huge
>>>>>> virtual image, and is clipping after that, is that true? Could it be
>>>>>> changed to be clipped before? Also I found, the clipping is not always
>>>>>> correct, as sometimes with certain transforms the output image gets
>>>>>> clipped inside the render window.
>>>>>> Is there anything I could do here?
>>>>>>
>>>>>> Thank you,
>>>>>>
>>>>>> Henning
>>>>>> _______________________________________________
>>>>>> Powered by www.kitware.com
>>>>>>
>>>>>> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html
>>>>>>
>>>>>> Please keep messages on-topic and check the VTK FAQ at: http://www.vtk.org/Wiki/VTK_FAQ
>>>>>>
>>>>>> Follow this link to subscribe/unsubscribe:
>>>>>> http://www.vtk.org/mailman/listinfo/vtkusers
>>>>>>
>>>>>
>>>>
>>>
>>
>



More information about the vtkusers mailing list