Table of Contents


ImageTracker is an application designed to track and measure motion in image sequences. Videos often contain motion of several types, and analysis of these motions can be difficult. For example, videos of cells dividing show the cell moving within solution, kinetochores moving back and forth accross the cell equator, and microtubule structures migrating from the equator to the poles. ImageTracker enables analysis of this type of motion through a multiscale approach. The video is first stabilized with respect to global motion and flow analysis of smaller scale structures follows.

ImageTracker was written to analyze microscopy videos. Several challenges in analyzing microscopy video mean ImageTracker's performance will depend partially on the nature of the video being analyzed. In particular, performance may suffer on videos that have low signal-to-noise ratio, poor feature resolution, sparse temporal sampling (objects move too much between fames), and short object life (features appear and disappear frequently).

The text of this guide refers to the Windows version of ImageTracker, but the screenshots are of the Linux version. The difference between ImageTracker versions on these two platforms is purely aesthetic.


Remove previous versions of ImageTracker from your computer before installing updates. To uninstall ImageTracker, select Start—>All Programs—>NSRG—>ImageTracker—>Uninstall ImageTracker from the start menu.

Note: ImageTracker is a stand-alone application and does not require the NSRG Runtime.

Download and execute the installer from the NSRG download page. The NSRG developers recommend that you accept all default parameters in order to conform to NSRG standards. This will create a folder on your harddrive, C:\NSRG\bin\ImageTracker, and will add to your programs menu a folder NSRG\ImageTracker.

Run ImageTracker by selecting Start—>All Programs—>NSRG—> ImageTracker—>ImageTracker.


The ImageTracker main window.

The main ImageTracker window is shown to the right. The window consists of a menu bar on the top, a data control panel on the left, and an image panel on the right. ImageTracker will launch new dialog windows for different purposes. Most of these windows may be moved around the screen, resized, or temporarily hidden.

Program information will be written to a logging file at various points during execution. This information may be useful for making sure the application is still running or troubleshooting the application if something goes wrong. You can view the log messages by selecting View—>Logger. Each log message has an associated logging level on the following scale of increasing severity: Verbose, Debug, Info, Warn, Error. From the logging window you can limit what messages get logged—all messages at or above the selected logging level will be written. Info is the recommended logging level; lower levels can produce enough messages to noticably slow down the application. The log messages displayed in the logger dialog do not update automatically. Press the Refresh button to refresh the logger messages.

Occasionally messages from libraries ImageTracker depends on may be printed to other locations. Some of the ITK classes used in image registration print messages to the console (standard out) if ImageTracker is launched from a command line (not common on Windows). VTK classes sometimes print messages to a separate logging window; this usually indicates something has gone very wrong with the visualization system.

Progress dialog

The progress dialog displayed while ImageTracker is performing image registration.

When ImageTracker is performing an image processing task, a progress bar will appear displaying a graphical depiction of about how much of the task has completed as well as an estimate of the time remaining to completion. A Cancel button on the progress dialog enables a user to request that a process terminate. The task may not terminate immediately after pressing the Cancel button, however; ImageTracker will wait until the next convenient point to stop the process. A few processing tasks may ignore requests to stop all together—this may be because at the next convenient stopping point the task is nearly finished anyway.

Working with Images

ImageTracker operates on stacks of individual image files; a set of images constitutes a video. ImageTracker can read many types of images, including TIFF, PNG, JPG, MHA, and VTK. There have been some problems reading some types of TIFF images, but this should be remedied as of ImageTracker v2.00. Currently, ImageTracker does not support metamorph stacks, video files (e.g. AVI, WMV), or raw camera files. Software such as ImageJ can be used to convert images in these file formats into a format ImageTracker can read.

Loading Images

Image file list

The Image Files control panel specifies which image files are loaded in ImageTracker.

ImageTracker can have one active image stack and one active vector stack loaded at a time. (Previous version could have multiple stacks open at once, but this was a little cumbersome.) To load an image stack, select the Images tab from the data control panel and select the Image Files item from the filter list at the top. An Image Files control panel appears below the filter list. Below the filter list is a list of file names that will be loaded into ImageTracker. Modify this file list by using one of the buttons below:

