[Insight-users] Odd java wrappers behavior

Luis Ibanez luis.ibanez at kitware.com
Wed Jun 23 21:03:28 EDT 2004


Hi Brian,

A bug was recently fixed in the Java wrapping.
It was affecting the way dynamic casting occurs.

It is likely that this bug was related to the odd
behavior that you reported in your example with
Transforms.

If you have a chance, could you please update
your CVS checkout and verify if the problem has
been solved ?

Please let us know what you find.


   Thanks,


      Luis


---------------------
Brian Eastwood wrote:

> Hi Luis,
> 
> Here's a little background: I'm using registration to align a video 
> sequence.  I have a class that generates a list of transforms, one for 
> each frame.  I first ran across this problem when I tried to use this 
> list of transforms to generate a modified sequence (using 
> itkResampleImageFilter)--I first saw the problem when I was trying to 
> compose the transforms.
> 
> Now I simply save the transform data to a file--this works better for me 
> anyway, since I may want to use the same transforms on a different file 
> sequence that may not be otherwise registered (different image data, 
> same capturing method).  One line of my output file looks like:
> 
> InsightToolkit.itkCenteredRigid2DTransform 5: -0.0054248555345777095, 
> 111.99813266896304, 114.49967542970687, 0.14514270891024816, 
> -0.6813850112138921
> 
> So, we have the class name, the number of parameters, and then the 
> actual transform parameters.  Here's the method I use to read this file:
> 
>    public static List loadTransforms(String fileName)
>    {
>        List transforms = new ArrayList();
>        try
>        {
>            BufferedReader reader = new BufferedReader(new 
> FileReader(fileName));
>            String line;
>            String delims = " " + OBJECT_DELIM + ATTRIB_DELIM; // space, 
> colon, comma
>            while ((line = reader.readLine()) != null)
>            {
>                StringTokenizer tokenizer = new StringTokenizer(line, 
> delims);
>                String xformClass = tokenizer.nextToken(); // ignored
>                int paramCount = Integer.parseInt(tokenizer.nextToken());
>                              // @todo Maybe handle other types of 
> transforms?
>                itkCenteredRigid2DTransform_Pointer transform = 
> itkCenteredRigid2DTransform.itkCenteredRigid2DTransform_New();
>                transform.SetIdentity();
>                itkArrayD params = new itkArrayD(paramCount);
>                              for (int i = 0; i < paramCount; i++)
>                {
>                    params.SetElement(i, 
> Double.parseDouble(tokenizer.nextToken()));
>                }
>                              transform.SetParameters(params);
>                transforms.add(transform.GetPointer());
>            }
>                      reader.close();
>        }
>        catch (IOException ioe)
>        {
>            System.err.println("RegistrationOutput: IO exception 
> occurred:");
>            ioe.printStackTrace();                  }
>              System.out.println(transforms.size() + " transforms read 
> from file " + fileName + ".");
>        return transforms;
>    }
> 
> With this list of transforms I run across the same problems as with the 
> list I obtain directly from registration--I can do certain things, but 
> at some point I might get that odd error.  Here's an extended example of 
> the code block I gave yesterday:
> 
>        System.out.println("\n--- Before ---");
>        TransformIO.printTranforms(transforms);
>              reader = itkImageFileReaderUS2.itkImageFileReaderUS2_New(); 
> // this one is instantiated
>        caster = null; // 
> itkCastImageFilterUS2F2.itkCastImageFilterUS2F2_New();
>        rescaler = null; // 
> itkRescaleIntensityImageFilterF2US2.itkRescaleIntensityImageFilterF2US2_New(); 
> 
>        writer = null; // itkImageFileWriterUS2.itkImageFileWriterUS2_New();
>              System.out.println("\n--- After ---");
>        TransformIO.printTranforms(transforms);
>        if (true) return;
> 
> When I run this, all of the transforms print out from the "before" 
> group; six print out from the "after" group before it crashes.  If I 
> instantiate the caster instead, only one transform prints out from the 
> "after" group.  If I don't instantiate any objects, all transforms print 
> out.  That's why I'm scratching my head so much on this one.
> 
> Thanks, again, for your help.
> Cheers,
> Brian
> 





More information about the Insight-users mailing list