diff options
author | Thomas White <taw27@cam.ac.uk> | 2008-11-05 12:26:21 +0000 |
---|---|---|
committer | Thomas White <taw27@cam.ac.uk> | 2008-11-05 12:26:21 +0000 |
commit | 55d6028d1fcf6d92e35cc888c101c4bbfa8b4c2b (patch) | |
tree | 7591311aee693c9630b6152a55671d1c6c5ebc20 | |
parent | b44df6cd088c8cd1888c81d81f60502c9c5b588d (diff) | |
parent | cd6e6ec86756756a5cbe8138c79e7d4c7bd3dc3a (diff) |
Merge branch 'master' into simple-search
-rw-r--r-- | src/image.c | 2 | ||||
-rw-r--r-- | src/itrans-zaefferer.c | 31 |
2 files changed, 29 insertions, 4 deletions
diff --git a/src/image.c b/src/image.c index d8bba0c..800ea72 100644 --- a/src/image.c +++ b/src/image.c @@ -9,6 +9,7 @@ * */ +#define _GNU_SOURCE 1 #include <stdlib.h> #include <assert.h> #include <math.h> @@ -140,6 +141,7 @@ ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y, return &flist->features[closest]; } + *d = +INFINITY; return NULL; } diff --git a/src/itrans-zaefferer.c b/src/itrans-zaefferer.c index 79e2468..69d2566 100644 --- a/src/itrans-zaefferer.c +++ b/src/itrans-zaefferer.c @@ -3,7 +3,7 @@ * * Zaefferer peak search * - * (c) 2007 Thomas White <taw27@cam.ac.uk> + * (c) 2007-2008 Thomas White <taw27@cam.ac.uk> * * dtr - Diffraction Tomography Reconstruction * @@ -65,26 +65,49 @@ ImageFeatureList *itrans_peaksearch_zaefferer(ImageRecord *imagerecord) { mask_y = y; while ( (did_something) && (distance(mask_x, mask_y, x, y)<50) ) { + max = image[mask_x+width*mask_y]; did_something = 0; - for ( sy=biggest(mask_y-PEAK_WINDOW_SIZE/2, 0); sy<smallest(mask_y+PEAK_WINDOW_SIZE/2, height); sy++ ) { - for ( sx=biggest(mask_x-PEAK_WINDOW_SIZE/2, 0); sx<smallest(mask_x+PEAK_WINDOW_SIZE/2, width); sx++ ) { + + for ( sy=biggest(mask_y-PEAK_WINDOW_SIZE/2, 0); + sy<smallest(mask_y+PEAK_WINDOW_SIZE/2, height); + sy++ ) { + + for ( sx=biggest(mask_x-PEAK_WINDOW_SIZE/2, 0); + sx<smallest(mask_x+PEAK_WINDOW_SIZE/2, width); + sx++ ) { + if ( image[sx+width*sy] > max ) { max = image[sx+width*sy]; mask_x = sx; mask_y = sy; did_something = 1; } + } + } + } if ( !did_something ) { + + double d; + int idx; + assert(mask_x<width); assert(mask_y<height); assert(mask_x>=0); assert(mask_y>=0); - image_add_feature(flist, mask_x, mask_y, imagerecord, image[mask_x + width*mask_y]); + + /* Check for a feature at exactly the same coordinates */ + image_feature_closest(flist, mask_x, mask_y, &d, &idx); + + if ( d > 1.0 ) { + image_add_feature(flist, mask_x, mask_y, imagerecord, + image[mask_x + width*mask_y]); + } + } } |