Select a single image, and let ImageTracker find files with the same naming convention. This is the easiest way to specify a series of files.
Select multiple files to add to the file list. The file names will be sorted alphabetically as they are added. A maximum of around 1000 file names can be selected at one time.
Specify a file series naming convention pattern by selecting a root directory, file prefix, number format, file extension, and numeric range. Press the Enter key as you modify each field in the pattern specification dialog to update the example name displayed below. (This option is seldom used— use it if you have a large number of files in a series, but only want to operate on a subset of that series.)
Remove any selected file names from the list.
When the list of file names is complete, click the Apply button to load the named files into ImageTracker. The first image in the list will be displayed in the image panel. The Apply button should be pressed whenever any changes are made to the Image File control panel to have those changes reflected in ImageTracker.

Loading Vectors

A vector image is an image in which every pixel contains vector information instead of intensity information. For example, the output of an optical flow computation, discussed elsewhere in this guide, is a vector image that explains the motion of intensities between images.

Vector data is loaded in a similar way to image data. Click on the Vectors tab of the data control panel to bring up the vector file control panel. A list of vector image files can be modified in the same way as the list of image files on the Images tab. The visualization control panel below the vector file list provides options for how to display the vector image data.

Vector Visualization

Vector images can be displayed with two different visualizations: Glyph and Height Map. The Method combo box in the vector visualization control panel selects between these two options. Controls below this combo box enable modifying aspects of the visualization.

Note: if the controls for the current visualization are not visible (this sometimes happens when the vector images are automatically loaded as the result of a processing task), press the Apply button below the vector image list. This should update the control panel.

Image display

ImageTracker's vector glyph visualization.

The Glyph visualization displays regularly-spaced vector glyphs across a vector field. Each glyph is scaled according to the vector magnitude and oriented according to the vector direction. The vector visualization control enables rescaling glyphs—setting the scaling to 1.0 will match the glyph lengths to the underlying vector magnitudes. Drawing a glyph at every pixel location would clutter the visualization. The Mask Ratio slider adjusts the spacing between adjacent glyphs. Some spacings produce distracting patterns of glyph placement. Generally, adjusting the Mask Ratio up or down by a few values will correct this.

Image display

ImageTracker's vector height map visualization.

Height map visualization maps the magnitude of the vector image to the height of a surface. It may be helpful to rotate the image plane to better view the surface when using this visualization. The Color Map combo box controls the colormap used to paint the surface. The Scale Factor slider controls the scaling of the surface. The Magnitude Function combo box selects between height mapping the vector magnitude or a single vector component.

Other Visualization Options

ImageTracker provides visualization for computed flow fields (as of version 2.06). ParaView, a free application from Kitware, provides a more flexible visualization application that may be useful when ImageTracker's visualizations are not sufficient. Follow the instructions from Kitware on how to install and run ParaView.

Another option for people familiar with VTK is VisTrails, a visualization workflow application from the University of Utah.

Image Controls

Image display

ImageTracker displaying an image sequence of fibrin sheet manipulation.

In the main ImageTracker window, the data control panel on the left displays which image files are currently loaded. Images are drawn in the image display panel on the right.

To change the magnification of the current image, right click on the image, and drag the mouse up or down. To move the current image, center click on the image and drag the mouse in the desired direction. To rotate an image, left click on the image and drag the mouse.

Image display

The Window/Contrast dialog controls display properties of images in ImageTracker.

The display properties of the image display panel can be adjusted by selecting View—>Window/Contrast from the ImageTracker menu. This dialog controls only the display of images, not the actual intensity values. The Maximum and Minimum sliders change the intensity values displayed in the image panel. The Range combo box controls the range of values displayed on the intensity sliders. The Auto button automatically adjusts the maximum and minimum display values to the maximum and minimum intensity values in the currently displayed image. You may need to adjust the display contrast when switching between different types of images (e.g. changing from 8-bit to 16-bit images).

Image size and intensity statistics for the currently displayed image can be shown by selecting View—>Image Info from the menu. This will display the Logger window with the most recent message containing the image information. Note that a log level of Info or lower needs to be selected in order for the image information to be displayed.

ImageTracker frame controls

The image frame control in ImageTracker.

Controls below the image display panel adjust the index of the frame that is displayed. Move the slider to scan through the loaded images. To jump to a specific frame, enter the frame index in the text box and press Enter. A set of buttons to the right of the slider enables playing, rewinding, pausing, single frame advance and rewind, and skipping to either end of the image sequence.

