package net.preibisch.stitcher.plugin; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; import org.scijava.command.Command; import org.scijava.plugin.Plugin; import ij.gui.GenericDialog; import mpicbg.spim.data.sequence.ViewId; import net.imglib2.Dimensions; import net.preibisch.mvrecon.fiji.plugin.queryXML.LoadParseQueryXML; import net.preibisch.mvrecon.fiji.spimdata.SpimData2; import net.preibisch.stitcher.arrangement.SkewImages; @Plugin(type = Command.class, menuPath = "Plugins>BigStitcher>Batch Processing>Tools>(De-)Skew Images") public class SkewImagesCommand implements Command { private static String[] axesChoice = new String[] {"X", "Y", "Z"}; @Override public void run() { // load SpimData final LoadParseQueryXML result = new LoadParseQueryXML(); if ( !result.queryXML( "to load a TileConfiguration for", false, false, false, false, false ) ) return; final SpimData2 data = result.getData(); // get views to process final ArrayList< ViewId > views = SpimData2.getAllViewIdsSorted( result.getData(), result.getViewSetupsToProcess(), result.getTimePointsToProcess() ); // get dimensions for selected views final Map< ViewId, Dimensions > dims = new HashMap<>(); views.forEach( v -> dims.put( v, data.getSequenceDescription().getViewDescriptions().get( v ).getViewSetup().getSize() ) ); // query parameters in dialog GenericDialog gd = new GenericDialog( "(De)Skew Parameters" ); gd.addChoice( "Skew_Direction", axesChoice, axesChoice[0] ); gd.addChoice( "Skew_Along_Which_Axis", axesChoice, axesChoice[2] ); gd.addSlider( "Angle", -90, 90, 45 ); gd.showDialog(); if (gd.wasCanceled()) return; // get parameters from dialog final int direction = gd.getNextChoiceIndex(); final int skewAxis = gd.getNextChoiceIndex(); final double angle = gd.getNextNumber() / 180 * Math.PI; SkewImages.applySkewToData( data.getViewRegistrations(), dims, views, direction, skewAxis, angle ); // save result SpimData2.saveXML( data, result.getXMLFileName(), result.getClusterExtension() ); } }