home *** CD-ROM | disk | FTP | other *** search
- Sharing Image Colors in X
-
- Author:
- Robert NC Shelley
- February 10, 1989
- Abstract
- Displaying images (natural or synthetic) may require an enormous number of colors. A 24-bit deep
- TrueColor workstation can simultaneously display a large enough palette of colors to faithfully render al-
- most any image. When working with depth-limited PseudoColor displays, however, techniques such as ju-
- dicious color selection or dithering must be employed to reduce the number of unique colors in an image
- to a workable set. This paper addresses a strategy for allocating and sharing colors and grayscale shades
- within the limitations of the PseudoColor and GrayScale visual classes of the X Window System. All ap-
- plications requiring static shared colors or grayscale shades can benefit from this strategy. An abridged
- example of this algorithm is available in the server display module of the version 3 X Image Extension
- sample implementation from Digital Equipment Corporation.
- The Problem
- In the X Window System the palette of colors, displayable at any given instant, is determined by color
- definitions in the installed colormap. Many X servers only support one active colormap at a time.
- The X11 PseudoColor visual class offers a wide gamut of colors to choose from (248). Most hardware
- platforms offer a subset of the full X11 gamut, often 224 colors. However, the palette of colors that can be
- displayed simultaneously may be much more limited. For example, the gamut of over 16 million colors
- may be limited to a palette of 256 simultaneously displayable colors on an 8 plane system, or as few as 16
- colors on a 4 plane system.
- Color hungry applications may attempt to hog the default colormaps color cells as private read/write color
- cells. This strategy tends to starve late comers who find an inadequate number of color cells remaining.
- It is equally unsociable to use a private colormap. The application owning the colormap controls all the
- colors it wants, while the windows of all other applications displayed on the same screen go
- Technicolor. The advantage in using private color cells or a private colormap is that the application has
- full control over the choice of displayable colors and may change colormap entries dynamically.
- A more sociable strategy involves sharing colors from the default colormap. In many cases applications
- sharing the default colormap would be willing to compromise their choice of exact colors for colors which
- are perceived by the human visual system to be close enough to the desired color.
- The X Window System reference manual states, XAllocColor returns the pixel value of the color closest
- to the specified RGB elements supported by the hardware and returns the RGB values actually used.
- This sounds like the desired sociable color sharing strategy. However, the meaning of this statement lies
- in the fact that most servers use only the upper n bits of each of the RGB values (n often equals 8).
- When allocating the closest color supported by the hardware, the server makes no attempt to search for
- the closest color. The RGB values actually used are the values requested, disregarding the lower (16-n)
- bits.
- The Solution
- To encourage the sociable use of color resources among applications we have developed color allocation
- routines which, when given a list of preferred colors, will return colors which are perceptually close
- enough to those requested, and allocate new sharable colors when no acceptable substitute can be found.
- Each application defines what constitutes close enough.
- Since the routines simultaneously manage sharing colors and grayscale shades, applications requiring col-
- ors can coexist with applications exclusively requiring shades of gray.
- Whats an application to do?
- Prior to calling the color allocation routines, a typical application would create the list of preferred colors.
- If the colors are being allocated for display of an image this list may be created by generating a histogram
- of color usage within the image. The color allocation algorithm gives a limited priority to allocating col-
- ors according to their order within the list, therefore the list should be arranged in an order that will pro-
- duce the most pleasing affect for the application (e.g. decreasing frequency of usage) in case the colormap
- becomes full.
- Along with the list of colors, the application supplies parameters which limit the definition of an accept-
- able color match, and specifies a color space to be used during color match calculations.
- The preferred color list is then processed by the color allocation routines which will return the allocated
- colors. The application would then create its final image by re-mapping each image color to the pixel in-
- dex of the color returned.
- Algorithm overview
- The color allocation algorithm gives priority to allocating new sharable colors in a sequence that will pro-
- vide an even distribution of sharable colors throughout the specified color space. This iterative process
- begins by dividing the color space into sub-volumes and determining the existence or need for sharable
- colors within each sub-volume. The sub-volume size is determined dynamically such that the size is re-
- duced on each iteration.
- Secondary priority is given to allocating colors according to their order within the list of requested colors.
- Each iteration of the algorithm processes the preferred color list in order. Sub-volumes of the color space,
- centered around each requested color, are examined to see if any sharable color exists within the sub-
- volume. If none is found, the new sharable color is allocated. This process proceeds until the end of the
- list is reached, at which time a new sub-volume size is calculated.
- The color allocation algorithm ends when: all colors have been allocated, or the sub-volume size has
- reached the limit specified by the application, or a sharable color allocation fails due to the colormap be-
- ing full.
- All remaining colors are assigned the pixel index of their closest match within the specified color space.
- Parameters required
- The parameters to the color allocation routine include: the screen on which the image will be displayed,
- the colormap to allocate colors from, a list (and count) of colors to allocate, the color space in which to
- match colors, and a pair of control parameters.
- Color match space
- The color allocation routines allow the application to choose one of the following color spaces: HLS, Lab,
- L*U*V*, RGB, U*V*W*, and YIQ. During color allocation the color space is used for choosing colors
- that have the greatest distance from any existing color. During color matching the color space is used to
- find the minimum distance to an existing color.
- Control parameters whats close enough
- The cube in figure 1, represents the RGB color space all possible colors that can be defined using the
- primary spectral components of visible light: red, green, and blue. All the pure shades of gray lie along a
- diagonal line running between black and white.
- The human visual system is unable to perceive any difference (in hue, saturation or intensity) between
- closely spaced points within the cube. Thus there is a sphere of points surrounding each color, any of
- which could be an acceptable substitute for the central color. Furthermore, there is a cylinder of points
- surrounding the gray shade line, each of which is close enough to its closest gray shade on the line to sat-
- isfy the human eye.
-
- Figure 1: RGB color cube showing color match spheres and gray shade cylinder
- The RGB color space was chosen here to simplify illustration. The other color spaces are not cubic in
- shape. Neither are the volumes representing acceptable colors and gray shades spherical and cylindrical,
- but rather they are distorted by the shape of the color space.
- Match-limit
- The radius of the color match spheres (parameter match_limit), determines the degree of error to be tol-
- erated when searching for perceptually close colors. The minimum value of match_limit allows only ex-
- act matches (within the limits of the hardware), while the maximum value encompasses the entire color
- space (no new colors would be allocated).
- Figure 1 illustrates a pair of colors to be allocated: a saturated orange (centered within the quarter sphere)
- and a blue-green shade (centered within the full sphere). The color allocation routine will locate the color
- existing within each sphere that has the shortest distance vector to the desired color, or allocate the exact
- color if no color has been allocated within the sphere.
- Gray-limit
- Most people will accept a decreased resolution in intensity rather than tolerate inaccuracies in hue when
- viewing a grayscale image. Therefore a separate parameter (gray_limit) is provided in order to define a
- relatively narrow cylinder of gray shades while tolerating larger intensity errors along the axis of the cyl-
- inder (specified using the match_limit parameter).
- The radius of the gray shade cylinder (parameter gray_limit), determines the degree of error to be toler-
- ated when searching for shades of gray. The minimum value of gray_limit allows only pure shades of
- gray to be shared from the colormap, while the maximum value (which must be specified when allocating
- colors rather than gray shades) includes the entire gray shade line.
- Special effects
- If the colormap contains a grayscale ramp, a color image can be displayed as grayscale by using a low
- value for gray_limit and the maximum value, for match_limit. Likewise, a grayscale image can be dis-
- played with a digital art effect, if the colormap contains only a distribution of colors and both
- match_limit and gray_limit are specified at their maximum values.
- Many happy returns
- The color allocation routine modifies each XColor structure in the supplied colors list to contain the pixel
- value of the allocated color, the actual RGB values assigned, and a symbol in the pad field that indicates
- whether the exact color, or the best match was allocated. Or the pad field may indicate failure in the
- event that the supplied colormap was completely allocated with private read/write color cells.
- Each color allocated must be freed using XFreeColors. Each pixel index must be freed as many times as it
- appears in the colors list.
- A closer look
- The following is a summary of the color allocation algorithm:
- discover the state of each colormap cell: available, sharable, private,
- exclude sharable colors which deviate too far from gray_limit,
- convert each sharable colormap cell into the color space of choice,
- convert each requested color into the color space of choice,
- find the distance to the closest existing match for each color requested,
- allocate new colors for those having no acceptable match,
- share existing colors that are perceptually close enough,
- if the colormap becomes full, assign the remaining colors to their closest match.
- What state is your colormap in?
- Each colormap cell is tested to determine which colors are sharable. However, the algorithm makes al-
- lowance for the volatility of the colormap resource as other clients also have access to the colormap while
- the color allocation routine executes.
- If the supplied colormap does not allow any sharable colors to be allocated, each of the requested colors
- are marked as failing to be allocated.
- How gray it is
- For each sharable color absolute value of the difference between RGB components is computed. If any
- difference exceeds the applications gray_limit parameter the colormap cell is excluded from being a
- color match candidate.
- Finding the best mate
- Initially each requested color is assigned the colormap index of the closest existing color; the distance
- between them is also recorded. The distance between colors is computed as a space diagonal within the
- color space requested:
- distance =
- Where C1, C2, and C3 are the three components of the requested color space. Since only relative dis-
- tances are required in determining the closest match, the square root is not computed (reducing computa-
- tional overhead).
- Private rooms for distant cousins
- A new color is allocated for each color that has a match distance exceeding the match_limit. Color allo-
- cations proceed in groups that will distribute them throughout the color space. Within each group the col-
- ors are allocated by their order within the list of requested colors.
- The mean distance between all pending allocations is calculated. All colors exceeding this mean distance
- form a group of colors to be allocated. For each new color allocated the distance to the remaining colors
- is tested the new color may be a better match than was previously found. While this process eliminates
- many colors from the group under consideration, it ensures an equitable distribution of colors through out
- the color space.
- Allocation of new colors is complete when: all colors have been allocated, or all the remaining colors have
- a close enough match, or the colormap becomes full.
- Were room mates like it or not
- Any remaining colors share the allocation of the closest existing color within the colormap. While colors
- are being allocated other clients may also be allocating and deallocating colors. In case this activity
- causes the allocation of the closest matching color to fail, the next best match will be allocated instead.
-
-
-
-
- 5
-
-
-
-