Index: trunk/psLib/src/imageops/psImageCovariance.c
===================================================================
--- trunk/psLib/src/imageops/psImageCovariance.c	(revision 21291)
+++ trunk/psLib/src/imageops/psImageCovariance.c	(revision 21298)
@@ -110,5 +110,5 @@
 }
 
-psKernel *psImageCovarianceAverage(const psArray *array)
+psKernel *psImageCovarianceSum(const psArray *array)
 {
     PS_ASSERT_ARRAY_NON_NULL(array, NULL);
@@ -116,5 +116,5 @@
 
     int xMin = INT_MAX, xMax = INT_MIN, yMin = INT_MAX, yMax = INT_MIN; // Range for covariance
-    int num = 0;                        // Number of good matrices to average
+    int num = 0;                        // Number of good matrices to sum
     for (int i = 0; i < array->n; i++) {
         psKernel *covar = array->data[i]; // Covariance matrix
@@ -129,9 +129,9 @@
     }
     if (num == 0) {
-        psError(PS_ERR_BAD_PARAMETER_SIZE, true, "No covariance matrices supplied for averaging.");
+        psError(PS_ERR_BAD_PARAMETER_SIZE, true, "No covariance matrices supplied for summation");
         return NULL;
     }
 
-    psKernel *average = psKernelAlloc(xMin, xMax, yMin, yMax); // Average covariance
+    psKernel *sum = psKernelAlloc(xMin, xMax, yMin, yMax); // Summed covariance
     for (int i = 0; i < array->n; i++) {
         psKernel *covar = array->data[i]; // Covariance matrix
@@ -141,10 +141,33 @@
         for (int y = yMin; y <= yMax; y++) {
             for (int x = xMin; x <= xMax; x++) {
-                average->kernel[y][x] += covar->kernel[y][x];
+                sum->kernel[y][x] += covar->kernel[y][x];
             }
         }
     }
-    psBinaryOp(average->image, average->image, "/", psScalarAlloc(num, PS_TYPE_F32));
 
-    return average;
+    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;
+}
Index: trunk/psLib/src/imageops/psImageCovariance.h
===================================================================
--- trunk/psLib/src/imageops/psImageCovariance.h	(revision 21291)
+++ trunk/psLib/src/imageops/psImageCovariance.h	(revision 21298)
@@ -5,6 +5,6 @@
  * @author Paul Price, IfA
  *
- * @version $Revision: 1.2 $ $Name: not supported by cvs2svn $
- * @date $Date: 2009-02-04 02:55:27 $
+ * @version $Revision: 1.3 $ $Name: not supported by cvs2svn $
+ * @date $Date: 2009-02-05 00:42:48 $
  * Copyright 2009 Institute for Astronomy, University of Hawaii
  */
@@ -40,5 +40,10 @@
     );
 
-/// Average many covariance pseudo-matrices
+/// Sum multiple covariance pseudo-matrices
+psKernel *psImageCovarianceSum(
+    const psArray *array                ///< Array of covariance pseudo-matrices
+    );
+
+/// Average multiple covariance pseudo-matrices
 psKernel *psImageCovarianceAverage(
     const psArray *array                ///< Array of covariance pseudo-matrices
