public AffineTile2D( final Patch patch ) { this( new AffineModel2D(), patch ); }
/** * Create an affine transformation that compensates for both scale and * pixel shift of a mipmap level that was generated by top-left pixel * averaging. * * @param scaleLevel * @return */ final static protected AffineModel2D createScaleLevelTransform( final int scaleLevel ) { final AffineModel2D a = new AffineModel2D(); final int scale = 1 << scaleLevel; final double t = ( scale - 1 ) * 0.5; a.set( scale, 0, 0, scale, t, t ); return a; }
@Override public void applyInPlace( final double[] location ) { affine.applyInPlace( location ); }
@Override public AffineModel2D copy() { final AffineModel2D m = new AffineModel2D(); m.m00 = m00; m.m01 = m01; m.m10 = m10; m.m11 = m11; m.m02 = m02; m.m12 = m12; m.cost = cost; m.invert(); return m; }
/** * Add a triangle defined by 3 PointMatches that defines an * AffineTransform2D. * * @param t * 3 PointMatches (will not be copied, so do not reuse this * list!) */ public void addTriangle( final ArrayList< PointMatch > t ) { final AffineModel2D m = new AffineModel2D(); try { m.fit( t ); } catch ( final NotEnoughDataPointsException e ) { e.printStackTrace(); } catch ( final IllDefinedDataPointsException e ) { e.printStackTrace(); } av.put( m, t ); for ( final PointMatch pm : t ) { if ( !va.containsKey( pm ) ) va.put( pm, new ArrayList< AffineModel2D >() ); va.get( pm ).add( m ); } }
@Override protected Rectangle getBounds( final Rectangle rect ) final AffineModel2D a = new AffineModel2D(); a.set( at ); a.applyInPlace( l ); Util.min( rMin, l ); Util.max( rMax, l ); a.applyInPlace( l ); Util.min( rMin, l ); Util.max( rMax, l ); a.applyInPlace( l ); Util.min( rMin, l ); Util.max( rMax, l ); a.applyInPlace( l ); Util.min( rMin, l ); Util.max( rMax, l );
/** * Initialize the model with the parameters of an {@link AffineTransform}. * * @param a */ @Deprecated final public void set( final AffineTransform a ) { affine.set( a ); }
if ( isInConvexTargetPolygon( pm, location ) ) ai.applyInverseInPlace( location ); return; AffineModel2D closestAffine = new AffineModel2D(); final double x = location[ 0 ]; final double y = location[ 1 ]; closestAffine.applyInverseInPlace( location );
@Override public void applyInverseInPlace( final double[] point ) throws NoninvertibleModelException { affine.applyInverseInPlace( point ); }
@Override public void concatenate( final InterpolatedAffineModel2D< A, B > affine2d ) { affine.concatenate( affine2d.affine ); }
@Override public void toArray( final double[] data ) { affine.toArray( data ); }
@Override public AffineTransform createAffine() { return affine.createAffine(); }
/** * Initialize the model such that the respective affine transform is: * * <pre> * m00 m01 m02 * m10 m11 m12 * 0 0 1 * </pre> * * @param m00 * @param m10 * * @param m01 * @param m11 * * @param m02 * @param m12 */ @Deprecated final public void set( final double m00, final double m10, final double m01, final double m11, final double m02, final double m12 ) { affine.set( m00, m10, m01, m11, m02, m12 ); }
@Override public AffineModel2D copy() { final AffineModel2D m = new AffineModel2D(); m.m00 = m00; m.m01 = m01; m.m10 = m10; m.m11 = m11; m.m02 = m02; m.m12 = m12; m.cost = cost; m.invert(); return m; }
/** * Add a triangle defined by 3 PointMatches that defines an * AffineTransform2D. * * @param t * 3 PointMatches (will not be copied, so do not reuse this * list!) */ public void addTriangle( final ArrayList< PointMatch > t ) { final AffineModel2D m = new AffineModel2D(); try { m.fit( t ); } catch ( final NotEnoughDataPointsException e ) { e.printStackTrace(); } catch ( final IllDefinedDataPointsException e ) { e.printStackTrace(); } av.put( m, t ); for ( final PointMatch pm : t ) { if ( !va.containsKey( pm ) ) va.put( pm, new ArrayList< AffineModel2D >() ); va.get( pm ).add( m ); } }
@Override public void applyInverseInPlace( final double[] point ) throws NoninvertibleModelException { affine.applyInverseInPlace( point ); }
@Override public void concatenate( final InterpolatedAffineModel2D< A, B > affine2d ) { affine.concatenate( affine2d.affine ); }
@Override public void toArray( final double[] data ) { affine.toArray( data ); }
@Override public AffineTransform createAffine() { return affine.createAffine(); }
/** * TODO Not yet tested */ @Override public AffineModel2D createInverse() { final AffineModel2D ict = new AffineModel2D(); ict.m00 = i00; ict.m10 = i10; ict.m01 = i01; ict.m11 = i11; ict.m02 = i02; ict.m12 = i12; ict.i00 = m00; ict.i10 = m10; ict.i01 = m01; ict.i11 = m11; ict.i02 = m02; ict.i12 = m12; ict.cost = cost; return ict; }