Add API to access minutiae

This commit is contained in:
Daniel Drake 2007-11-19 00:27:27 +00:00
parent fa742a2142
commit 887e0e6acf
3 changed files with 65 additions and 16 deletions

View file

@ -189,21 +189,6 @@ gboolean fpi_print_data_compatible(uint16_t driver_id1, uint32_t devtype1,
enum fp_print_data_type type1, uint16_t driver_id2, uint32_t devtype2, enum fp_print_data_type type1, uint16_t driver_id2, uint32_t devtype2,
enum fp_print_data_type type2); enum fp_print_data_type type2);
struct fp_minutia {
int x;
int y;
int ex;
int ey;
int direction;
double reliability;
int type;
int appearing;
int feature_id;
int *nbrs;
int *ridge_counts;
int num_nbrs;
};
struct fp_minutiae { struct fp_minutiae {
int alloc; int alloc;
int num; int num;

View file

@ -207,12 +207,30 @@ uint16_t fp_print_data_get_driver_id(struct fp_print_data *data);
uint32_t fp_print_data_get_devtype(struct fp_print_data *data); uint32_t fp_print_data_get_devtype(struct fp_print_data *data);
/* Image handling */ /* Image handling */
/** \ingroup img */
struct fp_minutia {
int x;
int y;
int ex;
int ey;
int direction;
double reliability;
int type;
int appearing;
int feature_id;
int *nbrs;
int *ridge_counts;
int num_nbrs;
};
int fp_img_get_height(struct fp_img *img); int fp_img_get_height(struct fp_img *img);
int fp_img_get_width(struct fp_img *img); int fp_img_get_width(struct fp_img *img);
unsigned char *fp_img_get_data(struct fp_img *img); unsigned char *fp_img_get_data(struct fp_img *img);
int fp_img_save_to_file(struct fp_img *img, char *path); int fp_img_save_to_file(struct fp_img *img, char *path);
void fp_img_standardize(struct fp_img *img); void fp_img_standardize(struct fp_img *img);
struct fp_img *fp_img_binarize(struct fp_img *img); struct fp_img *fp_img_binarize(struct fp_img *img);
struct fp_minutia **fp_img_get_minutiae(struct fp_img *img, int *nr_minutiae);
void fp_img_free(struct fp_img *img); void fp_img_free(struct fp_img *img);
/* Library */ /* Library */

View file

@ -398,8 +398,10 @@ API_EXPORTED struct fp_img *fp_img_binarize(struct fp_img *img)
int r = fpi_img_detect_minutiae(img); int r = fpi_img_detect_minutiae(img);
if (r < 0) if (r < 0)
return NULL; return NULL;
if (!img->binarized) if (!img->binarized) {
fp_err("no minutiae after successful detection?"); fp_err("no minutiae after successful detection?");
return NULL;
}
} }
ret = fpi_img_new(imgsize); ret = fpi_img_new(imgsize);
@ -410,3 +412,47 @@ API_EXPORTED struct fp_img *fp_img_binarize(struct fp_img *img)
return ret; return ret;
} }
/** \ingroup img
* Get a list of minutiae detected in an image. A minutia point is a feature
* detected on a fingerprint, typically where ridges end or split.
* libfprint's image processing code relies upon comparing sets of minutiae,
* so accurate placement of minutia points is critical for good imaging
* performance.
*
* The image must have been \ref img_std "standardized" otherwise this function
* will fail.
*
* You cannot pass a binarized image to this function. Instead, pass the
* original image.
*
* Returns a list of pointers to minutiae, where the list is of length
* indicated in the nr_minutiae output parameter. The returned list is only
* valid while the parent image has not been freed, and the minutiae data
* must not be modified or freed.
*
* \param img a standardized image
* \param nr_minutiae an output location to store minutiae list length
* \returns a list of minutiae points. Must not be modified or freed.
*/
API_EXPORTED struct fp_minutia **fp_img_get_minutiae(struct fp_img *img,
int *nr_minutiae)
{
if (img->flags & FP_IMG_BINARIZED_FORM) {
fp_err("image is binarized");
return NULL;
}
if (!img->minutiae) {
int r = fpi_img_detect_minutiae(img);
if (r < 0)
return NULL;
if (!img->minutiae) {
fp_err("no minutiae after successful detection?");
return NULL;
}
}
*nr_minutiae = img->minutiae->num;
return img->minutiae->list;
}