aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/image.c60
-rw-r--r--src/image.h35
2 files changed, 30 insertions, 65 deletions
diff --git a/src/image.c b/src/image.c
index b3825b38..8780c0dd 100644
--- a/src/image.c
+++ b/src/image.c
@@ -19,6 +19,20 @@
#include "utils.h"
+struct _imagelist
+{
+ int n_images;
+ struct image *images;
+};
+
+
+struct _imagefeaturelist
+{
+ struct imagefeature *features;
+ int n_features;
+};
+
+
int image_add(ImageList *list, struct image *image)
{
if ( list->images ) {
@@ -60,10 +74,11 @@ void image_add_feature_reflection(ImageFeatureList *flist, double x, double y,
{
if ( flist->features ) {
flist->features = realloc(flist->features,
- (flist->n_features+1)*sizeof(ImageFeature));
+ (flist->n_features+1)
+ *sizeof(struct imagefeature));
} else {
assert(flist->n_features == 0);
- flist->features = malloc(sizeof(ImageFeature));
+ flist->features = malloc(sizeof(struct imagefeature));
}
flist->features[flist->n_features].x = x;
@@ -107,8 +122,9 @@ void image_feature_list_free(ImageFeatureList *flist)
}
-ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y,
- double *d, int *idx)
+struct imagefeature *image_feature_closest(ImageFeatureList *flist,
+ double x, double y,
+ double *d, int *idx)
{
int i;
double dmin = +HUGE_VAL;
@@ -136,39 +152,3 @@ ImageFeature *image_feature_closest(ImageFeatureList *flist, double x, double y,
*d = +INFINITY;
return NULL;
}
-
-
-ImageFeature *image_feature_second_closest(ImageFeatureList *flist,
- double x, double y, double *d,
- int *idx)
-{
- int i;
- double dmin = +HUGE_VAL;
- int closest = 0;
- double dfirst;
- int idxfirst;
-
- image_feature_closest(flist, x, y, &dfirst, &idxfirst);
-
- for ( i=0; i<flist->n_features; i++ ) {
-
- double d;
-
- d = distance(flist->features[i].x, flist->features[i].y, x, y);
-
- if ( (d < dmin) && (i != idxfirst) ) {
- dmin = d;
- closest = i;
- }
-
- }
-
- if ( dmin < +HUGE_VAL ) {
- *d = dmin;
- *idx = closest;
- return &flist->features[closest];
- }
-
- return NULL;
-
-}
diff --git a/src/image.h b/src/image.h
index f53f7d92..69b8cc79 100644
--- a/src/image.h
+++ b/src/image.h
@@ -20,13 +20,15 @@
#include <stdint.h>
+/* How is the scaling of the image described? */
typedef enum {
FORMULATION_CLEN,
FORMULATION_PIXELSIZE
} FormulationMode;
-typedef struct imagefeature_struct {
+/* Structure describing a feature in an image */
+struct imagefeature {
struct image *parent;
double x;
@@ -39,20 +41,12 @@ typedef struct imagefeature_struct {
/* Distance between this feature and its partner, if any. */
double partner_d;
- /* The reflection this was projected from, if any */
- struct reflection_struct *reflection;
-
-} ImageFeature;
-
-
-typedef struct {
-
- ImageFeature *features;
- int n_features;
-
-} ImageFeatureList;
+};
+/* An opaque type representing a list of image features */
+typedef struct _imagefeaturelist ImageFeatureList;
+/* Structure describing an image */
struct image {
uint16_t *data;
@@ -84,13 +78,8 @@ struct image {
};
-
-typedef struct imagelist_struct {
-
- int n_images;
- struct image *images;
-
-} ImageList;
+/* An opaque type representing a list of images */
+typedef struct _imagelist ImageList;
extern ImageList *image_list_new(void);
@@ -109,11 +98,7 @@ extern void image_add_feature_reflection(ImageFeatureList *flist,
struct image *parent,
double intensity);
-extern ImageFeature *image_feature_closest(ImageFeatureList *flist,
- double x, double y, double *d,
- int *idx);
-
-extern ImageFeature *image_feature_second_closest(ImageFeatureList *flist,
+extern struct imagefeature *image_feature_closest(ImageFeatureList *flist,
double x, double y, double *d,
int *idx);