/** * Fragile typeless reduction of ictls of which is assumed that they contain only affine transformations * * @param ictl * @param affine */ final private static void reduceAffineTransformList( final InvertibleCoordinateTransformList< ? > ictl, final AffineModel3D affine ) { final AffineModel3D a = new AffineModel3D(); for ( final InvertibleCoordinateTransform t : ictl.getList( null ) ) { if ( AffineModel3D.class.isInstance( t ) ) a.preConcatenate( ( AffineModel3D )t ); else if ( TranslationModel3D.class.isInstance( t ) ) a.preConcatenate( ( TranslationModel3D )t ); } affine.set( a ); }
public static ArrayList< ArrayList< double[] > > transformPoints( final ArrayList< double[] > points, final int[] angles, final int axis, final Interval range ) { final ArrayList< ArrayList< double[] > > transformedPoints = new ArrayList< ArrayList< double[] > >(); for ( final int angle : angles ) { final AffineModel3D t = SimulateMultiViewDataset.axisRotation( range, axis, angle ); final ArrayList< double[] > transformed = new ArrayList< double[] >(); for ( final double[] p : points ) transformed.add( t.apply( p ) ); transformedPoints.add( transformed ); } return transformedPoints; }
@Override public void applyInPlace( final double[] location ) { affine.applyInPlace( location ); }
@Override public AffineModel3D copy() { final AffineModel3D m = new AffineModel3D(); m.m00 = m00; m.m10 = m10; m.m20 = m20; m.m01 = m01; m.m11 = m11; m.m21 = m21; m.m02 = m02; m.m12 = m12; m.m22 = m22; m.m03 = m03; m.m13 = m13; m.m23 = m23; m.cost = cost; m.invert(); return m; }
public static AffineModel3D getAffineModel3D( Transform3D transform ) { final double[] m = new double[16]; transform.get( m ); AffineModel3D model = new AffineModel3D(); model.set( m[0], m[1], m[2], m[3], m[4], m[5], m[6], m[7], m[8], m[9], m[10], m[11] ); return model; }
public AffineModel3D createInverse() final AffineModel3D ict = new AffineModel3D();
public static AffineModel3D axisRotation( final Interval in, final int axis, final int degrees ) { // translate so that the center of the image is 0,0,0 final AffineModel3D translate1 = new AffineModel3D(); translate1.set( 1, 0, 0, -( in.max( 0 ) - in.min( 0 ) )/2, 0, 1, 0, -( in.max( 1 ) - in.min( 1 ) )/2, 0, 0, 1, -( in.max( 2 ) - in.min( 2 ) )/2 ); // rotate around an axis final AffineModel3D rot = new AffineModel3D(); rot.rotate( axis, (float)Math.toRadians( degrees ) ); // translate back to the center final AffineModel3D translate2 = new AffineModel3D(); translate2.set( 1, 0, 0, ( in.max( 0 ) - in.min( 0 ) )/2, 0, 1, 0, ( in.max( 1 ) - in.min( 1 ) )/2, 0, 0, 1, ( in.max( 2 ) - in.min( 2 ) )/2 ); translate1.preConcatenate( rot ); translate1.preConcatenate( translate2 ); return translate1; }
final AffineModel3D a = new AffineModel3D(); a.preConcatenate( ( AffineModel3D )ictl.get( 0 ) ); a.preConcatenate( ( TranslationModel3D )ictl.get( 1 ) ); a.preConcatenate( ( AffineModel3D )ictl.get( 2 ) ); a.preConcatenate( ( TranslationModel3D )ictl.get( 3 ) ); a.estimateBounds( min, max ); final int w = ( int )Math.ceil( max[ 0 ] - min[ 0 ] ); final int h = ( int )Math.ceil( max[ 1 ] - min[ 1 ] ); final TranslationModel3D minShift = new TranslationModel3D(); minShift.set( -min[ 0 ], -min[ 1 ], -min[ 2 ] ); a.preConcatenate( minShift ); a.preConcatenate( sliceOffset ); IJ.showProgress( i, d );
@Override public void mousePressed( final MouseEvent e ) { oX = e.getX(); oY = e.getY(); mouseRotation.set( rotation ); } }
final ViewStructure viewStructure = ViewStructure.initViewStructure( conf, i, new mpicbg.models.AffineModel3D(), "ViewStructure Timepoint " + timepointId, conf.debugLevelInt ); final AffineTransform3D model = new AffineTransform3D(); final double[][] tmp = new double[3][4]; ( ( mpicbg.models.AffineModel3D ) viewDataBeads.getTile().getModel() ).toMatrix( tmp ); model.set( tmp );
@Override public void preConcatenate( final InterpolatedAffineModel3D< A, B > affine3d ) { affine.preConcatenate( affine3d.affine ); }
public static Matrix4d getMatrix4d( final AffineModel3D model ) { final Matrix4d matrix = new Matrix4d(); final double[] m = new double[ 12 ]; model.getMatrix( m ); matrix.m00 = m[ 0 ]; matrix.m01 = m[ 1 ]; matrix.m02 = m[ 2 ]; matrix.m03 = m[ 3 ]; matrix.m10 = m[ 4 ]; matrix.m11 = m[ 5 ]; matrix.m12 = m[ 6 ]; matrix.m13 = m[ 7 ]; matrix.m20 = m[ 8 ]; matrix.m21 = m[ 9 ]; matrix.m22 = m[ 10 ]; matrix.m23 = m[ 11 ]; matrix.m30 = 0; matrix.m31 = 0; matrix.m32 = 0; matrix.m33 = 0; return matrix; }
@Override public void estimateBounds( final double[] min, final double[] max ) { affine.estimateBounds( min, max ); }
public static Img< FloatType > rotateAroundAxis( final RandomAccessibleInterval< FloatType > in, final int axis, final int degrees ) { // final model final AffineModel3D affine = axisRotation( in, axis, degrees ).createInverse(); final Img< FloatType > out = new ArrayImgFactory< FloatType >().create( in, new FloatType() ); final NLinearInterpolatorFactory< FloatType > factory = new NLinearInterpolatorFactory< FloatType >(); final RealRandomAccessible< FloatType > interpolant = Views.interpolate( Views.extendZero( in ), factory ); final RealRandomAccess< FloatType > realRandomAccess = interpolant.realRandomAccess(); final Cursor< FloatType > c = out.localizingCursor(); final int[] l = new int[ out.numDimensions() ]; final double[] lf = new double[ out.numDimensions() ]; while ( c.hasNext() ) { c.fwd(); c.localize( l ); lf[ 0 ] = l[ 0 ]; lf[ 1 ] = l[ 1 ]; lf[ 2 ] = l[ 2 ]; affine.applyInPlace( lf ); realRandomAccess.setPosition( lf ); c.get().set( realRandomAccess.get() ); } return out; }
public static AffineModel3D getModel( final AffineGet affine ) { final double[] m = affine.getRowPackedCopy(); final AffineModel3D model = new AffineModel3D(); model.set( m[ 0 ], m[ 1 ], m[ 2 ], m[ 3 ], m[ 4 ], m[ 5 ], m[ 6 ], m[ 7 ], m[ 8 ], m[ 9 ], m[ 10 ], m[ 11 ] ); return model; }
public AffineModel3D createInverse() final AffineModel3D ict = new AffineModel3D();
final AffineModel3D a = new AffineModel3D(); a.preConcatenate( ( AffineModel3D )ictl.get( 0 ) ); a.preConcatenate( ( TranslationModel3D )ictl.get( 1 ) ); a.preConcatenate( ( AffineModel3D )ictl.get( 2 ) ); a.preConcatenate( ( TranslationModel3D )ictl.get( 3 ) ); a.estimateBounds( min, max ); final int w = ( int )Math.ceil( max[ 0 ] - min[ 0 ] ); final int h = ( int )Math.ceil( max[ 1 ] - min[ 1 ] ); final TranslationModel3D minShift = new TranslationModel3D(); minShift.set( -min[ 0 ], -min[ 1 ], -min[ 2 ] ); a.preConcatenate( minShift ); a.preConcatenate( sliceOffset ); IJ.showProgress( i, d );
@Override public void mousePressed( final MouseEvent e ) { oX = e.getX(); oY = e.getY(); mouseRotation.set( rotation ); } }