Index: /trunk/psLib/src/imageops/psImageCovariance.c
===================================================================
--- /trunk/psLib/src/imageops/psImageCovariance.c	(revision 27696)
+++ /trunk/psLib/src/imageops/psImageCovariance.c	(revision 27697)
@@ -376,72 +376,30 @@
 }
 
-psKernel *psImageCovarianceSum(const psArray *array)
+float psImageCovarianceSum(const psKernel *covar)
+{
+    PS_ASSERT_KERNEL_NON_NULL(covar, NAN);
+
+    int xMin = covar->xMin, xMax = covar->xMax, yMin = covar->yMin, yMax = covar->yMax; // Range for covariance
+    double sum = 0.0;                                                                   // Sum of covariance
+    for (int y = yMin; y <= yMax; y++) {
+        for (int x = xMin; x <= xMax; x++) {
+            sum += covar->kernel[y][x];
+        }
+    }
+
+    return sum;
+}
+
+
+psKernel *psImageCovarianceAverage(const psArray *array)
 {
     PS_ASSERT_ARRAY_NON_NULL(array, NULL);
     PS_ASSERT_ARRAY_NON_EMPTY(array, NULL);
 
-    int xMin = INT_MAX, xMax = INT_MIN, yMin = INT_MAX, yMax = INT_MIN; // Range for covariance
-    int num = 0;                        // Number of good matrices to sum
-    for (int i = 0; i < array->n; i++) {
-        psKernel *covar = array->data[i]; // Covariance matrix
-        if (!covar) {
-            continue;
-        }
-        xMin = PS_MIN(xMin, covar->xMin);
-        xMax = PS_MAX(xMax, covar->xMax);
-        yMin = PS_MIN(yMin, covar->yMin);
-        yMax = PS_MAX(yMax, covar->yMax);
-        num++;
-    }
-    if (num == 0) {
-        psError(PS_ERR_BAD_PARAMETER_SIZE, true, "No covariance matrices supplied for summation");
-        return NULL;
-    }
-
-    psKernel *sum = psKernelAlloc(xMin, xMax, yMin, yMax); // Summed covariance
-    for (int i = 0; i < array->n; i++) {
-        psKernel *covar = array->data[i]; // Covariance matrix
-        if (!covar) {
-            continue;
-        }
-        for (int y = covar->yMin; y <= covar->yMax; y++) {
-            for (int x = covar->xMin; x <= covar->xMax; x++) {
-                if (!isfinite(covar->kernel[y][x])) {
-                    psError(PS_ERR_BAD_PARAMETER_VALUE, true,
-                            "Non-finite covariance matrix element at %d,%d for input %d",
-                            x, y, i);
-                    psFree(sum);
-                    return NULL;
-                }
-                sum->kernel[y][x] += covar->kernel[y][x];
-            }
-        }
-    }
-
-    return sum;
-}
-
-
-psKernel *psImageCovarianceAverage(const psArray *array)
-{
-    PS_ASSERT_ARRAY_NON_NULL(array, NULL);
-    PS_ASSERT_ARRAY_NON_EMPTY(array, NULL);
-
-    int num = 0;                        // Number of good matrices to average
-    for (int i = 0; i < array->n; i++) {
-        psKernel *covar = array->data[i]; // Covariance matrix
-        if (covar) {
-            num++;
-        }
-    }
-    if (num == 0) {
-        psError(PS_ERR_BAD_PARAMETER_SIZE, true, "No covariance matrices supplied for averaging.");
-        return NULL;
-    }
-
-    psKernel *sum = psImageCovarianceSum(array); // Sum of covariances
-    psBinaryOp(sum->image, sum->image, "/", psScalarAlloc(num, PS_TYPE_F32));
-
-    return sum;
+    psVector *weights = psVectorAlloc(array->n, PS_TYPE_F32); // Weights to apply
+    psVectorInit(weights, 1.0);
+    psKernel *out = psImageCovarianceAverageWeighted(array, weights);
+    psFree(weights);
+    return out;
 }
 
Index: /trunk/psLib/src/imageops/psImageCovariance.h
===================================================================
--- /trunk/psLib/src/imageops/psImageCovariance.h	(revision 27696)
+++ /trunk/psLib/src/imageops/psImageCovariance.h	(revision 27697)
@@ -59,7 +59,7 @@
 float psImageCovarianceFactorForAperture(const psKernel *covar, float radius);
 
-/// Sum multiple covariance pseudo-matrices
-psKernel *psImageCovarianceSum(
-    const psArray *array                ///< Array of covariance pseudo-matrices
+/// Return the sum of the covariance pseudo-matrix
+float psImageCovarianceSum(
+    const psKernel *covariance          ///< Covariance pseudo-matrix
     );
 