Images and vector visualizations are displayed simultaneously. The frame index range is based on the larger of the number of loaded images and loaded vectors. If the two sequences are of different sizes, the visualization from the shorter sequence will no longer update once the frame index exceeds the length of that sequence.

Saving Visualizations

To save a visualization displayed by ImageTracker, select File—>Save View Images. This will bring up a dialog that enables selecting an output directory, file naming convention, and the range of frames to save. The images saved will be exactly what is displayed in the ImageTracker image panel. To save the result of applying a set of filters, see the Filters section below.

Warning: Do not let any other window obscure the ImageTracker image display panel and do not minimize ImageTracker when saving visualizations. Doing so will corrupt the saved images. The frame index slider provides progress information and a message will be displayed when ImageTracker has finished saving the visualizations.

Warning: If you save a set of visualizations, then resize the image display panel, and then try to save another set of visualizations, ImageTracker will crash. The VTK class responsible for capturing images from the image display panel does not handle this gracefully.


ImageTracker has two main image manipulation modes: filtering and processing. Filtering applies an operation on images as they are displayed in the ImageTracker image panel, and results are visible instantly. (This is similar to filtering in other imaging applications such as ImageJ or Gimp.) Processing typically involves more complex computations that create a new set of output images; those new images must be loaded into ImageTracker to see the results of a processing task.

Filtering is often used to prepare an image set for processing. The list at the top of the Images tab in the control panel contains the names of all filters that are being actively applied. The Image Files filter is a special filter that is always present and can be used to load image files as shown above. Other filters can be added to the list by selecting them from the Filters menu. Filters are chained and applied in the order that they appear in this list. Selecting any filter in the filter list displays that filter's configuration panel below the filter list. Changes to filter parameters are visible instantly in the image window.

The Remove button at the bottom of the filter list removes the currently selected filter from the filter list. The Image Files filter is a special filter that cannot be removed (with no image files loaded there is no image data to filter). The Clear button resets the filter list to its initial state with no filters or image files loaded.

Saving Filter Images

A set of filtered images can be saved by selecting File—>Save Filter Images from the menu. This will save the output from the filter pipeline that is displayed in the image filter list, not the visualization displayed in the image panel. Save Filter Images dialog includes controls for specifying the output directory and file naming convention to use. There are also several output options:

Pixel Type
Specifies the data type of pixels in the output images. Use 16-bit for images with intensities in the normal camera output range (floating point values will be truncated). Use floating point for computed images that have small fractional values.
Rescale Intensities
When this box is checked, the output image intensities will be rescaled to match the full range allowed by the output pixel type.

Note: Saving filter pipeline output requires understanding a little about image file types. ImageTracker can save image files in any format supported by ITK. This includes TIFF, PNG, JPG, MHA, and VTK among many others. Some file types (e.g. TIFF and PNG) only allow integer pixel types, and specifying a floating point pixel type will likely produce an error. When saving floating point images, be sure to select a file extension that has floating point support (e.g. MHA and VTK).


Threshold filter

The Threshold filter limits the range of intensities present in an image.

The threshold filter sets any pixels from an input image that lie outside an intensity range to zero (black). The threshold control panel has the following controls:

Upper and Lower Bound
Sliders that adjust the range of pixel intensities that pass through the threshold filter.
Controls the range of pixel intensities displayed on the threshold bound sliders. There are presets for 8-bit and 16-bit images, and an option for setting the slider range to match the intensities of the current input image.


Gaussian filter

The Gaussian filter applies smoothing to an image.

The Gaussian filter convolves an input image with a Gaussian kernel. Convolution with a zero-order Gaussian smooths (blurs) the image. The scale (standard deviation) of the Gaussian filter determines the degree of smoothing applied. Convolution with a first-order Gaussian along one dimension computes the derivative of the image along that dimension at the scale of the Gaussian. The Gaussian filter control panel has the following controls:

X- and Y-direction Scale
Sliders that select the Gaussian kernel scale along the x and y dimension of the input image. The scale determines the standard deviation of the Gaussian kernel in pixel units.
When the Lock button is depressed, the X- and Y-direction Scale sliders will move together.
X- and Y-direction Order
Controls the order of the Gaussian filter applied along each dimension.

Gradient Magnitude

