mia-2dmyoica-nonrigid2(1)

πŸ“¦
version 2.4.7 Β· 3 versions
, in ubuntu jammy, ubuntu noble

🌸 mia-2dmyoica-nonrigid2 β€” like, the whole vibe 🌸

okay bestie, so this is part of the mia manual β€” mia-2dmyoica-nonrigid2(1), a General Commands Manual page. It's a whole program and it's lowkey iconic. Sit down, grab a boba, we're doing this. πŸ§‹βœ¨


πŸ’– NAME πŸ’–

mia-2dmyoica-nonrigid2 β€” runs a registration of a series of 2D images. That's it, that's the whole job. Periodt.


✨ SYNOPSIS ✨

mia-2dmyoica-nonrigid2 -i <in-file> -o <out-file> [options]

like, you need your in and your out, and then everything else is just seasoning. πŸŽ€


πŸ¦‹ DESCRIPTION πŸ¦‹

So mia-2dmyoica-nonrigid2 runs the non-rigid registration of a perfusion image series. It's giving main character energy in a pipeline.

Every single pass, here's the routine:

  1. First, an ICA analysis runs β€” it estimates and eliminates the periodic movement, and creates reference images with intensities similar to the corresponding original image. πŸ’…
  2. Then non-rigid registration runs using the "ssd + divcurl" cost model.

The B-spline c-rate and the divcurl cost weight get changed in each pass according to the parameters you gave. Slay, adaptive.

In the first pass, a bounding box around the LV myocardium may be extracted, which speeds up the computation. Not required, but it's a nice little shortcut. πŸƒβ™€οΈ

Special note, and it's an important one: this implementation always runs the registration from the original images, specifically to avoid the accumulation of interpolation errors. No cascading mistakes here, we stay grounded. 🌈

πŸ‘‘ OPTIONS πŸ‘‘

πŸ“ File-IO

  • -i, --in-file=(required, input); string β€” your input perfusion data set. Required, bestie, there's no skipping this one.
  • -o, --out-file=(required, output); string β€” the output perfusion data set. Also required. We love a matching pair. πŸ’ž
  • -r, --registered=reg β€” file name base for registered files. (The original page says "fiels" β€” we all knew what it meant. πŸ™ˆ)
  • --save-cropped= β€” save the cropped set to this file.
  • --save-feature= β€” save the segmentation feature images and the initial ICA mixing matrix. Two for one, we love to see it. ✨

