[ITK] [ITK-users] VariableLengthVector and multiplication
Lowekamp, Bradley (NIH/NLM/LHC) [C]
blowekamp at mail.nih.gov
Wed Nov 22 08:38:41 EST 2017
Hello,
There are an incredible number of different per-pixel operations that could be implemented as ITK filters. We cannot provide them all. Many of the basic operations are implemented as ITK filters these include performing the basic C++ operators, such as +, -, * and /, on a per-pixel basis.
As you indicate there are many possible meanings for multiplication of vector images, which can lead to confusion.
ITK has a flexible set of Unary[1], Binary[2] functor filters. Classes like the MultiplyImageFilter[3], are implemented by deriving from the base functor classes. However it is easier to just use the base functor filter and set the proper or custom functor, as in this example [4].
It is fairly easy to write a functor for your specific purposes by following the existing set [5]. It is common for filters to internally define a private functor to perform one step in a large filter. Moving from writing for loops on pixels to writing custom functors is part of good usage of ITK.
Brad
[1] https://itk.org/Doxygen/html/classitk_1_1UnaryFunctorImageFilter.html
[2] https://itk.org/Doxygen/html/classitk_1_1BinaryFunctorImageFilter.html
[3] https://itk.org/Doxygen/html/classitk_1_1MultiplyImageFilter.html
[4] https://itk.org/Doxygen/html/WikiExamples_2ImageProcessing_2BinaryFunctorImageFilter_8cxx-example.html#_a1
On 11/22/17, 5:15 AM, "Cyril Mory" <cyril.mory at creatis.insa-lyon.fr> wrote:
Dear ITK users,
I am using itk::VectorImage in some of my code, which uses
itk::VariableLengthVector as pixel type. And I am wondering why
itk::VariableLengthVector has so little support for multiplication.
Currently, the * operator only supports multiplication by a scalar.
It probably isn't simple, but I would need three additional kinds of
multiplication:
- dot product with another VariableLengthVector (that has the same
length, although it is probably a waste of time to perform the check
every time), returning a scalar
- component-wise multiplication, returning a VariableLengthVector of the
same length
- left or right multiplication with a matrix (possibly an
itk::VariableSizeMatrix) that has the correct size, but I understand
that this is probably the most complex one, and since it only occurs
rarely in my code, I can handle it with conversions to vnl::vector and
vnl::matrix
Are there constraints that prevent at least the dot product and
component-wise multiplication operators from being implemented ? If not,
then I'd be happy to give it a try. Since both differ only by the return
type, two different operators would have to be used (I guess). Do you
have suggestions (which one should use *, and what should be the other
operator) ? In itk::Vector and itk::CovariantVector, the * operator is
used for dot product.
Regards,
Cyril
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
The ITK community is transitioning from this mailing list to discourse.itk.org. Please join us there!
________________________________
Powered by www.kitware.com
Visit other Kitware open-source projects at
http://www.kitware.com/opensource/opensource.html
Kitware offers ITK Training Courses, for more information visit:
http://www.kitware.com/products/protraining.php
Please keep messages on-topic and check the ITK FAQ at:
http://www.itk.org/Wiki/ITK_FAQ
Follow this link to subscribe/unsubscribe:
http://public.kitware.com/mailman/listinfo/insight-users
More information about the Community
mailing list