[Insight-users] How to get a progess from an iterator?
Luis Ibanez
luis.ibanez at kitware.com
Mon Dec 14 12:13:34 EST 2009
Hi Lynx,
About your first question:
The compiler can figure out uninitialized variable in the heap.
but can't check for initialized elements of arrays since this is
a run-time behavior.
for that purpose, you need to use Valgrind.
About your second question:
If the shape of your neighborhood is consistent across
dimensions, it is usually possible to initialize the elements
by using a for-loops.
What is the pattern shape of the neighborhood that you
want to use ?
Thanks
Luis
----------------------------------------------------------------------
On Wed, Dec 9, 2009 at 11:52 AM, <lynx.abraxas at freenet.de> wrote:
> On 09/12/09 09:51:12, Luis Ibanez wrote:
>> Hi Lynx,
>>
>> Some compilers will warn you about uninitialized objects.
>>
>> In GCC you could use the flag : -Wuninitialized
>>
>> that is one of the options turned on with : -Wall
>>
>> http://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
>>
>> Note that you have to use it in combination with -O.
>
>
> Thanks again Luis for Your answer. I'm sorry I forgot to paste the code (it's from the users guide). If I compile
>
>
> const unsigned int Dimension = 3;
>
> typedef itk::Image<IPixelType, Dimension> ImageType;
> typedef itk::Image<OPixelType, Dimension> OImageType;
>
>
> typedef itk::ConstShapedNeighborhoodIterator<ImageType> ShapedNeighborhoodIteratorType;
>
> typedef itk::ImageRegionIterator<ImageType> IteratorType;
> typedef itk::ImageRegionIterator<OImageType> OIteratorType;
> OIteratorType out;
> .
> .
> .
> for ( fit=faceList.begin(); fit != faceList.end(); ++fit){
>
> ShapedNeighborhoodIteratorType it( radius, reader->GetOutput(), *fit );
> it.OverrideBoundaryCondition(&BC); // assign the boundary condition
> out = OIteratorType( output, *fit );
>
> // Creates a circular structuring element by activating all the pixels less
> // than radius distance from the center of the neighborhood.
> ShapedNeighborhoodIteratorType::OffsetType off;
>
> for (float y = -rad; y <= rad; y++){
> for (float x = -rad; x <= rad; x++){
> float dis = vcl_sqrt( x*x + y*y);
> if (dis <= rad){
> off[0] = static_cast<int>(x);
> off[1] = static_cast<int>(y);
> it.ActivateOffset(off); //if segfaults comment this! Why???
> }
> }
>
>
>
> this with:
>
> [100%] Building CXX object CMakeFiles/mean_masked02.dir/mean_masked02.cxx.o
> /usr/local/bin/c++ -O -Wall -I/usr/local/include/InsightToolkit/Numerics/Statistics/ -ftemplate-depth-50 -Wall -Wno-deprecated -I/usr/local/include -I/usr/local/include/InsightToolkit/Review/Statistics -I/usr/local/include/InsightToolkit/Review -I/usr/local/include/InsightToolkit/Patented -I/usr/local/include/InsightToolkit/gdcm/src -I/usr/local/include/InsightToolkit/gdcm -I/usr/local/include/InsightToolkit/Utilities/vxl/core -I/usr/local/include/InsightToolkit/Utilities/vxl/vcl -I/usr/local/include/InsightToolkit/Utilities/vxl/v3p/netlib -I/usr/local/include/InsightToolkit/Utilities -I/usr/local/include/InsightToolkit/Utilities/itkExtHdrs -I/usr/local/include/InsightToolkit/Utilities/nifti/znzlib -I/usr/local/include/InsightToolkit/Utilities/nifti/niftilib -I/usr/local/include/InsightToolkit/Utilities/expat -I/usr/local/include/InsightToolkit/Utilities/DICOMParser -I/usr/local/include/InsightToolkit/Utilities/NrrdIO -I/usr/local/include/InsightToolkit/Utilities/MetaIO -
> I/usr/local/include/InsightToolkit/SpatialObject -I/usr/local/include/InsightToolkit/Numerics/NeuralNetworks -I/usr/local/include/InsightToolkit/Numerics/FEM -I/usr/local/include/InsightToolkit/IO -I/usr/local/include/InsightToolkit/Numerics -I/usr/local/include/InsightToolkit/Common -I/usr/local/include/InsightToolkit/BasicFilters -I/usr/local/include/InsightToolkit/Algorithms -I/usr/local/include/InsightToolkit -I/net/home/ftd/localusr/lib/InsightToolkit -o CMakeFiles/mean_masked02.dir/mean_masked02.cxx.o -c /home/lynx/itk/simple/mean_masked02.cxx
> Linking CXX executable mean_masked02
> /usr/local/bin/cmake -E cmake_link_script CMakeFiles/mean_masked02.dir/link.txt --verbose=1
> /usr/local/bin/c++ -O -Wall -I/usr/local/include/InsightToolkit/Numerics/Statistics/ -ftemplate-depth-50 -Wall -Wno-deprecated CMakeFiles/mean_masked02.dir/mean_masked02.cxx.o -o mean_masked02 -rdynamic -L/usr/local/lib/InsightToolkit -lITKAlgorithms -lITKIO -lITKStatistics -litkNetlibSlatec -lITKNumerics /usr/local/lib/libfftw3.a -lITKNrrdIO -litkgdcm -litkjpeg8 -litkjpeg12 -litkjpeg16 -litkopenjpeg /usr/local/lib/libuuid.so /usr/local/lib/libpng.so /usr/local/lib/libtiff.so -lITKSpatialObject -lITKCommon -litkvnl_inst -litkvnl_algo -litkv3p_netlib -litkvnl -litkvcl -lm -lpthread -lITKMetaIO -litksys -ldl -lITKDICOMParser -lITKEXPAT -lITKniftiio -lITKznz -lz -lm -Wl,-rpath,/usr/local/lib/InsightToolkit:/usr/local/lib
>
>
> I don't get any error at compile time but the program segfaults because the
> third dimension was not initialized. If I change it to this:
>
> for (float z = -rad; z <= rad; z++){
> for (float y = -rad; y <= rad; y++){
> for (float x = -rad; x <= rad; x++){
> float dis = vcl_sqrt( x*x + y*y + z*z);
> if (dis <= rad){
> off[0] = static_cast<int>(x);
> off[1] = static_cast<int>(y);
> off[2] = static_cast<int>(z);
> it.ActivateOffset(off); //if segfaults comment this!
> Why???
> //because 3 dim (z, off[2]) was missing!!!!!!!
> }
> }
> }
> }
>
> all is fine.
>
>> About your second question:
>>
>> Could you please post a more precise example of
>> what you would like to do for initializing a
>> ShapedNeighborhoodIterator in 2D and/or 3D ?
>
> I mean the above initialization of the active neighbours. For 2D there must be
> only two for-loops for 3D input it needs three loops. I don't know how I could
> create a template function of this for the use as in:
>
>> > int main( int argc, char *argv[] ){
>> >
>> > if ( argc < 8 ){
>> > std::cerr << "Missing parameters. " << std::endl;
>> > std::cerr << "Usage: " << std::endl;
>> > std::cerr << argv[0]
>> > << "ImageDimension inputImageFile outputImageFile
> element_radius foreground background maskground"
>> > << std::endl;
>> > return -1;
>> > }
>> >
>> > unsigned int dim;
>> >
>> > dim= atoi(argv[1]);
>> > argv++; //shift();
>> > argc--;
>> >
>> > switch(dim)
>> > {
>> > case 2:
>> > masked_mean_filter<2>( argc, argv );
>> > break;
>> > case 3:
>> > masked_mean_filter<3>( argc, argv );
>> > break;
>> > default:
>> > std::cerr << "Unsupported dimension" << std::endl;
>> > exit( EXIT_FAILURE );
>> > }
>> > }
>> >
>
>
> Is there any way to do so?
>
> Many thanks,
> Lynx
>
> _____________________________________
> 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.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