Revision: 56714
          http://sourceforge.net/p/brlcad/code/56714
Author:   mohitdaga
Date:     2013-08-09 15:23:40 +0000 (Fri, 09 Aug 2013)
Log Message:
-----------
Add mode, mean, median skew and variance functions in src/libicv/stat.c

Modified Paths:
--------------
    brlcad/trunk/include/icv.h
    brlcad/trunk/src/libicv/stat.c

Modified: brlcad/trunk/include/icv.h
===================================================================
--- brlcad/trunk/include/icv.h  2013-08-09 14:34:43 UTC (rev 56713)
+++ brlcad/trunk/include/icv.h  2013-08-09 15:23:40 UTC (rev 56714)
@@ -573,6 +573,15 @@
  */
 ICV_EXPORT double *icv_max(icv_image_t* img);
 
+ICV_EXPORT int *icv_mode(icv_image_t* img, size_t** bins, int n_bins);
+
+ICV_EXPORT int *icv_median(icv_image_t* img, size_t** bins, int n_bins);
+
+ICV_EXPORT double *icv_skew(icv_image_t* img, size_t** bins, int n_bins);
+
+ICV_EXPORT double *icv_var(icv_image_t* img, size_t** bins, int n_bins);
+
+
 /** @file decimate.c
  *
  * This file contains routines to scale down an image to a lower

Modified: brlcad/trunk/src/libicv/stat.c
===================================================================
--- brlcad/trunk/src/libicv/stat.c      2013-08-09 14:34:43 UTC (rev 56713)
+++ brlcad/trunk/src/libicv/stat.c      2013-08-09 15:23:40 UTC (rev 56714)
@@ -147,6 +147,102 @@
     return min;
 }
 
+double *icv_var(icv_image_t* img, size_t** bins, int n_bins)
+{
+    int i,c;
+    double *var;
+    double *mean;
+    size_t size;
+    double d;
+    var = (double *) bu_malloc(sizeof(double)*img->channels, "variance 
values");
+
+    size = (size_t) img->height*img->width;
+
+    mean = icv_mean(img);
+    for (i=0; i < n_bins; i++) {
+       for (c=0 ; c<img->channels; c++) {
+           d = (double)i - n_bins*mean[c];
+           var[c] += bins[c][i] * d * d;
+       }
+    }
+
+    for (c=0 ; c<img->channels; c++) {
+       var[c] /= size;
+    }
+
+    return var;
+}
+
+double *icv_skew(icv_image_t* img, size_t** bins, int n_bins)
+{
+    int i,c;
+    double *skew;
+    double *mean;
+    size_t size;
+    double d;
+
+    skew = (double *)bu_malloc(sizeof(double)*img->channels, "skewness 
values");
+
+    size = (size_t) img->height*img->width;
+
+    mean = icv_mean(img);
+    for (i=0; i < n_bins; i++) {
+       for (c=0 ; c < img->channels; c++) {
+           d = (double)i - n_bins*mean[c];
+           skew[c] += bins[c][i] * d * d *d;
+       }
+    }
+
+    for (c=0 ; c < img->channels; c++) {
+       skew[c] /= size;
+    }
+
+    return skew;
+}
+
+int *icv_median(icv_image_t* img, size_t** bins, int n_bins)
+{
+    int i,c;
+    int *median;
+    double *sum;
+    double *partial_sum;
+
+    median = (int *)bu_malloc(sizeof(int)*img->channels, "median values");
+    partial_sum = (double *)bu_malloc(sizeof(int)*img->channels, "partial sum 
values");
+
+    sum = icv_sum(img);
+
+    for (c=0; c<img->channels; c++) {
+       partial_sum[c] = 0;
+       for (i=0; i < n_bins; i++) {
+           if(partial_sum[c] < sum[c]/2) {
+               partial_sum[c] += i*bins[c][i];
+               median[c] = i;
+           } else break;
+       }
+    }
+
+    bu_free(partial_sum, "icv_median : partial sum values\n");
+
+    return median;
+}
+
+int *icv_mode(icv_image_t* img, size_t** bins, int n_bins)
+{
+    int i,c;
+    int *mode;
+
+    mode = (int *) bu_malloc(sizeof(int)*img->channels, "mode values");
+
+    for (c=0; c < img->channels; c++) {
+       mode[c] = 0;
+       for (i=0; i < n_bins; i++)
+           if(bins[c][mode[c]] < bins[c][i])
+               mode[c] = i;
+    }
+    return mode;
+}
+
 /*
  * Local Variables:
  * tab-width: 8

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits

Reply via email to