Boulder Laboratory for 3-Dimensional Electron Microscopy of Cells

EDGEMTF(1)							 EDGEMTF(1)

NAME
  edgemtf - Computes MTF curves from images of an edge

SYNOPSIS
  edgemtf [options] image_file output_rootname

DESCRIPTION
  Edgemtf analyzes an image of a vertically oriented edge and computes the
  modulation transfer function (MTF).  The MTF is the Fourier transform 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 vertical, in order to sample the
  full range of alignments between the edge and the pixels).  Because
  derivatives could be noisy, the program usually 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
  reference.
  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


OPTIONS
  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 parameter file
  (without the -):

 -input 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 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 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 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 OR -SummingOfLines   Integer
    Number of lines to sum into each line for alignment and analysis.  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 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 OR -NormalizationComponents   Integer
    Number of Fourier components near zero frequency to average together to
    normalize the curve to start at 1.0 for zero frequency.  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 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 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 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 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 OR -ParameterFile   Parameter file
    Read parameter entries as keyword-value pairs from a parameter file.

 -help OR -usage
    Print help output

  -StandardInput
     Read parameter entries from standard input.

HOW TO GET A CCD CAMERA MTF CURVE
  Take an unbinned image of the beam stop in the microscope, gain normalized,
  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., edge.2).

  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 following
  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 section.

  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 difference in
  the final curve even for a sharp edge.

  Run Edgemtf after picking an informative root name for the output (e.g. 200KV)
    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 genhstplt enter
    genhstplt
    1
    1
    2
    0
    rootname.out
    -2
    0,7
    1,10
    1
    /
    /
    1
    2
    /
    /
    2
    0
  
  At this point the graphs should appear; the first one with crosses, the
  second with circles.  If they are noisy you need to average more components
  (decrease thenumber 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 probably have
  to do so for binned cases too.


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