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

Francisco Lopez de la Franca franciscolopezdelafranca at gmail.com
Thu Jan 15 12:34:22 EST 2015


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/20150115/f1f94803/attachment.html>


More information about the Insight-users mailing list