aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas White <taw27@cam.ac.uk>2008-11-05 12:26:21 +0000
committerThomas White <taw27@cam.ac.uk>2008-11-05 12:26:21 +0000
commit55d6028d1fcf6d92e35cc888c101c4bbfa8b4c2b (patch)
tree7591311aee693c9630b6152a55671d1c6c5ebc20
parentb44df6cd088c8cd1888c81d81f60502c9c5b588d (diff)
parentcd6e6ec86756756a5cbe8138c79e7d4c7bd3dc3a (diff)
Merge branch 'master' into simple-search
-rw-r--r--src/image.c2
-rw-r--r--src/itrans-zaefferer.c31
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]);
+ }
+
}
}