grdhisteq − Histogram equalization for grd files |
grdhisteq in_grdfile [ −Gout_grdfile ] [ −Cn_cells ] [ −D ] [ −N[norm] ] [ −Q ] [ −V ] |
grdhisteq allows the user to find the data values
which divide a given grdfile into patches of equal area. One
common use of grdhisteq is in a kind of histogram
equalization of an image. In this application, the user
might have a grdfile of flat topography with a mountain in
the middle. Ordinary gray shading of this file (using
grdimage/grdview) with a linear mapping from topography to
graytone will result in most of the image being very dark
gray, with the mountain being almost white. One could use
grdhisteq to write to stdout an ASCII list of those
data values which divide the range of the data into
n_cells segments, each of which has an equal area in
the image. Using awk or makecpt one can take
this output and build a cpt file; using the cptfile with
grdimage will result in an image with all levels of gray
occurring equally. Alternatively, see grd2cpt. |
in_grdfile |
2-D binary grd file to be equalized. |
−C |
Sets how many cells (or divisions) of data range to make. |
||
−D |
Dump level information to standard output. |
||
−G |
Name of output 2-D grd file. Used with −N only. |
||
−N |
Gaussian output. Use with −G to make an output grdfile with standard normal scores. Append norm to force the scores to fall in the <-1,+1> range [Default is standard normal scores]. |
||
−Q |
Use quadratic intensity scaling. [Default is linear]. |
||
−V |
Selects verbose mode, which will send progress reports to stderr [Default runs "silently"]. |
To find the height intervals that divide the file heights.grd into 16 divisions of equal area: grdhisteq heights.grd −C16 −D > levels.d To make the poorly distributed intensities in the file raw_intens.grd suitable for use with grdimage or grdview, run grdhisteq raw_intens.grd −Gsmooth_intens.grd −N −V |
If you use grdhisteq to make a gaussian output for gradient shading in grdimage or grdview, you should be aware of the following: the output will be in the range [-x, x], where x is based on the number of data in the input grdfile (nx * ny) and the cumulative gaussian distribution function F(x). That is, let N = nx * ny. Then x will be adjusted so that F(x) = (N - 1 + 0.5)/N. Since about 68% of the values from a standard normal distribution fall within +/- 1, this will be true of the output grdfile. But if N is very large, it is possible for x to be greater than 4. Therefore, with the grdimage program clipping gradients to the range [-1, 1], you will get correct shading of 68% of your data, while 16% of them will be clipped to -1 and 16% of them clipped to +1. If this makes too much of the image too light or too dark, you should take the output of grdhisteq and rescale it using grdmath and multiplying by something less than 1.0, to shrink the range of the values, thus bringing more than 68% of the image into the range [-1, 1]. Alternatively, supply a normalization factor with −N. |
gmtdefaults(l), GMT(l), grd2cpt(l), grdgradient(l), grdimage(l), grdmath(l), grdview(l), makecpt(l) |