Plugin: JS9Scale

### Scale Controls

The JS9/DS9 scaling algorithms convert image pixel values to RGB values, as described in the DS9 documentation "How It Works". Scaling utilizes low and high clipping values when mapping the data to RGB. These limits are initially taken to be the high and low data values, which obviously can be wasteful of the color distribution if a few low or high values are far away from the bulk of the data values.

The Scale Controls plugin therefore provides a number of ways to set the low and high clipping limits:

- use the Limits menu to choose data min/max, IRAF zscale z1/z2 or IRAF zscale z1/max
- select a portion of the Pixel Distribution plot
- change the Low and/or High limits directly using the text boxes

The Pixel Distribution plots a histogram of the distribution of pixel values (binned into 512 bins). The current low and high clipping values are shown as red and green carets, respectively, at the bottom of the plot. Moving the mouse over the plot will show the pixel value, i.e. the x coordinate.

You can select a region of the distribution by pressing the mouse and moving it left or right. When the mouse is released, the selected low and high pixel values will be used as the new clipping values. (Selection does not work for mouse-less iPads, but you still can view the distribution values and input your chosen limits into the Low and/or High text boxes.)

The IRAF zscale algorithm is described on the IRAF DISPLAY task help page, which is reproduced below. Note that zscale parameters can be changed using the the JS9 Preferences plugin.

The zscale algorithm is designed to display the image values near the median image value without the time consuming process of computing a full image histogram. This is particularly useful for astronomical images which generally have a very peaked histogram corresponding to the background sky in direct imaging or the continuum in a two dimensional spectrum.

The sample of pixels, specified by values greater than zero in the sample mask zmask or by an image section, is selected up to a maximum of nsample pixels. If a bad pixel mask is specified by the bpmask parameter then any pixels with mask values which are greater than zero are not counted in the sample. Only the first pixels up to the limit are selected where the order is by line beginning from the first line. If no mask is specified then a grid of pixels with even spacing along lines and columns that make up a number less than or equal to the maximum sample size is used.

If a contrast of zero is specified (or the zrange flag is used and the image does not have a valid minimum/maximum value) then the minimum and maximum of the sample is used for the intensity mapping range.

If the contrast is not zero the sample pixels are ranked in brightness to form the function I(i) where i is the rank of the pixel and I is its value. Generally the midpoint of this function (the median) is very near the peak of the image histogram and there is a well defined slope about the midpoint which is related to the width of the histogram. At the ends of the I(i) function there are a few very bright and dark pixels due to objects and defects in the field. To determine the slope a linear function is fit with iterative rejection;

        I(i) = intercept + slope * (i - midpoint)

If more than half of the points are rejected then there is no well defined slope and the full range of the sample defines z1 and z2. Otherwise the endpoints of the linear function are used (provided they are within the original range of the sample):

        z1 = I(midpoint) + (slope / contrast) * (1 - midpoint)
        z2 = I(midpoint) + (slope / contrast) * (npoints - midpoint)

As can be seen, the parameter contrast may be used to adjust the contrast produced by this algorithm.