axtimwalde / mpicbg

Fiji module for image transformation and related algorithms
http://fly.mpi-cbg.de/saalfeld/Projects
63 stars 73 forks source link

ClassCastException #59

Open nanthony21 opened 3 years ago

nanthony21 commented 3 years ago

This is what I get when trying to run the "Landmark Correspondences" plugin in "Perspective" mode.

(Fiji Is Just) ImageJ 2.3.0/1.53f51; Java 1.8.0_172 [64-bit]; Windows 10 10.0; 146MB of 24463MB (<1%)

java.lang.ClassCastException: mpicbg.models.HomographyModel2D cannot be cast to mpicbg.models.Affine2D
    at Transform_Roi.run(Transform_Roi.java:184)
    at ij.IJ.runUserPlugIn(IJ.java:241)
    at ij.IJ.runPlugIn(IJ.java:204)
    at ij.Executer.runCommand(Executer.java:150)
    at ij.Executer.run(Executer.java:68)
    at java.lang.Thread.run(Thread.java:748)
acardona commented 2 years ago

According to the plugins.config the "Landmark Correspondences" plugin is implemented by the Transform_Roi class.

Looking into the Transform_Roi.java file at like 210, we read:

                case 4:
                    IJ.error( "Perspective transformation is not yet supported for Moving Least Squares.  Using Affine instead." );
                    //t.setModel( HomographyModel2D.class );
                    t.setModel( AffineModel2D.class );
                    break;

Looks like a perspective transform was never implemented for Moving Least Squares.

In line 284 we read that:

            if ( showMatrix )
            {
                final double[] flatmatrix = new double[6];
                ( ( Affine2D< ? > )model ).toArray( flatmatrix );
                IJ.log("Matrix: " + Arrays.toString(flatmatrix));
            }

Note the Affine2D and not AffineModel2D is used. It's possible that's the error: above at line 213 perhaps it should have been t.setModel( Affine2D.class ); instead, or perhaps the opposite: the cast ought to be to AffineModel2D.

Thankfully this error is easy to fix (submit a one-line fix from github itself), and also, note the error doesn't occur if one doesn't choose to show (print) the matrix.