Class SplitOctTree

java.lang.Object
net.preibisch.mvrecon.process.splitting.SplitOctTree
All Implemented Interfaces:
SplitView

public class SplitOctTree extends Object implements SplitView
Adaptive oct-tree based image splitting with recursive correspondence partitioning. Recursively subdivides regions until each region contains at most a specified number of cross-view corresponding interest points (or cannot be split further due to minStepSize constraints). Uses O(n log n) recursive partitioning instead of O(n × intervals) naive approach: correspondences are loaded once per view, then partitioned as intervals are split. All tiles overlap by minStepSize to support fake corresponding points generation.
  • Field Details

    • CRITERION_NAMES

      public static final String[] CRITERION_NAMES
    • defaultCriterionChoice

      public static int defaultCriterionChoice
    • defaultMinTileSize

      public static long[] defaultMinTileSize
    • defaultMinSplitLevels

      public static int defaultMinSplitLevels
    • defaultAnisotropyChoice

      public static int defaultAnisotropyChoice
    • minSizeMultiplierFloor

      public static int minSizeMultiplierFloor
    • ANISOTROPY_CHOICES

      public static final String[] ANISOTROPY_CHOICES
  • Constructor Details

    • SplitOctTree

      public SplitOctTree(long[] minStepSize, int[] minSizeMultiplier, OctTreeSplitCriterion criterion, int minSplitLevels, double[] anisotropy)
      Constructor with all parameters.
      Parameters:
      minStepSize - Alignment constraint and overlap size
      minSizeMultiplier - Per-dimension multiplier for minimum split size, length must equal minStepSize.length (e.g., {4, 4, 2} means min tile size = {4*minStepSize[0], 4*minStepSize[1], 2*minStepSize[2]})
      criterion - The splitting criterion (determines when to stop splitting)
      minSplitLevels - Minimum number of split levels to always perform (0 = fully adaptive). Use minSplitLevels=1 for TPS-compatible splitting (guaranteed 8 non-co-planar tiles).
      anisotropy - Per-dimension voxel size ratio (e.g., {1, 1, 2} for 2x anisotropy in Z), or null for isotropic
  • Method Details

    • split

      Description copied from interface: SplitView
      Split a single view into sub-intervals.
      Specified by:
      split in interface SplitView
      Parameters:
      viewId - the view to split
      Returns:
      split result containing intervals and statistics, or null on error
    • maxIntervalSpread

      public int maxIntervalSpread(List<mpicbg.spim.data.sequence.ViewSetup> oldSetups)
      Description copied from interface: SplitView
      Compute the maximum number of intervals any single view could produce. Used to determine tile ID spacing.
      Specified by:
      maxIntervalSpread in interface SplitView
      Parameters:
      oldSetups - the view setups to consider
      Returns:
      upper bound on interval count per view
    • aggregateStatistics

      public String aggregateStatistics(List<? extends SplitResult> results)
      Description copied from interface: SplitView
      Aggregate statistics from multiple split results into a summary string. Called after parallel splitting to produce a single log message.
      Specified by:
      aggregateStatistics in interface SplitView
      Parameters:
      results - list of per-view split results
      Returns:
      formatted summary string
    • description

      public String description()
      Specified by:
      description in interface SplitView
      Returns:
      human-readable description of this splitter's configuration
    • setupGUI

      public static boolean setupGUI(ij.gui.GenericDialog gd, SpimData2 data, long[] minStepSize)
      Setup GUI components for oct-tree splitting parameters.
    • setupGUI

      public static boolean setupGUI(ij.gui.GenericDialog gd, SpimData2 data, long[] minStepSize, Set<Integer> driveByChannelIds)
      Setup GUI components for oct-tree splitting parameters.
      Parameters:
      driveByChannelIds - if non-null, interest-point label statistics (e.g. the "available for X/Y Views" counts) are restricted to views of these channels, which are the only ones whose own correspondences drive the split.
    • queryGUI

      public static SplitOctTree queryGUI(ij.gui.GenericDialog gd, SpimData2 data, long[] minStepSize)
      Query GUI components and create SplitOctTree instance.
    • queryGUI

      public static SplitOctTree queryGUI(ij.gui.GenericDialog gd, SpimData2 data, long[] minStepSize, Set<Integer> driveByChannelIds)
      Query GUI components and create SplitOctTree instance.
      Parameters:
      driveByChannelIds - must match the value passed to setupGUI(ij.gui.GenericDialog, net.preibisch.mvrecon.fiji.spimdata.SpimData2, long[]) so the label choices are parsed against the same (channel-restricted) view set.
    • getMinStepSize

      public long[] getMinStepSize()
    • getMinSizeMultiplier

      public int[] getMinSizeMultiplier()
    • getCriterion

      public OctTreeSplitCriterion getCriterion()
    • getMinSplitLevels

      public int getMinSplitLevels()
    • getAnisotropy

      public double[] getAnisotropy()