Gradient magnitude filter

The Gradient Magnitude filter finds edges in an image.

The Gradient Magnitude filter finds edges in an image. The gradient (first derivative) of the input image is computed in each direction with a Gaussian kernel at a spatial scale (see Gaussian Filter), yielding Ix and Iy. The gradient magnitude is then given by: G = sqrt(Ix^2 + Iy^2). Edges become bright in a gradient magnitude image, so this filter is often used as an edge detector. The Gradient Magnitude control panel has the following controls:

The spatial scale of the Gaussian kernels used in gradient computation. Larger values find the edges of larger image features.
Normalize Across Scale
When this option is checked, the brightness of the filtered image will not fade at larger spatial scales. When this option is disabled, use the Window/Contrast control to rescale the contrast if the image becomes dim.


The Logarithm filter takes the logarithm (base 10) of an image. Zero values in the input image are mapped to zero values in the output image. This filter has no options.


Flatfield filter

Flatfielding corrects for imaging artifacts such as constant occlusion and uneven illuminaton.

Constant image flatfielding and/or subtraction are techniques commonly used in microscopy to correct for imaging artifacts. Flatfielding divides input images by a constant image to correct for uneven illuminaton or occluding objects in bright field imaging. An appropriate flatfield image would be an image of a blank slide or "bright" calibration (even better, the mean of several such images) or the transmission map obtained from the Remove Occlusions process (discussed below). Background subtraction subtracts a constant image to correct for sensor noise or background signal in fluorescent microscopy. An appropriate background image would be a "dark" calibration image taken with the lamp off (even better, the mean of several such images). The Flatfield control panel enables either or both of these techniques to be applied simultaneously. When both background (B) and flatfield (F) images are supplied, the output image (O) is given by: O = (I - B)/F. That is, the background image is subtracted from the input image before flatfielding is applied. The following controls compose the Flatfield control panel:

Flat Image
Specifies whether flatfielding should be applied. When checked for the first time, this control prompts for the flatfield image. To select a different flatfield image, use the Browse button.
Background Image
Specifies whether background subtraction should be applied. When checked for the first time, this control propmts for the background image. To select a different background image, use the Browse button.


Processes in ImageTracker are generally more computationally intense than filters. For example, optical flow computation finds a motion field that expains the intensity changes between images in a sequence. The optical process results in a set of output vector images saved to disk. Once the process launches, ImageTracker performs the flow computation on all image pairs in the sequence. When the process is complete, ImageTracker may automatically load the result.

Saving Data

Output control panel

This control panel is common to all ImageTracker processes that output images.

Whenever ImageTracker needs to save image data, a dialog box will prompt for output. The output options are always the same.

The directory in which to save all output files
The prefix to apply to saved images
Number format
A C-style number format, e.g. %04d, which means a zero-padded 4 digit integer
The file type extension to apply; ImageTracker will often choose this for you
File index range
The beginning and ending index for the file sequence; ImageTracker will often choose this for you

Note: ImageTracker saves images in 16 bit grayscale format. 16 bit images may appear completely dark in image viewers that only handle 8 bit images. ImageTracker, of course, is a 16 bit image viewer, and can be used to view the images it outputs.

Remove Occlusions

Removing occlusions

Removing fixed partial occlusions from a video of beating cilia.

Before and after removing occlusions

Before (left) and after (right) partial occlusion removal.

A lot of factors can contribute to microscopy images that are not optically optimal. Objects that are spurious to the experiment end up in the optical path—this can be dust on the image sensor or coverslip, or it can be part of the specimen that is close enough to the focal plane (slab) to appear in the final image. Occlusion removal may be able to remove fixed elements from bright-field micrsocopy videos in which the features of interest are moving. This method depends on the specimen moving and on the fixed occlusions transmitting a portion of the microscope's illumination. The result of this process is a set of corrected images and the transmission map that holds the computed constant transmission factor at every location on the image plane. ImageTracker can open this type of image (it has floating point pixels), which can be useful to see the structure of occluding regions. In the transmission map, bright values indicate areas of the image plane that constantly transmitted a larger percentage of light than darker areas. The transmission map can be used as a flatfield image when examining a longer image sequence captured with the same imaging system.

Select Process—>Remove Occlusions to show the Remove Partial Occlusions dialog. The following parameters specify how occlusion removal will be attempted:

