Index: trunk/psLib/src/imageops/psImageBackground.c
===================================================================
--- trunk/psLib/src/imageops/psImageBackground.c	(revision 24432)
+++ trunk/psLib/src/imageops/psImageBackground.c	(revision 24481)
@@ -52,24 +52,41 @@
 
     // Minimum and maximum values
-    float min = values->data.F32[0];
-    float max = values->data.F32[0];
+    float min = +PS_MAX_F32;
+    float max = -PS_MAX_F32;
 
     // select a subset of the image pixels to measure the stats
     long n = 0;                         // Number of actual pixels in subset
-    for (long i = 0; i < Nsubset; i++) {
-        double frnd = psRandomUniform(rng);
-        int pixel = Npixels * frnd;
-        int ix = pixel % nx;
-        int iy = pixel / nx;
+    if (Nsubset >= Npixels) {
+	// if we have an image smaller than Nsubset, just loop over the image pixels
+	for (int iy = 0; iy < ny; iy++) {
+	    for (int ix = 0; ix < nx; ix++) {
+		if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
+		    continue;
+		}
 
-        if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
-            continue;
-        }
+		float value = image->data.F32[iy][ix];
+		min = PS_MIN(value, min);
+		max = PS_MAX(value, max);
+		values->data.F32[n] = value;
+		n++;
+	    }
+	}
+    } else {
+	for (long i = 0; i < Nsubset; i++) {
+	    double frnd = psRandomUniform(rng);
+	    int pixel = Npixels * frnd;
+	    int ix = pixel % nx;
+	    int iy = pixel / nx;
 
-        float value = image->data.F32[iy][ix];
-        min = PS_MIN(value, min);
-        max = PS_MIN(value, max);
-        values->data.F32[n] = value;
-        n++;
+	    if (!isfinite(image->data.F32[iy][ix]) || (mask && mask->data.PS_TYPE_IMAGE_MASK_DATA[iy][ix] & maskValue)) {
+		continue;
+	    }
+
+	    float value = image->data.F32[iy][ix];
+	    min = PS_MIN(value, min);
+	    max = PS_MAX(value, max);
+	    values->data.F32[n] = value;
+	    n++;
+	}
     }
     if (n < 0.01*Nsubset) {
