diff options
author | Thomas White <taw@physics.org> | 2011-11-15 12:17:59 +0100 |
---|---|---|
committer | Thomas White <taw@physics.org> | 2012-02-22 15:27:40 +0100 |
commit | 469efb904b59f137ac9e85e5ff23edd0c113de5c (patch) | |
tree | 71fab5f5715ec9f88984450cdabb592cd49dd46d /src/filters.c | |
parent | 38089071300b8e04ed42236dd08d9055094fb3b8 (diff) |
Move a load more stuff into libcrystfel
Diffstat (limited to 'src/filters.c')
-rw-r--r-- | src/filters.c | 130 |
1 files changed, 0 insertions, 130 deletions
diff --git a/src/filters.c b/src/filters.c deleted file mode 100644 index c4e409df..00000000 --- a/src/filters.c +++ /dev/null @@ -1,130 +0,0 @@ -/* - * filters.c - * - * Image filtering - * - * (c) 2006-2010 Thomas White <taw@physics.org> - * - * Part of CrystFEL - crystallography with a FEL - * - */ - - -#ifdef HAVE_CONFIG_H -#include <config.h> -#endif - -#include <stdlib.h> -#include <stdio.h> -#include <math.h> -#include <string.h> -#include <assert.h> -#include <gsl/gsl_statistics_int.h> -#ifdef GSL_FUDGE -#include <gsl/gsl_blas.h> -#endif - -#include "image.h" - - -static int compare_vals(const void *ap, const void *bp) -{ - const signed int a = *(signed int *)ap; - const signed int b = *(signed int *)bp; - - if ( a > b ) return 1; - if ( a < b ) return -1; - return 0; -} - - -static void clean_panel(struct image *image, int sx, int sy) -{ - int x, y; - const int s = sizeof(signed int); - - for ( x=0; x<512; x++ ) { - - signed int vals[128]; - double m; - - for ( y=0; y<128; y++ ) { - vals[y] = image->data[(x+sx)+(y+sy)*image->width]; - } - - qsort(&vals[0], 128, s, compare_vals); - - m = gsl_stats_int_median_from_sorted_data(vals, 1, 128); - - for ( y=0; y<128; y++ ) { - image->data[(x+sx)+(y+sy)*image->width] -= m; - } - - } -} - - -/* Pre-processing to make life easier */ -void filter_cm(struct image *image) -{ - int px, py; - - if ( (image->width != 1024) || (image->height != 1024) ) return; - - for ( px=0; px<2; px++ ) { - for ( py=0; py<8; py++ ) { - - clean_panel(image, 512*px, 128*py); - - } - } - -} - - -void filter_noise(struct image *image, float *old) -{ - int x, y; - - for ( x=0; x<image->width; x++ ) { - for ( y=0; y<image->height; y++ ) { - - int dx, dy; - int val = image->data[x+image->width*y]; - - if ( old != NULL ) old[x+image->width*y] = val; - - /* FIXME: This isn't really the right thing to do - * at the edges. */ - if ( (x==0) || (x==image->width-1) - || (y==0) || (y==image->height-1) ) { - if ( val < 0 ) val = 0; - continue; - } - - for ( dx=-1; dx<=+1; dx++ ) { - for ( dy=-1; dy<=+1; dy++ ) { - - int val2; - - val2 = image->data[(x+dx)+image->width*(y+dy)]; - - if ( val2 < 0 ) val = 0; - - } - } - - image->data[x+image->width*y] = val; - - } - } -} - - -#ifdef GSL_FUDGE -/* Force the linker to bring in CBLAS to make GSL happy */ -void filters_fudge_gslcblas() -{ - STATUS("%p\n", cblas_sgemm); -} -#endif |