Specifies the computation that will be used to estimate the constant amount of light absorbed at each image location. The Mean metric is faster but the Median metric perfoms better if there are slow moving objects in the specimen.
Max Transmission
This setting adjusts the overall brightness of the final images. Select 100 to only increase the brightness of the image everywhere. Select 50 to maintain the average intensity between the input and output images. Note that some intensity values of the output images may become clipped to the maximum allowable output level. If this happens (the resulting images will looked washed out or saturated), decrease the value of this slider.
Fourier Padding
This value is seldom changed. The padding slider corresponds to a windowing applied to images when using the Median transmission metric. The default value of 0.5 will use a window of half the image size on each boundary when computing Fourier transforms.
The common output options are available.
Transmission Map
This is an image file in which to store the transmission map. Use an image type that supports floating point, such as MHA or VTK.
Open output when finished
If this box is checked, automatically load the output images when finished.


Multiresolution registration

Multiple resolution registration in action.

Stabilization (registration) aligns image sequences with respect to certain types of motion. To align a pair of images, the transform that best aligns intensities in two images is found. The effect on an image sequence transfroms the images such that strong image features do not move from frame to frame. Note that thresholding can often improve the registration by segmenting the objects of interest and surpressing the background.

Image pyramid

A six level image pyramid.

Multiple resolution registration aligns images iteratively using a series of coarse to fine image resolution scales. This method provides several advantage over single-scale resolution: it is more robust to large initial displacements, it enables targeting the scale of features to consider for registration, and it typically performs faster. The method relies on the user specifying an image pyramid, that defines a series of image resolutions. Registration is performed at each pyramid level starting at the most coarse; the result of each level's registration is propagated to the next level of the pyramid. Each lower resolution level of the image pyramid is generated by smoothing and rescaling the preceding image to half its width and height.

Launch the Multi-Resolution Registration dialog by selecting Process—>Stabilize from the ImageTracker menu. The alignment dialog consists of the following options:

