1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc.
include <imhdr.h>
# PH_IMMINMAX -- Compute the minimum and maximum pixel values of an image.
# Works for images of any dimensionality, size, or datatype, although
# the min and max values can currently only be stored in the image header
# as real values.
procedure ph_imminmax (im, min_value, max_value)
pointer im # image descriptor
real min_value # minimum pixel value in image (out)
real max_value # maximum pixel value in image (out)
pointer buf
bool first_line
long v[IM_MAXDIM]
short minval_s, maxval_s
long minval_l, maxval_l
real minval_r, maxval_r
int imgnls(), imgnll(), imgnlr()
begin
call amovkl (long(1), v, IM_MAXDIM) # start vector
first_line = true
min_value = INDEF
max_value = INDEF
switch (IM_PIXTYPE(im)) {
case TY_SHORT:
while (imgnls (im, buf, v) != EOF) {
call alims (Mems[buf], IM_LEN(im,1), minval_s, maxval_s)
if (first_line) {
min_value = minval_s
max_value = maxval_s
first_line = false
} else {
if (minval_s < min_value)
min_value = minval_s
if (maxval_s > max_value)
max_value = maxval_s
}
}
case TY_USHORT, TY_INT, TY_LONG:
while (imgnll (im, buf, v) != EOF) {
call aliml (Meml[buf], IM_LEN(im,1), minval_l, maxval_l)
if (first_line) {
min_value = minval_l
max_value = maxval_l
first_line = false
} else {
if (minval_l < min_value)
min_value = minval_l
if (maxval_l > max_value)
max_value = maxval_l
}
}
default:
while (imgnlr (im, buf, v) != EOF) {
call alimr (Memr[buf], IM_LEN(im,1), minval_r, maxval_r)
if (first_line) {
min_value = minval_r
max_value = maxval_r
first_line = false
} else {
if (minval_r < min_value)
min_value = minval_r
if (maxval_r > max_value)
max_value = maxval_r
}
}
}
end
|