The KUIM Image Processing System

The KUIM image processing system was implemented at the University of Kansas to support teaching and basic image processing and computer vision research. The image file format and I/O libraries have been designed for ease of use and portability to a wide variety of machines. At present, the system consists of over 100 general purpose and special purpose programs implemented in C.

The KUIM system is similar in spirit to an earlier package called /usr/image which originated at the University of North Carolina at Chapel Hill in the 1980's under the direction of Prof. Stephen Pizer (smp@cs.unc.edu). Questions about KUIM and suggestions for improvement should be sent to Prof. John Gauch (jgauch@eecs.ukans.edu).

As an aid in understanding the KUIM system, we have created manual pages for many common programs which include visual demonstrations of what the program does. This list is under constant development and is divided into the following categories:

  • COPYRIGHT
  • KUIM SOURCE
  • Image Access Library
  • Basic Operations
  • Geometric Operations
  • Contrast Enhancement
  • Noise Reduction
  • Edge Detection
  • Image Segmentation
  • Tomographic Reconstruction
  • Image Compression
  • Alphabetic Program Listing
  • Undocumented Programs

  • Image Access Library

    The KUIM image access library libIM.a contains a powerful collection of I/O functions which provide access to KUIM image files. Each file consists of a 1024 byte image header followed by image pixels in row major order. Eight pixel types are currently supported: BYTE, SHORT, INT, FLOAT, DOUBLE, COMPLEX, COLOR (24bit color), and PSEUDO (8bit color). Automatic byte swapping and type conversion is provided by the I/O functions im_read and im_write, so application programmers can use whatever internal image type is most natural for given application without worrying about the type of the input image. This was the major motivation for this I/O library. The image title and colormap can be read and modified using the im_get_title, im_put_title and im_get_cmap, im_put_cmap functions respectively. The program proto.c is a simple prototype image processing program.
  • proto.c
  • im_create
  • im_open
  • im_read
  • im_write
  • im_get_title
  • im_put_title
  • im_get_cmap
  • im_put_cmap
  • im_alloc1D
  • im_alloc2D
  • im_alloc3D
  • im_free1D
  • im_free2D
  • im_freec3D
  • Basic Operations

    A number of basic image processing operations are described in this section. These range from programs to display images and information in images, to programs for converting between data types and file formats. Several programs which perform point operations on images are also included in this section. (KUIM program names are in brackets)
  • Image Display (xdisp)
  • Header Display (header)
  • Histogram Display (histo)
  • Printing Images (imps)
  • Data Type Conversion (type)
  • Image Quantization (greymap)
  • Addition and Subtraction (add)
  • Multiplication and Division (mult)
  • Average Difference (avediff)
  • distance (Euclidean Distance Transform)
  • Frequency Domain Conversion (fft)
  • File Display in ASCII and Hexadecimal (show_hex)
  • Geometric Operations

    Geometric operations change the size or shape of an image. For example, image interpolation can be used to make an image larger or smaller. Images can also be rotated, translated, or warped to correct for image distortion or to generate a desired effect. Other operations for extracting sections of an image or combining multiple images are also useful in certain situations. The following geometric operations are currently supported. (KUIM program names are in brackets)
  • Interpolate (interp)
  • Translate, Rotate, Scale (move_image)
  • Reflect (flip)
  • Nonlinear Warp (warp)
  • Subrange Extraction (extract)
  • Multiple 2D -> 3D (imzcat)
  • 3D -> Multiple 2D (zsplit)
  • 3D -> Single 2D (unfold)
  • Contrast Enhancement

    The objective of contrast enhancement is to adjust an image to emphasize features of interest. In most cases, these features are small and have small intensity variations, so methods which boost the intensity variations in an image are useful for contrast enhancement. The following methods are commonly used for contrast enhancement. (KUIM program names are in brackets)
  • Intensity Windowing (greymap)
  • Butterworth Highpass Filtering (butter)
  • Homomorphic Filtering (butter -H)
  • Unsharp Masking (unsharp)
  • Histogram Equalization (greymap -h)
  • Adaptive Histogram Equalization (ahe)
  • Weighted Region Ranking (wrr)
  • Constant Variance Enhancement (cve)
  • Ideal Highpass Filtering (ideal)
  • Noise Reduction

    The problem of noise in images has led to the development of numerous noise reductions schemes. The basic premise of most methods is that averaging will increase the signal to noise ratio in an image. The following methods are commonly used for noise reduction. (KUIM program names are in brackets)
  • Noise Generation (noise)
  • Convolution (convolve)
  • Binomial Smoothing (binom)
  • Butterworth Lowpass Filtering (butter)
  • Gaussian Blurring (gauss)
  • Median Filtering (median)
  • Morphology Operations (morph)
  • Ideal Lowpass Filtering (ideal)
  • Nonlinear Diffusion (diffusion)
  • inverse_filter (Inverse Filter)
  • Edge Detection

    The objective of edge detection is to locate the boundaries of objects of interest in an image. This typically involves some search for intensity discontinuities, and some method for linking edge points into boundary curves. The following methods are commonly used for edge detection. (KUIM program names are in brackets)
  • Image Derivatives (deriv)
  • Gradient Magnitude (grad)
  • Laplacian Edges (laplacian)
  • Canny Edges (canny)
  • Zero Crossings (zeros)
  • Hough Transform (hough)
  • Edge Tracking (edge_track)
  • Nonlinear Diffusion (diffusion)
  • Image Segmentation

    The problem of identifying visually sensible regions in an image is called image segmentation. Since the definition of visually sensible varies considerably from application to application, there have been numerous segmentation algorithms devised. The following methods are commonly used for segmentation and postprocessing of segmented images. (KUIM program names are in brackets)
  • Intensity Thresholding (thresh)
  • Region Growing (region_grow)
  • Split Merge (split_merge)
  • Boundary Detection (bound)
  • Contour Following (contour)
  • Blob Coloring (blob_color)
  • Tomographic Reconstruction

    Computed tomography was one of the major breakthroughs in medical imaging. The basic concept is that the frequency domain properties of projection images (taken with an X ray or other source) can be manipulated to obtain the fourier transform of the cross-section image of the patient. The following programs provide a simple illustration of this process. (KUIM program names are in brackets)
  • Radon Transform (project)
  • Projection Filtering (filter_project)
  • Back Projection (back_project)
  • Inverse Radon Transform (inv_radon)
  • Image Compression

    Owing to the increasing demand of space for image storage, some methods are developed to alleviate this problem. The following methods are commonly used for image compression. (KUIM program names are in brackets)
  • Run Length Encoding (rl_encode)
  • Run Length Decoding (rl_decode)
  • Huffman Encoding (huff_encode)
  • Huffman Decoding (huff_decode)
  • Alphabetic Program Listing

    The KUIM system currently has over 100 image processing and computer vision programs. Unfortunately, documentation is available for only one third of these applications. The following list is an alphabetic listing of all programs described in the sections above. Naturally, as documentation becomes available, it will be added to this document.

    A B C D

  • add (Addition and Subtraction)
  • ahe (Adaptive Histogram Equalization)
  • avediff (Average Difference)
  • back_project (Back Projection)
  • binom (Binomial Smoothing)
  • blob_color (Blob Coloring)
  • bound (Boundary Detection)
  • butter (Butterworth Lowpass Filtering)
  • butter (Butterworth Highpass Filtering)
  • butter -H (Homomorphic Filtering)
  • canny (Canny Edges)
  • contour (Contour Following)
  • convolve (Convolution)
  • cve (Constant Variance Enhancement)
  • deriv (Image Derivatives)
  • diffusion (Nonlinear Diffusion for Edge Detection)
  • diffusion (Nonlinear Diffusion for Smoothing)
  • distance (Euclidean Distance Transform)

    E F G

  • edge_track (Edge Tracking)
  • extract (Subrange Extraction)
  • fft (Frequency Domain Conversion)
  • filter_project (Projection Filtering)
  • flip (Reflect)
  • gauss (Gaussian Blurring)
  • grad (Gradient Magnitude)
  • greymap (Image Quantization)
  • greymap -h (Histogram Equalization)
  • greymap (Intensity Windowing)

    H I J K

  • header (Header Display)
  • histo (Histogram Display)
  • hough (Hough Transform)
  • huff_decode (Huffman Decoding)
  • huff_encode (Huffman Encoding)
  • ideal (Ideal Highpass Filtering)
  • ideal (Ideal Lowpass Filtering)
  • imps (Printing Images)
  • imzcat (Multiple 2D -> 3D)
  • interp (Image Interpolation)
  • inverse_filter (Inverse Filter)
  • inv_radon (Inverse Radon Transform)

    L M N O P

  • laplacian (Laplacian Edges)
  • median (Median Filtering)
  • morph (Morphology Operations)
  • move_image (Translate, Rotate, Scale)
  • mult (Multiplication and Division)
  • noise (Noise Generation)
  • project (Radon Transform)

    Q R S

  • region_grow (Region Growing)
  • rl_decode (Run Length Decoding)
  • rl_encode (Run Length Encoding)
  • show_hex (File Display in ASCII and Hexadecimal)
  • split_merge (Split Merge)

    T U V

  • thresh (Intensity Thresholding)
  • type (Data Type Conversion)
  • unfold (3D -> Single 2D)
  • unsharp (Unsharp Masking)

    W X Y Z

  • warp (Nonlinear Warp)
  • wrr (Weighted Region Ranking)
  • xdisp (Image Display)
  • zeros (Zero Crossings)
  • zsplit (3D -> Multiple 2D)
  • Undocumented Programs

    The following programs are currently undocumented but their names (and hopefully the comments at the top of each program) may suggest their purpose. To see the usage of any of these programs run the program with no arguments.
  • align.c
  • average.c
  • blob_extract.c
  • blob_match.c
  • color_histo.c
  • color_to.c
  • complex2float.c
  • convert_raw.c
  • crack.c
  • deform2d.c
  • deform3d.c
  • diff_contour.c
  • fading.c
  • hierarchy.c
  • ice_edge.c
  • link_extrema.c
  • make_raw.c
  • mandel.c
  • metz.c
  • minima.c
  • ml_segment.c
  • needle.c
  • optic_flow.c
  • over.c
  • photometric.c
  • plot_contour.c
  • plot_line.c
  • plot_pts.c
  • pre_warp.c
  • predict.c
  • proto_fft.c
  • quantize.c
  • ridge.c
  • shade.c
  • skeleton.c
  • sphere.c
  • stats.c
  • stereo.c
  • title.c
  • to_color.c
  • track.c
  • vector_flow.c
  • water_merge.c
  • watershed.c
  • wiener.c
  • xdeform.c
  • zoom.c