Defines the resolution bounds of the multiscale pyramid. Adjusting either of these sliders updates the image in the image panel to show the effect of the smoothing.
Maximum Smoothing
Adjust the Maximum Smoothing to smooth all but the coarsest image features that should be aligned.
Minimum Smoothing
Adjust the Minimum Smoothing to smooth noise and any small scale features that should not be considered for alignment.
The parameters in this section are seldom changed. These parameters change the inner-workings of the multiresolution registration algorithm.
The maximum number of alignments to try at each resolution scale.
Initial Maximum Step Length
The largest translation (in pixel units) to try at each alignment iteration at the coarsest scale.
Initial Minimum Step Length
The smallest translation (in pixel units) to try at each alignment iteration at the coarsest scale; for motion below this, the algorithm continues to the next resolution.
Inter-level Step Scale
The factor by which to divide the Step Lengths at each finer scale.
The common output options are available.
Transform File
A text file in which to store the image alignment transforms. This file is useful to apply the same alignment to a different set of images (e.g. for multi-channel imaging.
Open output when finished
If this box is checked, automatically load the output images when finished.

Note: ImageTracker adds black pixels to transformed images where there is no original image data. Because ImageTracker also rescales images to maximize contrast when displaying images, it may appear that the image intensity has shifted in transformed images.

Apply Transform

Applying transform

Applying a set of transforms from a previous alignment to a new data source.

Sometimes more than one image sequence is captured during an experiment. In some situations it may be easier to compute registration transforms from one series of images and apply them to another. For example, with separate fluorescent labeling of a mitotic spindle and kinetechores, the spindle image channel contains enough information to obtain a good alignment while the kinetechore channel does not. Select Process—>Apply Transform to launch the Apply Transform dialog. This process has the following options:

Transform File
Specify the text file that contains the transfrom information from the previous image registration. This should be output from a Stabilize process.
The common output options are available.
Open output when finished
If this box is checked, automatically load the output images when finished.

CLG Optical Flow

ImageTracker provides methods to determine the image motion from an image sequence. Optical flow is an estimation of real world motion projected onto the image plane. In the case of 2D motion where the image plane is parallel to the motion plane, optical flow is a good estimate of real world motion. This scenario is common in microscopy. Flow computation results in a vector image in which each pixel vector represents the computed velocity in the image's x and y directions. Vector images can be loaded and viewed from the Vectors data tab.

CLG optical flow

Computing the optical flow of a microscopy video.

The Combined Local Global (CLG) method of optical flow computation is described in: Bruhn, Andres, Joachim Weickert, and Christoph Schnorr. Lucas/Kanade meets Horn/Schunck: Combining local and global optic flow methods. International Journal of Computer Vision, 61(3), 211-231, 2005. The implementation provided in ImageTracker is the multiresolution, simple temporal difference variant. The algorithm iteratively estimates optical flow by minimizing an engergy functional that includes a local intensity constancy term (the Lucas & Kanade part) and a global smoothness term (the Horn & Schunck part).

To compute optical flow, select Process—>CLG Optical Flow from the menu. When the CLG Optical Flow dialog is active, the image displayed in the image panel will be filtered with a Harris feature detector. This image is useful for determining the Derivative and Integration scale parameters. The goal is to adjust these scale parameters such that the features of interest appear as distinct blurry blobs. The CLG process has the following options:

Derivative Scale
The spatial scale used to compute image derivatives; adjust this to the noise level present in the images.
Integration Scale
The spatial scale used when integrating local regions of the image. Adjust this to the size of the predominant features that are being tracked.
Number of Levels
The number of resolution levels to use in the computation. More levels are required if there are larger motions between frames.
Specifies the number of iterations to complete when minimizing the error functional at each resolution level; more iterations will presumably provide a lower error residual but will take longer.
Adjusts the constant scaling of the smoothness term in the energy functional; a larger number will result in smoother flow fields, a smaller number will allow more turbulent flow fields. For 16 bit images, this number needs to be rather large, like 10e4. For 8 bit images, 100-200 is a reasonable range.
The common output options are available.
Open output when finished
If this box is checked, automatically load the output images when finished. Remember that vector images and visualizations are controlled from the Vectors data tab.

Click the Run button to start the optical flow computation. ImageTracker's implementation of the algorithm is notoriously slow to run; the progress bar will provide an estimate of how long the process will take after computing the flow for the first image pair. When analyzing long image sequences, it is advisable to try the flow computation on a shorter image sequence to find an appropriate set of parameters and then analyze the full image sequence with the same settings.

Hornn & Schunck Optical Flow

This process is seldom used because the CLG Optical Flow implementation is superior in several ways. The Horn and Schunck optical flow computation is a classic motion estimation algorithm that uses only the global term from the CLG computation. This process remains for comparison purposes only. The following parameters control this process:

Derivative Scale
The spatial scale used to compute image derivatives; adjust this to the noise level present in the images.
Specifies the number of iterations to complete when minimizing the error functional for each image pair; more iterations will presumably provide a lower error residual but will take longer.
Adjusts the constant scaling of the smoothness term in the energy functional; a larger number will result in smoother flow fields, a smaller number will allow more turbulent flow fields. For 16 bit images, this number needs to be rather large, like 10e4. For 8 bit images, 100-200 is a reasonable range.
The common output options are available.
Open output when finished
If this box is checked, automatically load the output images when finished. Remember that vector images and visualizations are controlled from the Vectors data tab.

Integrate Flow

Integrate flow dialog

The flow integration dialog.

The optical flow methods described above compute displacement from one frame to the next—this is the estimated image velocity in the time between frames. Integrating a series of flow fields yeilds net image displacement from the first frame of a sequence. Access flow integration through Process—>Integrate Flow. The following parameters control this process:

Step size
Specifies the step size (in frames) of the Runge-Kutta 4th order integration. The integration process saves results at the nearest whole step size, to match the spacing of input flow data. So, with a step size of 0.1 frames, displacement images will be saved every 10 steps.
The common output options are available.
Open output when finished
If this box is checked, automatically load the output images when finished. Remember that vector images and visualizations are controlled from the Vectors data tab.

Version History

The sections below outline the changes made to ImageTracker at each revision.

Version 3.00


Known bugs

Version 2.08

This was a recompilation of version 2.07 using an installer that worked on more Windows machines.

Version 2.07


Known bugs

Version 2.06


Known bugs

Version 2.05


Known bugs

Version 2.04


Version 2.03


Known bugs

Version 2.02


Version 2.01


Known bugs

Version 2.00


Known bugs

Version 1.00


Known bugs