[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