edgemtf(1)                                                          edgemtf(1)

       edgemtf - Computes MTF curves from images of an edge

       edgemtf [options] image_file output_rootname

       Edgemtf analyzes an image of a vertically oriented edge and computes
       the modulation transfer function (MTF).  The MTF is the Fourier trans-
       form of the derivative of the edge.  The edge need not be perfectly
       vertical because the program will align the derivatives of individual
       lines across the edge.  (In fact, the edge should not be perfectly ver-
       tical, in order to sample the full range of alignments between the edge
       and the pixels).  Because derivatives could be noisy, the program usu-
       ally sums a few adjacent lines together before taking the derivative.
       The program proceeds as follows:
         1) It sums the lines together as indicated by the -sum option.
         2) It averages together the number of summed lines indicated by the
       -average option to form an initial reference.
         3) It takes the derivative of each summed line and of the reference
       (the simple difference between successive values).
         4) It aligns each derivative to that of the reference
         5) It computes shifted lines and adds them together to make a second
         6) It repeats step 3, 4, and 5, ending up with a final sum of all
       aligned lines.
         7) It takes the derivative of that final sum.
         8) It takes the Fourier transform of that derivative and then takes
       the magnitudes of the Fourier components.
         9) It averages successive sets of these magnitudes to obtain the MTF
       curve at the number of points indicated by the -points option.  It
       averages the first few components and scales the curve so that the
       average of those components would be 1.  This is not ideal.

       The program will put out a complete output file and an MTF file for
       each section suitable for use with Mtffilter.  The complete file has
       three columns of data, where the first column is a type number.  There
       are five kinds of output for each section:
       section_number      frequency     averaged MTF value
       100+section_number  frequency     unaveraged scaled Fourier magnitudes
       200+section_number  X coordinate  average of aligned lines
       300+section_number  X coordinate  derivative from average of lines
       400+section_number  Y coord/sum   alignment shift for each summed line

       Edgemtf uses the PIP package for input exclusively (see the manual page
       for pip).  The following options can be specified either as command
       line arguments (with the -) or one per line in a command file or param-
       eter file (without the -).  Options can be abbreviated to unique let-
       ters; the currently valid abbreviations for short names are shown in

       -input (-i) OR -InputFile      File name
              Input file with images of edges.  If this option is not entered,
              the first nonoption argument will be used for this entry.

       -rootname (-r) OR -RootNameOfOutput      File name
              Root of names for the output files.  If this option is not
              entered, the second nonoption argument will be used for this
              entry. The complete output file will be named with this root
              plus ".out"; MTF files for individual images will be named with
              this root plus "-n.mtf", where n is the section number.

       -sections (-se) OR -SectionsStartAndEnd       Two integers
              Starting and ending sections to analyze (numbered from 0).  The
              default is to do all sections in the input file.

       -points (-po) OR -NumberOfPoints    Integer
              Number of points to produce in the averaged MTF curve.  If the
              curve appears irregular, reduce this value.  The default is 20.

       -sum (-su) OR -SummingOfLines       Integer
              Number of lines to sum into each line for alignment and analy-
              sis.  The default depends on the indicated binning: 3, 2, 1 and
              1 for binnings 1, 2, 3, and 4.  If data are particularly noisy,
              this number may need to be increased.  However, if the angle of
              the edge is more than a few degrees, it may be necessary to
              reduce this number to 1 to avoid blurring the edge by summing
              without aligning lines.

       -average (-a) OR -AveragingForReference       Integer
              Number of summed lines to average together to make the initial
              reference for aligning other summed lines.  The default depends
              on the indicated binning: 2, 2, 2 and 1 for binnings 1, 2, 3,
              and 4.

       -components (-co) OR -NormalizationComponents      Integer
              Number of Fourier components near zero frequency to average
              together to normalize the curve to start at 1.0 for zero fre-
              quency.  The default depends on the indicated binning: 4, 2, 2
              and 1 for binnings 1, 2, 3, and 4. This number may need to be
              decreased if images are not very wide.  If too many components
              are included, then the whole curve will be scaled too high, and
              the first averaged MTF value might even exceed 1.

       -binning (-b) OR -BinningOfImages   Integer
              Binning of the images, used to select the defaults for summing
              and normalization, as described above for the -sum, -average,
              and -components options.

       -lines (-l) OR -LinesForReference   Multiple integers
              Y coordinate of the middle line to use for making an initial
              reference.  When the edge is very sharp, this entry allows you
              to specify a place where the edge falls most strongly between
              two pixels.  The default is to take the middle coordinate in Y.
              If you use this option, you must enter a value for each section
              that is being analyzed.

       -cross (-cr) OR -CrossingValue      Floating point
              The program will report the frequency at which the MTF crosses
              below a particular value.  This single number can be useful for
              comparing different curves that have similar shapes.  The
              default is 0.5.

       -zero (-z) OR -ZeroDerivative       Integer
              X coordinate beyond which to zero out the derivative.  This
              option was apparently helpful for images that had a gradient on
              the right side.

       -param (-pa) OR -ParameterFile      Parameter file
              Read parameter entries as keyword-value pairs from a parameter

       -help (-h) OR -usage
              Print help output

              Read parameter entries from standard input.

       Take an unbinned image of the beam stop in the microscope, gain normal-
       ized, with a high number of counts.  You are only interested in the
       straight segment of the beam stop, so you can acquire a subarea that
       excludes unneeded areas.  However, include at least as much white area
       above and below the beam stop as the width of this straight segment.

       Open the image in 3dmod and activate the Zap window rubberband.  Draw
       the rubberband to encompass the good area of one edge of the beam stop
       in the straight region.  Omit bumps if possible, but otherwise make the
       band as long as possible.  Make it about 1 1/2 times as high as the
       width of the beam stop, and position it so that it is centered on the
       edge.  Select File-Extract in the Info window to save this to a file
       (e.g., edge.1).

       Shift the rubberband with the second mouse button to center it on the
       other edge.  Run File-Extract again to save to a second file (e.g.,

       Run header on each file to make sure they are the same size.
         header edge.1
         header edge.2
       If they are not the same size, put the smaller one first in the follow-
       ing newstack command, or specify a rotated output size with the -size
       option.  Stack and rotate the two images:
         newstack -ro 90 edge.1 edge.2 edges.st

       Open the stack file in 3dmod and click on the middle of the edge. Open
       a graph window and zoom and/or stretch it until you can see the pixel
       steps easily (use the left and right arrows to step by pixels in X).
       Use up and down arrows to look at various points along the edge and see
       if it rasters between places where the edge falls sharply over one
       pixel, and places where it falls a lot over two pixels instead.  A very
       sharp edge will show a variation like this, whereas unbinned images
       typically will not.  If you see this kind of behavior, pick a Y value
       where the big falloff is over one pixel instead of two.  You want a
       place where there is a step from one pixel at some distance below
       halfway up to the next pixel being the same distance above halfway up.
       You do not want a place where there is a pixel at a value halfway up.
       Watch where the red line cuts the curve as you go up and down in Y
       (shift with left and right arrows to keep the line near the center of
       the edge).  Repeat this procedure to pick a Y value for the other sec-

       If you don't see a variation in the falloff, just take the default of
       starting at the center in Y.  If do see the variation but find all this
       too confusing, you can skip this step, since it makes very little dif-
       ference in the final curve even for a sharp edge.

       Run Edgemtf after picking an informative root name for the output (e.g.
         edgemtf edges.st 200KV

       Examine the MTF curves to make sure they are sufficiently smooth and
       properly normalized, and to pick one side of the edge over the other.
       You could do this with any plotting program.  To use Onegenplot
         onegenplot -ty 0,1 rootname.out

       The first curve will be graphed with circles, the second with crosses.
       If they are noisy you need to average more components (decrease the
       number of output points).

       To analyze at different binnings, just run, for example,
         newstack -bin 2 edges.st edgesbin2.st
         edgemtf -bin 2 edgesbin2.st 200KVbin2

       The amount of summing and averaging is set based on the -bin entry, but
       if you had to change the defaults for the unbinned case, you will prob-
       ably have to do so for binned cases too.

       Written by David Mastronarde, late 1990's
       Added to IMOD, 6/3/11

       Email bug reports to mast at colorado dot edu.

BL3DEMC                              4.7.3                          edgemtf(1)