diff --git a/src/omv/img/freak.c b/src/omv/img/freak.c index a53aedfb5..47ac573f7 100644 --- a/src/omv/img/freak.c +++ b/src/omv/img/freak.c @@ -198,7 +198,7 @@ const static uint8_t DESCRIPTION_PAIRS[512][2] = { // simply take average on a square patch, not even gaussian approx -static uint8_t mean_intensity(image_t *image, i_image_t *i_image, int kp_x, int kp_y, uint32_t rot, uint32_t point) +static int mean_intensity(image_t *image, i_image_t *i_image, int kp_x, int kp_y, uint32_t rot, uint32_t point) { int pidx = (point/6)%8; float alpha, beta, theta = 0; @@ -266,7 +266,7 @@ array_t *freak_find_keypoints(image_t *image, bool normalized, int threshold, re fast_detect(image, keypoints, threshold, roi); if (array_length(keypoints)) { - // compute integral image + // Compute integral image imlib_integral_image_alloc(&i_image, image->w, image->h); imlib_integral_image(image, &i_image); @@ -276,7 +276,6 @@ array_t *freak_find_keypoints(image_t *image, bool normalized, int threshold, re // Estimate orientation (gradient) if (normalized) { thetaIdx = 0; // Assign 0° to all kpts - kpt->angle = 0.0f; } else { // Get the points intensity value in the un-rotated pattern for (int i=kNB_POINTS; i--;) { @@ -294,12 +293,14 @@ array_t *freak_find_keypoints(image_t *image, bool normalized, int threshold, re } // Estimate orientation - kpt->angle = fast_atan2f((float)direction1, (float)direction0) * (180.0f/PI); - thetaIdx = (int)(kNB_ORIENTATION * kpt->angle * (1.0f/360.0f) + 0.5f); + float angle = fast_atan2f((float)direction1, (float)direction0) * (180.0f/PI); + thetaIdx = (int)(kNB_ORIENTATION * angle * (1.0f/360.0f) + 0.5f); if (thetaIdx < 0) { thetaIdx += kNB_ORIENTATION; - } else if (thetaIdx >= kNB_ORIENTATION) { + } + + if (thetaIdx >= kNB_ORIENTATION) { thetaIdx -= kNB_ORIENTATION; } } @@ -408,12 +409,6 @@ int freak_save_descriptor(array_t *kpts, const char *path) goto error; } - // Write angle - res = f_write(&fp, &kp->angle, sizeof(kp->angle), &bytes); - if (res != FR_OK || bytes != sizeof(kp->angle)) { - goto error; - } - // Write descriptor res = f_write(&fp, kp->desc, KPT_DESC_SIZE, &bytes); if (res != FR_OK || bytes != KPT_DESC_SIZE) { @@ -461,12 +456,6 @@ int freak_load_descriptor(array_t *kpts, const char *path) goto error; } - // Read angle - res = f_read(&fp, &kp->angle, sizeof(kp->angle), &bytes); - if (res != FR_OK || bytes != sizeof(kp->angle)) { - goto error; - } - // Read descriptor res = f_read(&fp, kp->desc, KPT_DESC_SIZE, &bytes); if (res != FR_OK || bytes != KPT_DESC_SIZE) { diff --git a/src/omv/img/imlib.h b/src/omv/img/imlib.h index c2c1ee220..af12a78d5 100644 --- a/src/omv/img/imlib.h +++ b/src/omv/img/imlib.h @@ -248,7 +248,6 @@ typedef struct cluster { typedef struct { uint16_t x; uint16_t y; - float angle; uint8_t desc[64]; } kp_t; diff --git a/src/omv/py/py_image.c b/src/omv/py/py_image.c index 65791c277..ccef819c7 100644 --- a/src/omv/py/py_image.c +++ b/src/omv/py/py_image.c @@ -354,9 +354,6 @@ static mp_obj_t py_image_draw_keypoints(uint n_args, const mp_obj_t *args, mp_ma for (int i=0; ikpts); i++) { kp_t *kp = array_at(kpts_obj->kpts, i); - float co = arm_cos_f32(kp->angle); - float si = arm_sin_f32(kp->angle); - imlib_draw_line(arg_img, kp->x, kp->y, kp->x+(co*arg_s), kp->y+(si*arg_s), arg_c); imlib_draw_circle(arg_img, kp->x, kp->y, (arg_s-2)/2, arg_c); } }