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