[Insight-users] ConnectedThresholdImageFilter does take into accopunt the configuration
Luis Ibanez
luis.ibanez at kitware.com
Mon Oct 12 13:09:59 EDT 2009
Hi Vincent,
This is really bad :-)
If you have code that works in Debug mode,
but crashes in Release mode you probably have:
A) Uninitialized variables
B) Dangling pointers
C) Out of bounds pointer access
D) An application build with inconsistent libraries
None of those diseases are benign...
BTW, I this the same application where you are using
the /FORCE flag to get over some link warnings ?
If so, then, here are the dooming consequences of
silencing the warnings that the linker was giving you.
It looks like there is more to this problem that
you have shared with us :-)
Please tell us about any compilation and linker
warnings that you may have observed while
building this application.
Thanks
Luis
-------------------------------------------------------------------------------
On Mon, Oct 12, 2009 at 8:55 AM, Daanen Vincent <daanen at koelis.com> wrote:
> Hi All,
>
> I still have problems to use the itk::ConnectedThresholdImageFilter.
>
> Luis, I do not have any problem in Debug mode and although the printed
> values are not the ones I set in the filter, it seems that the process uses
> the good ones to filter the image !!
>
> But, the same code still crashes in release mode in the Update method...
>
> V
>
>
>
>> -----Message d'origine-----
>> De : Luis Ibanez [mailto:luis.ibanez at kitware.com]
>> Envoyé : jeudi 8 octobre 2009 15:43
>> À : Daanen Vincent
>> Cc : insight-users at itk.org
>> Objet : Re: [Insight-users] ConnectedThresholdImageFilter
>> does take into accopunt the configuration
>>
>> Hi Vincent,
>>
>> Thanks for the additional information.
>>
>> You made an interesting observation,
>>
>> It is very strange and suspicious that
>> the values printed by filter->Print()
>> do not correspond to the values of
>> Lower/Upper/DebugOn and that you
>> are setting.
>>
>> It looks like the filter is created in two
>> separate places and we are looking at
>> two different pieces of code.
>>
>> Any chance that you can run this in
>> Debug mode ?
>>
>> It will be really helpful to locate the
>> exact line where it is crashing (inside
>> the Update() method call), AND to
>> look at the callstack to trace back
>> what method call lead to that point.
>>
>>
>> Please let us know if you can do that,
>>
>>
>> Thanks
>>
>>
>> Luis
>>
>>
>> --------------------------------------------------------
>> On Thu, Oct 8, 2009 at 9:32 AM, Daanen Vincent
>> <daanen at koelis.com> wrote:
>> > Hi Luis,
>> >
>> > Thanks for your input.
>> >
>> >> An easy way to verify this, would be to pass the image to
>> >> an itkImageFileWriter<> and to save it to disk.
>> >
>> > I follow your requirement and thus, i could write my image
>> on the disk ...I
>> > checked the image and it is ok.
>> >
>> >> BTW: It is normal for the connected threshold filter not to
>> >> offer the full connectivity option when ITK has been configured
>> >> with REVIEW off. The reason is that this is a new feature, that
>> >> relies on a new Iterator class that is currently in the Code/Review
>> >> directory.
>> >
>> > OK
>> >
>> >> In particular, you want to review the code of
>> >>
>> >> TItkInterface::Gmcao2Itk(*l_pImg);
>> >>
>> >> and make sure that the ITK image produced by the ImportFilter
>> >> is held ALL THE TIME by a SmartPointer.
>> > Yes it is
>> >
>> >>
>> >> Also, please double check the settings of the boolean flag that
>> >> defines who will be responsible for releasing the memory of
>> >> the imported image. (Wrongly setting this boolean is also
>> >> a common mistake when importing images).
>> >
>> > The application is responsible for releasing the memory of
>> >> the imported image and since I can write the imported
>> image on the disk ,I
>> > think it's ok.
>> >
>> > The crash occurs on the following line:
>> > l_pFilter->Update();
>> > So during the filter processing I guess ....
>> >
>> > Hereafter the output of the call to l_pFilter->Print() method:
>> >
>> > ConnectedThresholdImageFilter (003E7E48)
>> > RTTI typeinfo: class itk::ConnectedThresholdImageFilter<class
>> > itk::Image<unsigned char,3>,class itk::Image<unsigned char,3> >
>> > Reference Count: 1
>> > Modified Time: 53
>> > Debug: On
>> > Observers:none
>> > Number Of Required Inputs: 1
>> > Number Of Required Outputs: 1
>> > Number Of Threads: 2
>> > ReleaseDataFlag: Off
>> > ReleaseDataBeforeUpdateFlag: Off
>> > Input 0: (003EA538)
>> > Input 1: (003E81C8)
>> > Input 2: (003ECF80)
>> > Output 0: (003E7F28)
>> > AbortGenerateData: Off
>> > Progress: 0
>> > Multithreader:
>> > RTTI typeinfo: class itk::MultiThreader
>> > Reference Count: 1
>> > Modified Time: 27
>> > Debug: Off
>> > Observers:
>> > none
>> > Thread Count: 2
>> > Global Maximum Number Of Threads: 128
>> > Global Default Number Of Threads: 2
>> > Upper: 255
>> > Lower: 0
>> > ReplaceValue: 1
>> > Connectivity: 0
>> >
>> > As you can see, Lower/Upper = [0 255] but I explicitly set
>> them to 100/130
>> > Debug is also OFF but I set it to on just before the call
>> to Print ...
>> >
>> > Any Idea ?
>> >
>> > Vincent
>> >>
>> >>
>> >>
>> >> Regards,
>> >>
>> >>
>> >> Luis
>> >>
>> >>
>> >> ------------------
>> >> On Wed, Oct 7, 2009 at 2:17 AM, Daanen Vincent
>> >> <daanen at koelis.com> wrote:
>> >> > Hi Itk users,
>> >> >
>> >> > I want to use itk::ConnectedThresholdImageFilter to extract
>> >> a object from a
>> >> > 3D image.
>> >> > I first load the image and convert it from our own image
>> >> format into itk
>> >> > image format. The call to CItkInterface::Gmcao2Itk is just
>> >> a wrapper to
>> >> > ItkImageimportFilter.
>> >> > I can say it is ok (I play several tests to check that all
>> >> the data are
>> >> > correctly converted...)
>> >> >
>> >> > I then instantiate a itk::ConnectedThresholdImageFilter
>> >> ,set its input, the
>> >> > thresholds and the seed. (My code is nearly the same that
>> >> the one in the itk
>> >> > user guide)
>> >> >
>> >> > When I call Update, the software crashes with messages in a
>> >> window but I
>> >> > can't read them totally ...:(
>> >> >
>> >> > So, before calling update, I print the component on screen
>> >> (using Print
>> >> > method) and I can see that the thresholds are not the one I
>> >> set (low = 0;
>> >> > high = 255) instead of (L/H = 100/130).
>> >> > I also saw that there is not method to set the connectivity
>> >> unless itk is
>> >> > compiled with ITK_USE_REVIEW. Is this normal ? I can not
>> see why the
>> >> > connectivity is link to the REVIEW flag
>> >> >
>> >> > How can I find why the filter exit without making its work ?
>> >> >
>> >> > Thx for help
>> >> >
>> >> > Vince
>> >> >
>> >> > PS : the code I wrote. If someone sees something wrong,
>> >> please tell me
>> >> >
>> >> > void Test()
>> >> > {
>> >> >
>> >> > /// Our Own core work
>> >> > typedef gmcao::CImage<BYTE,3> TImage;
>> >> > CSmartPtr<TImage> l_pImg(new TImage);
>> >> >
>> >> > if
>> >> (!gmcao::CImageTools<TImage>::ReadImage(*l_pImg,"Img.hdr"))
>> >> > {
>> >> > std::cout<<"Could not read image"<<std::endl;
>> >> > return;
>> >> > }
>> >> >
>> >> > typedef CItkInterface<TImage::TValue, TImage::Dim>
>> >> TItkInterface;
>> >> > TItkInterface::TItkImage::Pointer l_pIktImg =
>> >> > TItkInterface::Gmcao2Itk(*l_pImg);
>> >> > if (l_pIktImg.IsNull())
>> >> > {
>> >> > std::cout<<"Error converting Gmcao ->
>> >> Itk"<<std::endl;
>> >> > return;
>> >> > }
>> >> > ///
>> >> >
>> >> > /// Itk filter
>> >> > typedef
>> >> >
>> >> itk::ConnectedThresholdImageFilter<TItkInterface::TItkImage,TI
>> >> tkInterface::T
>> >> > ItkImage> TFilter;
>> >> > TFilter::Pointer l_pFilter=TFilter::New();
>> >> > if (l_pFilter.IsNull())
>> >> > {
>> >> > std::cout<<"Could not create filter"<<std::endl;
>> >> > return;
>> >> > }
>> >> >
>> >> > l_pFilter->SetInput(l_pIktImg);
>> >> > l_pFilter->SetLower(100);
>> >> > l_pFilter->SetUpper(130);
>> >> >
>> >> > TFilter::IndexType l_Seed;
>> >> > l_Seed[0] = l_pImg->GetWidths()[0]>>1;
>> >> > l_Seed[1] = l_pImg->GetWidths()[1]>>1;
>> >> > l_Seed[2] = l_pImg->GetWidths()[2]>>1;
>> >> >
>> >> > l_pFilter->SetSeed(l_Seed);
>> >> >
>> >> > l_pFilter->DebugOn();
>> >> > l_pFilter->Print(std::cout);
>> >> >
>> >> > try
>> >> > { l_pFilter->Update();}
>> >> > catch( itk::ExceptionObject &excep )
>> >> > {
>> >> > std::cerr << "Exception caught !" << std::endl;
>> >> > std::cerr << excep << std::endl;
>> >> > }
>> >> > }
>> >> >
>> >> > --------------------------------------------
>> >> > Vincent Daanen, PhD
>> >> > D&D Manager
>> >> >
>> >> > --------------------------------------------
>> >> > KOELIS
>> >> > 5, avenue du Grand Sablon 38700 La Tronche
>> >> > www.koelis.com - daanen at koelis.com
>> >> > Tel .+33(0) 476637588 Fax .+33(0) 476637592
>> >> > --------------------------------------------
>> >> >
>> >> > CONFIDENTIALITY This e-mail and any attachments are
>> >> confidential and may
>> >> > also be privileged. If you are not the named recipient,
>> >> please notify the
>> >> > sender immediately and do not disclose the contents to
>> >> another person, use
>> >> > it for any purpose, or store or copy the information in
>> any medium.
>> >> >
>> >> > "Les problèmes ne peuvent être résolus par ceux dont
>> >> l'horizon se limite aux
>> >> > réalités quotidiennes, mais par ceux qui rêvent de choses
>> >> qui n'ont jamais
>> >> > existé et qui se disent : Pourquoi Pas ?" (J-F Kennedy, 1963).
>> >> >
>> >> > _____________________________________
>> >> > 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 ITK FAQ at:
>> >> http://www.itk.org/Wiki/ITK_FAQ
>> >> >
>> >> > Follow this link to subscribe/unsubscribe:
>> >> > http://www.itk.org/mailman/listinfo/insight-users
>> >> >
>> >
>> >
>
>
More information about the Insight-users
mailing list