🧚 ICA

  • --fastica=internal β€” which FastICA implementation to use. For the supported plugins, go peek at PLUGINS:fastica/implementation (it's further down this page, keep scrolling πŸ‘€).
  • -C, --components=0 β€” ICA components. 0 means automatic estimation. Let the algorithm decide, she's capable. πŸ’…
  • --normalize β€” don't normalize the ICs.
  • --no-meanstrip β€” don't strip the mean from the mixing curves.
  • -s, --segscale=0 β€” segment and scale the crop box around the LV. 0 = no segmentation.
  • -k, --skip=0 β€” skip images at the beginning of the series, like, for example because they're of other modalities. Not every frame is invited to the party. 🚫
  • -m, --max-ica-iter=400 β€” maximum number of iterations in ICA.
  • -E, --segmethod=features β€” the segmentation method. Your choices are:
    • delta-feature β€” difference of the feature images
    • delta-peak β€” difference of the peak enhancement images
    • features β€” feature images

πŸ”₯ Registration

  • -O, --optimizer=gsl:opt=gd,step=0.1 β€” the optimizer used for minimization. For supported plugins, check PLUGINS:minimizer/singlecost.
  • -a, --start-c-rate=32 β€” start coefficient rate in spines, which gets divided by --c-rate-divider with every pass. (Yes, the original spells it "coefficinet". We're being generous. πŸŽ€)
  • --c-rate-divider=4 β€” coefficient rate divider for each pass.
  • -d, --start-divcurl=20 β€” start divcurl weight, gets divided by --divcurl-divider with every pass.
  • --divcurl-divider=4 β€” divcurl weight scaling with each new pass.
  • -w, --imageweight=1 β€” image cost weight.
  • -p, --interpolator=bspline:d=3 β€” image interpolator kernel. For supported plugins see PLUGINS:1d/splinekernel.
  • -l, --mg-levels=3 β€” multi-resolution levels.
  • -P, --passes=3 β€” registration passes.

🫢 Help & Info

  • -V, --verbose=warning β€” verbosity of output: prints messages of the given level and higher priorities. The supported priorities, starting at the lowest level, are:
    • trace β€” Function call trace
    • debug β€” Debug output
    • info β€” Low level messages
    • message β€” Normal messages
    • warning β€” Warnings
    • fail β€” Report test failures
    • error β€” Report errors
    • fatal β€” Report only fatal errors
  • --copyright β€” print copyright information.
  • -h, --help β€” print this help.
  • -?, --usage β€” print a short help.
  • --version β€” print the version number and exit.

βš™οΈ Processing

  • --threads=-1 β€” maximum number of threads to use for processing. This number should be lower than or equal to the number of logical processor cores in the machine. -1 means automatic estimation. (The original says "Maxiumum" β€” she's doing her best. πŸ’€)

🧡 PLUGINS: 1d/splinekernel 🧡

  • bspline β€” B-spline kernel creation. Supported parameters are:
    • d = 3; int in [0, 5] β€” Spline degree.
  • omoms β€” OMoms-spline kernel creation. Supported parameters are:
    • d = 3; int in [3, 3] β€” Spline degree.

🌟 PLUGINS: fastica/implementation 🌟

  • internal β€” this is the MIA implementation of the FastICA algorithm.
    • (no parameters)
  • itpp β€” this is the IT++ implementation of the FastICA algorithm.
    • (no parameters)

and that's a wrap on part one, bestie β€” but we are not done, so don't go anywhere πŸ‘€

✨ PLUGINS: minimizer/singlecost ✨

okay so this is the part where we pick HOW the optimizer does its little thing πŸ’… every one of these is a singlecost minimizer plugin, and they all have their own lil parameter menu.


🌈 gdas

gradient descent but make it ✨automatic✨ β€” it corrects the step size on its own, no cap. here's what you can tweak:

  • ftolr = 0; double in [0, inf) β€” stop if the relative change of the criterion is below.
  • max-step = 2; double in (0, inf) β€” maximal absolute step size.
  • maxiter = 200; uint in [1, inf) β€” stopping criterion: the maximum number of iterations.
  • min-step = 0.1; double in (0, inf) β€” minimal absolute step size.
  • xtola = 0.01; double in [0, inf) β€” stop if the inf-norm of the change applied to x is below this value.

πŸ¦‹ gdsq

gradient descent, but it estimates the step quadratically β€” she's doing math math πŸ’… params:

  • ftolr = 0; double in [0, inf) β€” stop if the relative change of the criterion is below.
  • gtola = 0; double in [0, inf) β€” stop if the inf-norm of the gradient is below this value.
  • maxiter = 100; uint in [1, inf) β€” stopping criterion: the maximum number of iterations.
  • scale = 2; double in (1, inf) β€” fallback fixed step size scaling.
  • step = 0.1; double in (0, inf) β€” initial step size.
  • xtola = 0; double in [0, inf) β€” stop if the inf-norm of x-update is below this value.

πŸ‘‘ gsl

an optimizer plugin built on the multimin optimizers from the GNU Scientific Library (GSL) β€” https://www.gnu.org/software/gsl/ β€” she's iconic and she knows it. params:

  • eps = 0.01; double in (0, inf) β€” for gradient based optimizers: stop when |grad| < eps; for simplex: stop when simplex size < eps.
  • iter = 100; uint in [1, inf) β€” maximum number of iterations.
  • opt = gd; dict β€” the specific optimizer to be used. supported values are:
    • simplex β€” Simplex algorithm of Nelder and Mead
    • cg-fr β€” Flecher-Reeves conjugate gradient algorithm
    • cg-pr β€” Polak-Ribiere conjugate gradient algorithm
    • bfgs β€” Broyden-Fletcher-Goldfarb-Shann
    • bfgs2 β€” Broyden-Fletcher-Goldfarb-Shann (most efficient version)
    • gd β€” Gradient descent.
  • step = 0.001; double in (0, inf) β€” initial step size.
  • tol = 0.1; double in (0, inf) β€” some tolerance parameter.

πŸ”₯ nlopt

minimizer algorithms via the NLOPT library 🌈 for a full description of the optimizers go look at http://ab-initio.mit.edu/wiki/index.php/NLopt_Algorithms. params incoming, there's a LOT, stay with me bestie:

  • ftola = 0; double in [0, inf) β€” stopping criterion: the absolute change of the objective value is below this value.
  • ftolr = 0; double in [0, inf) β€” stopping criterion: the relative change of the objective value is below this value.
  • higher = inf; double β€” higher boundary (equal for all parameters).
  • local-opt = none; dict β€” a local minimization algorithm that may be required for the main minimization algorithm. supported values are:
    • gn-direct β€” Dividing Rectangles
    • gn-direct-l β€” Dividing Rectangles (locally biased)
    • gn-direct-l-rand β€” Dividing Rectangles (locally biased, randomized)
    • gn-direct-noscal β€” Dividing Rectangles (unscaled)
    • gn-direct-l-noscal β€” Dividing Rectangles (unscaled, locally biased)
    • gn-direct-l-rand-noscale β€” Dividing Rectangles (unscaled, locally biased, randomized)
    • gn-orig-direct β€” Dividing Rectangles (original implementation)
    • gn-orig-direct-l β€” Dividing Rectangles (original implementation, locally biased)
    • ld-lbfgs-nocedal β€” None
    • ld-lbfgs β€” Low-storage BFGS
    • ln-praxis β€” Gradient-free Local Optimization via the Principal-Axis Method
    • ld-var1 β€” Shifted Limited-Memory Variable-Metric, Rank 1
    • ld-var2 β€” Shifted Limited-Memory Variable-Metric, Rank 2
    • ld-tnewton β€” Truncated Newton
    • ld-tnewton-restart β€” Truncated Newton with steepest-descent restarting
    • ld-tnewton-precond β€” Preconditioned Truncated Newton
    • ld-tnewton-precond-restart β€” Preconditioned Truncated Newton with steepest-descent restarting
    • gn-crs2-lm β€” Controlled Random Search with Local Mutation
    • ld-mma β€” Method of Moving Asymptotes
    • ln-cobyla β€” Constrained Optimization BY Linear Approximation
    • ln-newuoa β€” Derivative-free Unconstrained Optimization by Iteratively Constructed Quadratic Approximation
    • ln-newuoa-bound β€” Derivative-free Bound-constrained Optimization by Iteratively Constructed Quadratic Approximation
    • ln-neldermead β€” Nelder-Mead simplex algorithm
    • ln-sbplx β€” Subplex variant of Nelder-Mead
    • ln-bobyqa β€” Derivative-free Bound-constrained Optimization
    • gn-isres β€” Improved Stochastic Ranking Evolution Strategy
    • none β€” don't specify algorithm
  • lower = -inf; double β€” lower boundary (equal for all parameters).
  • maxiter = 100; int in [1, inf) β€” stopping criterion: the maximum number of iterations.
  • opt = ld-lbfgs; dict β€” the main minimization algorithm. supported values are:
    • gn-direct β€” Dividing Rectangles
    • gn-direct-l β€” Dividing Rectangles (locally biased)
    • gn-direct-l-rand β€” Dividing Rectangles (locally biased, randomized)
    • gn-direct-noscal β€” Dividing Rectangles (unscaled)
    • gn-direct-l-noscal β€” Dividing Rectangles (unscaled, locally biased)
    • gn-direct-l-rand-noscale β€” Dividing Rectangles (unscaled, locally biased, randomized)
    • gn-orig-direct β€” Dividing Rectangles (original implementation)
    • gn-orig-direct-l β€” Dividing Rectangles (original implementation, locally biased)
    • ld-lbfgs-nocedal β€” None
    • ld-lbfgs β€” Low-storage BFGS
    • ln-praxis β€” Gradient-free Local Optimization via the Principal-Axis Method
    • ld-var1 β€” Shifted Limited-Memory Variable-Metric, Rank 1
    • ld-var2 β€” Shifted Limited-Memory Variable-Metric, Rank 2
    • ld-tnewton β€” Truncated Newton
    • ld-tnewton-restart β€” Truncated Newton with steepest-descent restarting
    • ld-tnewton-precond β€” Preconditioned Truncated Newton
    • ld-tnewton-precond-restart β€” Preconditioned Truncated Newton with steepest-descent restarting
    • gn-crs2-lm β€” Controlled Random Search with Local Mutation
    • ld-mma β€” Method of Moving Asymptotes
    • ln-cobyla β€” Constrained Optimization BY Linear Approximation
    • ln-newuoa β€” Derivative-free Unconstrained Optimization by Iteratively Constructed Quadratic Approximation
    • ln-newuoa-bound β€” Derivative-free Bound-constrained Optimization by Iteratively Constructed Quadratic Approximation
    • ln-neldermead β€” Nelder-Mead simplex algorithm
    • ln-sbplx β€” Subplex variant of Nelder-Mead
    • ln-bobyqa β€” Derivative-free Bound-constrained Optimization
    • gn-isres β€” Improved Stochastic Ranking Evolution Strategy
    • auglag β€” Augmented Lagrangian algorithm
    • auglag-eq β€” Augmented Lagrangian algorithm with equality constraints only
    • g-mlsl β€” Multi-Level Single-Linkage (require local optimization and bounds)
    • g-mlsl-lds β€” Multi-Level Single-Linkage (low-discrepancy-sequence, require local gradient based optimization and bounds)
    • ld-slsqp β€” Sequential Least-Squares Quadratic Programming
  • step = 0; double in [0, inf) β€” initial step size for gradient free methods.
  • stop = -inf; double β€” stopping criterion: function value falls below this value.
  • xtola = 0; double in [0, inf) β€” stopping criterion: the absolute change of all x-values is below this value.
  • xtolr = 0; double in [0, inf) β€” stopping criterion: the relative change of all x-values is below this value.

🌸 EXAMPLE 🌸

register the perfusion series given in segment.set by using automatic ICA estimation 🫢 skip two images at the beginning and otherwiese (yes, "otherwiese", we keep it) use the default parameters. store the result in registered.set.

mia-2dmyoica-nonrigid2   -i segment.set -o registered.set -k 2

πŸ’– AUTHOR(s) πŸ’–

Gert Wollny β€” the main character who wrote this, periodt πŸ‘‘


this software is Copyright (c) 1999‐2015 Leipzig, Germany and Madrid, Spain. it comes with ABSOLUTELY NO WARRANTY 😭 and you may redistribute it under the terms of the GNU GENERAL PUBLIC LICENSE Version 3 (or later). for more information run the program with the option --copyright.

no cap, "ABSOLUTELY NO WARRANTY" is in all caps for a reason, bestie πŸ’€

and that's the whole page, babes πŸ¦‹ it's from the USER COMMANDS corner of the world, version v2.4.7, and it's mia-2dmyoica-nonrigid2(1) β€” slay, go register something βœ¨πŸ’…

πŸ“¦ where this page comes from