[vtkusers] Combining three velocity components
Adam Wiktor
awiktor at emory.edu
Mon Aug 3 10:51:05 EDT 2009
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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.vtk.org/pipermail/vtkusers/attachments/20090803/368f1769/attachment.htm>
More information about the vtkusers
mailing list