[vtkusers] Combining three velocity components

Wes Turner wes.turner at kitware.com
Mon Aug 3 10:58:29 EDT 2009


You only have one array, but I think the solution lies in specifying the
single array and the multiple components.  I am not overly familiar with the
array calculator, so you might need to wait for help elsewhere, or dig into
the source code.
- Wes

On Mon, Aug 3, 2009 at 10:51 AM, Adam Wiktor <awiktor at emory.edu> wrote:

> Hi Wes,
>
> Ok, that makes sense.
>
> In the previous step I used three calculators (one for each component) to
> change from scalars to a vector, and now I need to add the three vectors
> together to get the velocity. Basically, I'm trying to do what Dominik said
> (u*iHat + v*jHat +w*kHat), except that I did the multiplication by unit
> vectors earlier on. So if the output of the append is a single array, how do
> I get the calculator to use the individual components in the function?
>
> In other words, what would I put here:
> velcalc.AddVectorArrayName(_____________)
>
> Thanks,
>
> Adam
>
>
> On Mon, Aug 3, 2009 at 10:35 AM, Wes Turner <wes.turner at kitware.com>wrote:
>
>> Adam,
>> It is not generating separate arrays.  It is creating one array with 3
>> components per entry.  It is not clear what you are trying to do, but at the
>> output of the append, what you have is an image where the pixel values are
>> stored as a single array: x[0], y[0], z[0], x[1], y[1], z[1], x[2], y[2],
>> z[2], ... , x[k-1], y[k-1], z[k-1] where x[i], y[i], and z[i] all represent
>> the values for the ith x, y or z component respectively and where k=m*n for
>> an m*n image.
>>
>> - Wes
>>
>>
>> On Mon, Aug 3, 2009 at 9:29 AM, Adam Wiktor <awiktor at emory.edu> wrote:
>>
>>> Yes, that's the formula for it, but what I can't figure out is the actual
>>> code for the calculator. After doing the ImageAppendComponents, I need to
>>> find a way for the calculator to do that operation on all three variables.
>>> Right now, it isn't recognizing the y and z components. How do I pass those
>>> two variables to the calculator so that it will recognize all three?
>>>
>>> This is what I have right now, but as I said, it only accepts the 'x'
>>> component and gives me an "invalid array name" error for the other two.
>>>
>>> append=vtk.vtkImageAppendComponents()
>>> append.AddInput(xcalc.GetOutput())
>>> append.AddInput(ycalc.GetOutput())
>>> append.AddInput(zcalc.GetOutput())
>>> append.Update()
>>>
>>> velcalc = vtk.vtkArrayCalculator()
>>> velcalc.SetInput(append.GetOutput())
>>> velcalc.AddVectorArrayName("x", 0, 1, 2)
>>> velcalc.AddVectorArrayName("y", 0, 1, 2)
>>> velcalc.AddVectorArrayName("z", 0, 1, 2)
>>> velcalc.SetResultArrayName("Velocity")
>>> velcalc.SetFunction("x+y+z")
>>> velcalc.Update()
>>>
>>> Thanks,
>>>
>>> Adam
>>>
>>>
>>> On Fri, Jul 31, 2009 at 4:53 PM, Dominik Szczerba <dominik at itis.ethz.ch>wrote:
>>>
>>>> u*iHat+v*jHat+w*kHat
>>>>
>>>> Adam Wiktor wrote:
>>>>
>>>>> Wes,
>>>>>
>>>>> The problem is that I need the overall velocity as a single vector, not
>>>>> the components. I think I still need the calculator to sum the three
>>>>> components to give the velocity. How would I do that?
>>>>>
>>>>> Thanks,
>>>>>
>>>>> Adam
>>>>>
>>>>> On Fri, Jul 31, 2009 at 3:58 PM, Wes Turner <wes.turner at kitware.com<mailto:
>>>>> wes.turner at kitware.com>> wrote:
>>>>>
>>>>>    If you are just trying to get an image with three components
>>>>>    corresponding to the x, y, and z, then that is what you should have
>>>>>    as the output of the append filter.  The data at that point is not
>>>>>    stored in separate x, y, and z vectors, but is instead a single
>>>>>    multicomponent image.  You should have no need of the image
>>>>>    calculator at that point.
>>>>>
>>>>>    - Wes
>>>>>
>>>>>
>>>>>    On Fri, Jul 31, 2009 at 3:24 PM, Adam Wiktor <awiktor at emory.edu
>>>>>    <mailto:awiktor at emory.edu>> wrote:
>>>>>
>>>>>        Yes, I tried both that and AppendFilter, but I'm still having
>>>>>        problems. I may not be using the append correctly, but the
>>>>>        calculator is only recognizing one of the three components, and
>>>>>        I get this error message (it's the same for both
>>>>>        ImageAppendComponents and AppendFilter):
>>>>>
>>>>>        ERROR: In
>>>>>        /home/awiktor/Desktop/VTK/Graphics/vtkArrayCalculator.cxx, line
>>>>> 338
>>>>>        vtkArrayCalculator (0x763d70): Invalid array name: y
>>>>>
>>>>>        I get the same message except with "Invalid array name: z" if I
>>>>>        remove all references to y, so I think this means that the
>>>>>        calculator isn't seeing the 'y' and 'z' variables.
>>>>>
>>>>>        Here's the part of the code that isn't working:
>>>>>
>>>>>        append=vtk.vtkImageAppendComponents()
>>>>>        append.AddInput(xcalc.GetOutput())
>>>>>        append.AddInput(ycalc.GetOutput())
>>>>>        append.AddInput(zcalc.GetOutput())
>>>>>        append.Update()
>>>>>
>>>>>        velcalc = vtk.vtkArrayCalculator()
>>>>>        velcalc.SetInput(append.GetOutput())
>>>>>        velcalc.AddVectorArrayName("x", 0, 1, 2)
>>>>>        velcalc.AddVectorArrayName("y", 0, 1, 2)
>>>>>        velcalc.AddVectorArrayName("z", 0, 1, 2)
>>>>>        velcalc.SetResultArrayName("Velocity")
>>>>>        velcalc.SetFunction("x+y+z")
>>>>>        velcalc.Update()
>>>>>
>>>>>        Any idea what the problem is?
>>>>>
>>>>>        Thanks,
>>>>>
>>>>>        Adam
>>>>>
>>>>>
>>>>>        On Fri, Jul 31, 2009 at 12:54 PM, Wes Turner
>>>>>        <wes.turner at kitware.com <mailto:wes.turner at kitware.com>> wrote:
>>>>>
>>>>>            Did you try ImageAppendComponents?
>>>>>
>>>>>
>>>>> http://www.vtk.org/doc/nightly/html/classvtkImageAppendComponents.html
>>>>>
>>>>>            <
>>>>> http://www.vtk.org/doc/nightly/html/classvtkImageAppendComponents.html
>>>>> >-
>>>>>            Wes
>>>>>
>>>>>            On Fri, Jul 31, 2009 at 12:16 PM, Adam Wiktor
>>>>>            <awiktor at emory.edu <mailto:awiktor at emory.edu>> wrote:
>>>>>
>>>>>                Hi All,
>>>>>
>>>>>                I am fairly new to VTK, so please bear with me. I'm
>>>>>                trying to visualize blood flow in the aorta from MRI
>>>>>                scans. The velocity data is stored in three separate vti
>>>>>                images, for the x-, y- and z- components. Each image has
>>>>>                a scalar variable 'DICOMImage' which is the speed in
>>>>>                that direction. I need to combine the components into
>>>>>                the overall velocity, which I will then import into
>>>>>                paraview to add streamlines and other things.
>>>>>
>>>>>                My original thought was to use the vtkArrayCalculator to
>>>>>                multiply each image by the unit vector (for the x
>>>>>                component, for example, it would be DICOMImage*iHat). I
>>>>>                would then need to combine these vectors into the
>>>>>                velocity with another calculator, just doing x+y+z. I
>>>>>                might be able to simplify this by just using one
>>>>>                calculator that did x*iHat + y*jHat + z*kHat, but I
>>>>>                don't know how to change the variable names from
>>>>>                DICOMImage to x, y, and z so that the calculator can
>>>>>                distinguish between them.
>>>>>
>>>>>                First of all, I'd like to know if there's an easier way
>>>>>                of doing this.
>>>>>
>>>>>                If there isn't a more straight-forward way, then the
>>>>>                main thing I need to figure out is how to get the final
>>>>>                calculator to use the three different inputs. What would
>>>>>                be the best way to do that?
>>>>>
>>>>>                Thanks for any help you can give!
>>>>>
>>>>>                - Adam
>>>>>                _______________________________________________
>>>>>                Powered by www.kitware.com <http://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
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>            --            Wesley D. Turner, Ph.D.
>>>>>            Kitware, Inc.
>>>>>            R&D Engineer
>>>>>            28 Corporate Drive
>>>>>            Clifton Park, NY 12065-8662
>>>>>            Phone: 518-371-3971 x120
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>    --    Wesley D. Turner, Ph.D.
>>>>>    Kitware, Inc.
>>>>>    R&D Engineer
>>>>>    28 Corporate Drive
>>>>>    Clifton Park, NY 12065-8662
>>>>>    Phone: 518-371-3971 x120
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> ------------------------------------------------------------------------
>>>>>
>>>>> _______________________________________________
>>>>> 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
>>>>>
>>>>
>>>>
>>>> --
>>>> d o m i n i k   s z c z e r b a ,   p h d . . . . . . . . . . .
>>>> c o m p u t a t i o n a l   l i f e   s c i e n c e   g r o u p
>>>> . . . . . . . i t ' i s   r e s e a r c h   f o u n d a t i o n
>>>> . . . . . . . . . . . . . . . . . . . . http://www.itis.ethz.ch
>>>>
>>>>
>>>
>>
>>
>> --
>> Wesley D. Turner, Ph.D.
>> Kitware, Inc.
>> R&D Engineer
>> 28 Corporate Drive
>> Clifton Park, NY 12065-8662
>> Phone: 518-371-3971 x120
>>
>
>


-- 
Wesley D. Turner, Ph.D.
Kitware, Inc.
R&D Engineer
28 Corporate Drive
Clifton Park, NY 12065-8662
Phone: 518-371-3971 x120
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090803/83ff2977/attachment.htm>


More information about the vtkusers mailing list