[ITK-users] Undefined references to methods of template classes

Francisco Lopez de la Franca franciscolopezdelafranca at gmail.com
Fri Jan 16 02:02:24 EST 2015


Hi Matt.
I've already solved the texture features problem.
The solution is similar to that of the shape features. You must set a value
or values to the filter in order to be able to calculate the features. I've
used the SetPixelValueMinMax
<http://www.itk.org/Doxygen/html/classitk_1_1Statistics_1_1ScalarImageToTextureFeaturesFilter.html#a373867fa4b665bc5e4b56fea305ed774>()
method and everything OK.
Thank you very much for your support.
/Francisco

2015-01-15 20:08 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:

> Hi Francisco,
>
> Good to hear the BinaryImageToShapeLabelMapFilter is working.
>
> This is probably not the source of your issues, but this line
>
>   FeatureValueVectorType* output = textureFilter->GetFeatureMeans();
>
> should be
>
>   FeatureValueVectorType::Pointer output =
> textureFilter->GetFeatureMeans();
>
> since itk::SmartPointer's [1] are different from raw pointers.
>
> HTH,
> Matt
>
> [1] http://www.itk.org/Doxygen/html/classitk_1_1SmartPointer.html
>
>
> On Thu, Jan 15, 2015 at 12:34 PM, Francisco Lopez de la Franca
> <franciscolopezdelafranca at gmail.com> wrote:
> > Sorry, I might press the wrong key.
> > Hi Matt again.
> > You were fully right about setting the background/foreground values for
> the
> > filter. I wasn't using them because I followed the examples and there
> was no
> > reference to them. Now my shape related functions are working.
> >
> > As for the textures, I attach my code so that anyone can see if i am
> doing
> > something wrong:
> >
> > typedef itk::Statistics::ScalarImageToTextureFeaturesFilter<TInputImage>
> > TextureFilterType;
> > typedef typename TextureFilterType::Pointer TextureFilterPtr;
> > typedef typename TextureFilterType::FeatureValueVector
> > FeatureValueVectorType;
> >
> > TextureFilterPtr textureFilter = TextureFilterType::New();
> > textureFilter->SetInput(_input);
> > textureFilter->Update();
> >
> > FeatureValueVectorType* output = textureFilter->GetFeatureMeans();
> >
> > cout << "Energy = " << (*output)[0]) << endl;
> > cout << "Entropy " << (*output)[1]);
> > cout << "LocalHomogeneity = " << (*output)[3]) << endl;
> > cout << "Inertia = " << (*output)[4]) << endl;
> > cout << "ClusterShade " << (*output)[5]) << endl;
> > cout << "ClusterProminence = " << (*output)[6]) << endl;
> >
> > Sincereously, I thank you a lot your help.
> > Regards.
> > /Francisco
> >
> >
> >
> > 2015-01-15 18:26 GMT+01:00 Francisco Lopez de la Franca
> > <franciscolopezdelafranca at gmail.com>:
> >>
> >> Hi Matt again.
> >> You were fully right about setting the background/foreground values for
> >> the filter. I
> >>
> >> 2015-01-15 16:41 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com>:
> >>>
> >>> Hi Francisco,
> >>>
> >>> There is definitely something wrong with the textures features.  It is
> >>> not possible to know what is going on without more details, though.
> >>>
> >>> Matt
> >>>
> >>> On Thu, Jan 15, 2015 at 1:32 AM, Francisco Lopez de la Franca
> >>> <franciscolopezdelafranca at gmail.com> wrote:
> >>> > Hi Matt,
> >>> > Thanks a lot for your answers. I'll try this afternoon what you
> suggest
> >>> > regarding the shape filter, but what do you think about my results as
> >>> > for
> >>> > the texture filter?
> >>> > Regards.
> >>> > /Francisco
> >>> >
> >>> > 2015-01-15 2:30 GMT+01:00 Matt McCormick <matt.mccormick at kitware.com
> >:
> >>> >>
> >>> >> Hi Francisco,
> >>> >>
> >>> >> Great to hear about the progress!
> >>> >>
> >>> >> The itk::BinaryImageToShapeLabelMapFilter  requires a binary input,
> >>> >> which should have an integer pixel type, like unsigned char or
> >>> >> unsigned short.  It is important to set the BackgroundValue and
> >>> >> ForegroundValue [1] to get this filter to work correctly.
> >>> >>
> >>> >> HTH,
> >>> >> Matt
> >>> >>
> >>> >> [1]
> >>> >>
> >>> >>
> http://www.itk.org/Doxygen/html/classitk_1_1BinaryImageToShapeLabelMapFilter.html
> >>> >>
> >>> >> On Wed, Jan 14, 2015 at 5:05 PM, Francisco Lopez de la Franca
> >>> >> <franciscolopezdelafranca at gmail.com> wrote:
> >>> >> > Hi again.
> >>> >> > I fixed all the errors and got my library, now ready to be tested.
> >>> >> > It contains an encapsulation, on the one hand, of the class
> >>> >> > itkBinaryImageToShapeLabelMapFilter in order to get image shape
> >>> >> > descriptors
> >>> >> > of a 3D binary image, and on the other hand, the same for the
> class
> >>> >> > itkScalarImageToTextureFeaturesFilter to get image texture
> features
> >>> >> > of a
> >>> >> > 3D
> >>> >> > scalar image.
> >>> >> >
> >>> >> > I pass as input image to both classes a binary 3D Nifti image
> >>> >> > (150x150x150)
> >>> >> > containing a cylinder where the inside voxels are 255 and the
> >>> >> > outside
> >>> >> > voxels
> >>> >> > are 0.
> >>> >> >
> >>> >> > As for the shape issue, it's very strange to me that the call to
> >>> >> > GetNumberOfLabelObjects on a itk::LabelMap object returns a value
> of
> >>> >> > 0.
> >>> >> > The
> >>> >> > main code is as follows:
> >>> >> >
> >>> >> > binaryImageToShapeLabelMapFilter->SetInput(_input);
> >>> >> > binaryImageToShapeLabelMapFilter->ComputePerimeterOn();
> >>> >> > binaryImageToShapeLabelMapFilter->Update();
> >>> >> >
> >>> >> > LabelMapType::Pointer labelMap =
> >>> >> > binaryImageToShapeLabelMapFilter->GetOutput();
> >>> >> >
> >>> >> > int nrOfLabelObjects = labelMap->GetNumberOfLabelObjects();
> >>> >> >
> >>> >> >
> >>> >> > And, as for the texture features, the result of the filter does
> not
> >>> >> > seem
> >>> >> > to
> >>> >> > be very logic:
> >>> >> >
> >>> >> > Energy = 1
> >>> >> > Entropy = 0
> >>> >> > Correlation = 1
> >>> >> > Local Homogeneity = 0
> >>> >> > Inertia = 0
> >>> >> > Cluster Shade = 0
> >>> >> > Cluster Prominence = 0
> >>> >> >
> >>> >> > I've also tested this with a scalar 3D Nifti image and the results
> >>> >> > are
> >>> >> > the
> >>> >> > same.
> >>> >> >
> >>> >> > And the question is: What kind of image do I have to pass to the
> >>> >> > filters
> >>> >> > so
> >>> >> > that the code would return a more logic expected answer?
> >>> >> >
> >>> >> > Thank you very much in advance.
> >>> >> > My best regars.
> >>> >> > /Francisco
> >>> >> >
> >>> >> > 2015-01-10 22:38 GMT+01:00 Matt McCormick
> >>> >> > <matt.mccormick at kitware.com>:
> >>> >> >>
> >>> >> >> Hi Francisco,
> >>> >> >>
> >>> >> >> Nice to hear about the progress!
> >>> >> >>
> >>> >> >> You will need to link your library to the ITK libraries:
> >>> >> >>
> >>> >> >>   target_link_libraries( mylibrary ${ITK_LIBRARIES} )
> >>> >> >>
> >>> >> >> HTH,
> >>> >> >> Matt
> >>> >> >>
> >>> >> >> On Sat, Jan 10, 2015 at 4:16 PM, Francisco Lopez de la Franca
> >>> >> >> <franciscolopezdelafranca at gmail.com> wrote:
> >>> >> >>>
> >>> >> >>> Thanks to your previous answer the problem was solved, but
> another
> >>> >> >>> one
> >>> >> >>> has come out. It occurs when linking to create the library. It
> >>> >> >>> gives
> >>> >> >>> an
> >>> >> >>> undefined reference to itk::ExceptionObject::ExceptionObject...
> as
> >>> >> >>> you
> >>> >> >>> can
> >>> >> >>> see below.
> >>> >> >>> What it is strange to me is that before including explicit
> >>> >> >>> template
> >>> >> >>> instantiation, I created the library without errors, and now
> that
> >>> >> >>> I
> >>> >> >>> include
> >>> >> >>> that, I get this error.
> >>> >> >>> I'll appreciate very much any help.
> >>> >> >>>
> >>> >> >>> Linking CXX shared library libTFM_Features.dll
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj):TFM_Features.cpp:(.t
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> ext$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_[_ZN3itk21MemoryAllocationErrorC
> >>> >> >>> 1ERKSsjS2_S2_]+0x35): undefined reference to
> >>> >> >>> `itk::ExceptionObject::ExceptionObj
> >>> >> >>> ect(std::string const&, unsigned int, std::string const&,
> >>> >> >>> std::string
> >>> >> >>> const&)'
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj):TFM_Features.cpp:(.t
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> ext$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_[_ZN3itk21MemoryAllocationErrorC
> >>> >> >>> 1ERKSsjS2_S2_]+0x40): undefined reference to `vtable for
> >>> >> >>> itk::MemoryAllocationEr
> >>> >> >>> ror'
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> >>> >> >>>
> C:/CV/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.8.2/../../../../x86_64-w64-min
> >>> >> >>> gw32/bin/ld.exe:
> >>> >> >>> CMakeFiles\TFM_Features.dir/objects.a(TFM_Features.cpp.obj): ba
> >>> >> >>> d reloc address 0x40 in section
> >>> >> >>> `.text$_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_
> >>> >> >>> S2_[_ZN3itk21MemoryAllocationErrorC1ERKSsjS2_S2_]'
> >>> >> >>> collect2.exe: error: ld returned 1 exit status
> >>> >> >>> SRC\CMakeFiles\TFM_Features.dir\build.make:219: recipe for
> target
> >>> >> >>> 'SRC/libTFM_Fe
> >>> >> >>> atures.dll' failed
> >>> >> >>> mingw32-make[2]: *** [SRC/libTFM_Features.dll] Error 1
> >>> >> >>> CMakeFiles\Makefile2:77: recipe for target
> >>> >> >>> 'SRC/CMakeFiles/TFM_Features.dir/all'
> >>> >> >>>  failed
> >>> >> >>> mingw32-make[1]: *** [SRC/CMakeFiles/TFM_Features.dir/all]
> Error 2
> >>> >> >>> Makefile:74: recipe for target 'all' failed
> >>> >> >>> mingw32-make: *** [all] Error 2
> >>> >> >>>
> >>> >> >>>
> >>> >> >>> 2015-01-09 21:02 GMT+01:00 Matt McCormick
> >>> >> >>> <matt.mccormick at kitware.com>:
> >>> >> >>>>
> >>> >> >>>> Hi Francisco,
> >>> >> >>>>
> >>> >> >>>> In order for the templates to be available in the library, they
> >>> >> >>>> must
> >>> >> >>>> be explicitly instantiated [1].
> >>> >> >>>>
> >>> >> >>>> HTH,
> >>> >> >>>> Matt
> >>> >> >>>>
> >>> >> >>>> [1] http://www.cplusplus.com/articles/1C75fSEw/
> >>> >> >>>>
> >>> >> >>>> On Fri, Jan 9, 2015 at 2:59 PM, Francisco Lopez de la Franca
> >>> >> >>>> <franciscolopezdelafranca at gmail.com> wrote:
> >>> >> >>>> > Hi.
> >>> >> >>>> > I' like to create a library containing, for example, one
> >>> >> >>>> > template
> >>> >> >>>> > class with
> >>> >> >>>> > a number of methods.
> >>> >> >>>> > I've programmed a simple example and the compilation and
> >>> >> >>>> > generation
> >>> >> >>>> > of
> >>> >> >>>> > the
> >>> >> >>>> > library goes fine. I use the cmake "add_library" command for
> >>> >> >>>> > generating the
> >>> >> >>>> > library.
> >>> >> >>>> >
> >>> >> >>>> > The problem arises at the moment of testing the library. I
> get
> >>> >> >>>> > an
> >>> >> >>>> > undefined
> >>> >> >>>> > reference for every method in the template class.
> >>> >> >>>> >
> >>> >> >>>> > I've downloaded a tool to look in the contents (functions) of
> >>> >> >>>> > dynamic
> >>> >> >>>> > libraries, and there is no function in the library. If I add
> >>> >> >>>> > another
> >>> >> >>>> > class
> >>> >> >>>> > (not a template class), then, this tool shows me only the
> >>> >> >>>> > functions
> >>> >> >>>> > in
> >>> >> >>>> > this
> >>> >> >>>> > latter class.
> >>> >> >>>> >
> >>> >> >>>> > Has anyone ever come across with this problem?
> >>> >> >>>> >
> >>> >> >>>> > Thanks a lot in advance.
> >>> >> >>>> > Regards
> >>> >> >>>> > /Francisco
> >>> >> >>>> >
> >>> >> >>>> > _____________________________________
> >>> >> >>>> > 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
> >>> >> >>>> >
> >>> >> >>>
> >>> >> >>>
> >>> >> >>
> >>> >> >
> >>> >
> >>> >
> >>
> >>
> >
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20150116/d3ab71c2/attachment-0001.html>


More information about the Insight-users mailing list