EE/CSE 576: Image Understanding

Spring 2001


Course Software

Updates

Downloading packages

Please send a mail to aksoy@ee.washington.edu if you have any problem with these packages.

Package descriptions

Viewing images (Only for MS-Windows)

ppmview **Only available for MS-Windows. You can use xv to view PPM/PGM images on Unix platforms.**
Shows a PPM or PGM image on the screen. Run with one or more image filenames as arguments. ppmview will only read images in the raw version of the format, not the ASCII version.

You can read more about the PPM/PGM image file formats.

Example:

ppmview blocks.pgm

Basic manipulation

thresh Thresholds a gray scale PGM image to a binary PGM image.

Use as:

  • thresh lo hi inputfile

    If "-" (a single hyphen) is given as inputfile, input is read from stdin. This program produces a new image (on stdout) of the same size as the input image. Every gray pixel between lo and hi (inclusive) becomes white (255); all others become black (0).

    Example:

    thresh 100 150 blocks.pgm > blocks_thresh.pgm
  • conrgn Labels 4-connected components in a binary PGM image.

    Use as:

  • conrgn [g|c] inputfile

    If "-" (a single hyphen) is given as inputfile, input is read from stdin. The output image (on stdout) will be black where the input image is black. Each nonblack pixel in the input image will be given a new grayscale output value that labels its connected component. If the image has fewer than 256 connected components, the program will output a grayscale PGM image, with each gray level (except 0) representing a component. If there are more than 255 connected components, the program will output a color PPM image, with each unique color representing a component. Giving a "g" or "c" argument before the input filename forces the output to be either grayscale or color. Forcing grayscale output when there are more than 255 regions will cause some labels to be reused.

    Example:

    conrgn c blocks_thresh.pgm > blocks_reg.ppm
  • autocolor Recolors a grayscale PGM image to make a color PPM image.

    Use as:

  • autocolor inputfile

    If "-" (a single hyphen) is given as inputfile, input is read from stdin. This program takes a grayscale image as input and produces on stdout a color PPM image of the same size as output. Each unique gray level in the input (except black) is mapped into a unique color. Black pixels are left alone. This program is most useful for viewing the output of conrgn.

    Example:

    autocolor blocks_reg.pgm > blocks_reg.ppm
  • makeelement Creates various simple binary PGM images.

    Use as:

  • makeelement box width height
  • makeelement disk diameter
  • makeelement ring diameter

    This produces (on stdout) various simple binary PGMs of various shapes. You may find these useful as structuring elements for binary morphology operations (which you'll have to code for assignment 1).

    Example:

    makeelement disk 9 > disk9.pgm
  • Edge detection

    canedg Produces an edge pixel list from a grayscale image.

    Required parameters:
    -i input PGM or PPM format image
    -o output edge pixel description file
    Optional parameters:
    -s float sigma value for convolution (default 0.4)
    -m int size of convolution mask (default sigma*4)
    -lt float low threshold value (default 1.4)
    -ht float high threshold value (default 2.0)
    -sp print sub-pixel localized values (default false)

    The subroutine only looks at those pixels which gradients are greater than the low threshold. If the gradient is greater than the high threshold, then the pixel is placed into a linked list for later processing (join edges). So the low threshold is used to reduce the processing time while high threshold controls the number of edges possibly extracted.

    Example:

    canedg -i blocks.pgm -o block_edgelist.txt
    edge_filter Converts an edge pixel list into a binary image.

    Required parameters:
    -i input edge pixel description file
    -o output PGM format binary image
    -r int number of rows in output image
    -c int number of columns in output image
    Optional parameters:
    -l int minimum length of edges (default 5)

    Example:

    edge_filter -i block_edgelist.txt -o block_edges.pgm -r 256 -c 256
    canny Produces an edge image in PGM format where graylevel 0 represents edge pixels and graylevel 255 represents background. Note that there is no default setting for the parameters and also the name of the output file is determined automatically (see the example below).

    Required parameters:
    imageAn image to process. Must be in PGM format.
    sigmaStandard deviation of the gaussian smoothing filter.
    tlowSpecifies the low value to use in hysteresis. This is a fraction (0.0-1.0) of the computed high threshold edge strength value.
    thighSpecifies the high value to use in hysteresis. This fraction (0.0-1.0) specifies the percentage point in a histogram of the gradient of the magnitude. Magnitude values of zero are not counted in the histogram.
    Optional parameters:
    writedirimOptional argument to output a floating point direction image.

    Implements the following Canny edge detector steps:
    1) Convolve the image with a separable gaussian filter.
    2) Take the dx and dy the first derivatives using [-1,0,1] and [1,0,-1]'.
    3) Compute the magnitude: sqrt(dx*dx+dy*dy).
    4) Perform non-maximal suppression.
    5) Perform hysteresis.
    Also optionally outputs a floating point RAW headerless file of the edge gradient "up the edge" where the angle is defined in radians counterclockwise from the x direction.

    Example:

    canny blocks.pgm 0.60 0.50 0.90

    Object Recognition Toolkit

    chainpix Produces a chained pixel list from a PGM binary image.

    Takes input from stdin and writes output to stdout. See the output format here.

    Example:

    chainpix < blocks.canny.pgm > blocks.cpx
    fex Segments chained pixel lists produced by chainpix into straight-line segments and circular arcs.

    Takes input from stdin and writes output to stdout. See the output format here.

    Example:

    fex < blocks.cpx > blocks.fex
    lpeg Low-level straight-line grouping. Groups straight-line segments produced by fex into parallel line pairs and various kinds of line junctions.

    Takes input from stdin and writes output to stdout. See the output format here.

    Optional parameters:
    -r int minimum line length
    -t int max angle between two "parallel" lines
    -q float minimum acceptable quality level

    Example:

    lpeg < blocks.fex > blocks.lpg
    ipeg Intermediate-level grouping. Groups the sets produced by lpeg into triplets, corners, and polygons.

    Takes input from stdin and writes output to stdout. See the output format here.

    Optional parameters:
    -t triplets only
    -c corners only
    -p closed polygons only

    Example:

    ipeg < blocks.lpg > blocks.ipg
    ort2image Takes the output of fex, lpeg, or ipeg, and draws the straight-line and circular arc segments, producing a PGM image. Takes input from stdin and writes output to stdout.

    Optional parameters:
    -r int # of rows
    -c int # of columns
    -b int background intensity
    -l int int int intensity, line thickness, endpoint intensity (for lines?)
    -i int int int intensity, line thickness, endpoint intensity (for curves?)
    -m int minimum length
    -L line segments only
    -C curved segments only

    Example:

    ort2image < blocks.ipg > blocks_drawn.pgm


    Last updated on 05/20/01 at 07PM.