From 6b7eb1a1054847cd3d36f477511b943312d9a46c Mon Sep 17 00:00:00 2001 From: iabdalkader Date: Sun, 8 Jan 2017 18:40:28 +0200 Subject: [PATCH] Add keypoints detector arg. --- src/omv/img/imlib.h | 3 ++- src/omv/img/orb.c | 9 +++++++-- src/omv/py/py_image.c | 5 +++-- src/omv/py/qstrdefsomv.h | 1 + 4 files changed, 13 insertions(+), 5 deletions(-) diff --git a/src/omv/img/imlib.h b/src/omv/img/imlib.h index faa08dff0..17e6fdf5f 100644 --- a/src/omv/img/imlib.h +++ b/src/omv/img/imlib.h @@ -1035,7 +1035,8 @@ void fast_detect(image_t *image, array_t *keypoints, int threshold, rectangle_t void agast_detect(image_t *image, array_t *keypoints, int threshold, rectangle_t *roi); /* ORB descriptor */ -array_t *orb_find_keypoints(image_t *image, bool normalized, int threshold, float scale_factor, int max_keypoints, rectangle_t *roi); +array_t *orb_find_keypoints(image_t *image, bool normalized, int threshold, + float scale_factor, int max_keypoints, corner_detector_t corner_detector, rectangle_t *roi); int orb_match_keypoints(array_t *kpts1, array_t *kpts2, int threshold, rectangle_t *r, point_t *c); int orb_filter_keypoints(array_t *kpts, rectangle_t *r, point_t *c); int orb_save_descriptor(FIL *fp, array_t *kpts); diff --git a/src/omv/img/orb.c b/src/omv/img/orb.c index d0d4d3169..20f99a39e 100644 --- a/src/omv/img/orb.c +++ b/src/omv/img/orb.c @@ -348,7 +348,8 @@ static void image_scale(image_t *src, image_t *dst) } } -array_t *orb_find_keypoints(image_t *img, bool normalized, int threshold, float scale_factor, int max_keypoints, rectangle_t *roi) +array_t *orb_find_keypoints(image_t *img, bool normalized, int threshold, + float scale_factor, int max_keypoints, corner_detector_t corner_detector, rectangle_t *roi) { array_t *kpts; array_alloc(&kpts, xfree); @@ -395,7 +396,11 @@ array_t *orb_find_keypoints(image_t *img, bool normalized, int threshold, float array_alloc(&kpts_octave, NULL); // Find kpts - agast_detect(&img_scaled, kpts_octave, threshold, &roi_scaled); + if (corner_detector == CORNER_FAST) { + fast_detect(&img_scaled, kpts_octave, threshold, &roi_scaled); + } else { + agast_detect(&img_scaled, kpts_octave, threshold, &roi_scaled); + } for (int k=0; kx, roi->y, roi->w, roi->h); - array_t *kpts = orb_find_keypoints(img, false, 20, 1.5f, 200, roi); + array_t *kpts = orb_find_keypoints(img, false, 20, 1.5f, 200, CORNER_AGAST, roi); printf("Save Descriptor: KPTS(%d)\n", array_length(kpts)); if (array_length(kpts)) { diff --git a/src/omv/py/qstrdefsomv.h b/src/omv/py/qstrdefsomv.h index 821b44566..2d919dee5 100644 --- a/src/omv/py/qstrdefsomv.h +++ b/src/omv/py/qstrdefsomv.h @@ -99,6 +99,7 @@ Q(lens_corr) Q(filter_outliers) Q(scale_factor) Q(max_keypoints) +Q(corner_detector) // Lcd Module Q(lcd)