Paparazzi UAS
v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
|
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <string.h>
#include "linear_flow_fit.h"
#include "math/pprz_algebra_float.h"
#include "math/pprz_matrix_decomp_float.h"
#include "math/pprz_simple_matrix.h"
#include "math/RANSAC.h"
#include "std.h"
Go to the source code of this file.
Macros | |
#define | MAX_COUNT_PT 50 |
#define | MIN_SAMPLES_FIT 3 |
#define | N_PAR_TR_FIT 6 |
Functions | |
bool | analyze_linear_flow_field (struct flow_t *vectors, int count, float error_threshold, int n_iterations, int n_samples, int im_width, int im_height, struct linear_flow_fit_info *info) |
Analyze a linear flow field, retrieving information such as divergence, surface roughness, focus of expansion, etc. More... | |
void | fit_linear_flow_field (struct flow_t *vectors, int count, float error_threshold, int n_iterations, int n_samples, float *parameters_u, float *parameters_v, float *fit_error, float *min_error_u, float *min_error_v, int *n_inliers_u, int *n_inliers_v) |
Analyze a linear flow field, retrieving information such as divergence, surface roughness, focus of expansion, etc. More... | |
void | extract_information_from_parameters (float *parameters_u, float *parameters_v, int im_width, int im_height, struct linear_flow_fit_info *info) |
Extract information from the parameters that were fit to the optical flow field. More... | |
bool | analyze_flow_field (struct flow_t *vectors, int count, float error_threshold, int n_iterations, int n_samples, int im_width, int im_height, float focal_length, struct linear_flow_fit_info *info) |
Analyze a flow field, retrieving information on relative velocities and rotations, etc. More... | |
#define MAX_COUNT_PT 50 |
Definition at line 49 of file linear_flow_fit.c.
#define MIN_SAMPLES_FIT 3 |
Definition at line 51 of file linear_flow_fit.c.
#define N_PAR_TR_FIT 6 |
Definition at line 53 of file linear_flow_fit.c.
bool analyze_flow_field | ( | struct flow_t * | vectors, |
int | count, | ||
float | error_threshold, | ||
int | n_iterations, | ||
int | n_samples, | ||
int | im_width, | ||
int | im_height, | ||
float | focal_length, | ||
struct linear_flow_fit_info * | info | ||
) |
Analyze a flow field, retrieving information on relative velocities and rotations, etc.
[out] | outcome | If 0, there were too few vectors for a fit. If 1, the fit was successful. |
[in] | vectors | The optical flow vectors |
[in] | count | The number of optical flow vectors |
[in] | error_threshold | Error used to determine inliers / outliers. |
[in] | n_iterations | Number of RANSAC iterations. |
[in] | n_samples | Number of samples used for a single fit (min. 5). |
[in] | im_width | Image width in pixels |
[in] | im_height | Image height in pixels |
[in] | focal_length | Focal length in pixels |
[out] | info | Contains all info extracted from the linear flow fit. |
Definition at line 399 of file linear_flow_fit.c.
References N_PAR_TR_FIT.
Referenced by calc_fast9_lukas_kanade().
bool analyze_linear_flow_field | ( | struct flow_t * | vectors, |
int | count, | ||
float | error_threshold, | ||
int | n_iterations, | ||
int | n_samples, | ||
int | im_width, | ||
int | im_height, | ||
struct linear_flow_fit_info * | info | ||
) |
Analyze a linear flow field, retrieving information such as divergence, surface roughness, focus of expansion, etc.
[out] | outcome | If 0, there were too few vectors for a fit. If 1, the fit was successful. |
[in] | vectors | The optical flow vectors |
[in] | count | The number of optical flow vectors |
[in] | error_threshold | Error used to determine inliers / outliers. |
[in] | n_iterations | Number of RANSAC iterations. |
[in] | n_samples | Number of samples used for a single fit (min. 3). |
[in] | im_width | Image width in pixels |
[in] | im_height | Image height in pixels |
[out] | info | Contains all info extracted from the linear flow fit. |
Definition at line 67 of file linear_flow_fit.c.
References linear_flow_fit_info::divergence, E, extract_information_from_parameters(), linear_flow_fit_info::fit_error, fit_linear_flow_field(), MIN_SAMPLES_FIT, linear_flow_fit_info::n_inliers_u, linear_flow_fit_info::n_inliers_v, n_samples, linear_flow_fit_info::relative_velocity_z, linear_flow_fit_info::surface_roughness, and linear_flow_fit_info::time_to_contact.
Referenced by calc_fast9_lukas_kanade().
void extract_information_from_parameters | ( | float * | parameters_u, |
float * | parameters_v, | ||
int | im_width, | ||
int | im_height, | ||
struct linear_flow_fit_info * | info | ||
) |
Extract information from the parameters that were fit to the optical flow field.
[in] | parameters_u* | Parameters of the horizontal flow field |
[in] | parameters_v* | Parameters of the vertical flow field |
[in] | im_width | Width of image in pixels |
[in] | im_height | Height of image in pixels |
[out] | info | Contains all info extracted from the linear flow fit |
Definition at line 321 of file linear_flow_fit.c.
References E, linear_flow_fit_info::focus_of_expansion_x, linear_flow_fit_info::focus_of_expansion_y, linear_flow_fit_info::relative_velocity_x, linear_flow_fit_info::relative_velocity_y, linear_flow_fit_info::relative_velocity_z, linear_flow_fit_info::slope_x, and linear_flow_fit_info::slope_y.
Referenced by analyze_linear_flow_field().
void fit_linear_flow_field | ( | struct flow_t * | vectors, |
int | count, | ||
float | error_threshold, | ||
int | n_iterations, | ||
int | n_samples, | ||
float * | parameters_u, | ||
float * | parameters_v, | ||
float * | fit_error, | ||
float * | min_error_u, | ||
float * | min_error_v, | ||
int * | n_inliers_u, | ||
int * | n_inliers_v | ||
) |
Analyze a linear flow field, retrieving information such as divergence, surface roughness, focus of expansion, etc.
[in] | vectors | The optical flow vectors |
[in] | count | The number of optical flow vectors |
[in] | error_threshold | Error used to determine inliers / outliers. |
[in] | n_iterations | Number of RANSAC iterations. |
[in] | n_samples | Number of samples used for a single fit (min. 3). |
[out] | parameters_u* | Parameters of the horizontal flow field |
[out] | parameters_v* | Parameters of the vertical flow field |
[out] | fit_error* | Total error of the finally selected fit |
[out] | min_error_u* | Error fit horizontal flow field |
[out] | min_error_v* | Error fit vertical flow field |
[out] | n_inliers_u* | Number of inliers in the horizontal flow fit. |
[out] | n_inliers_v* | Number of inliers in the vertical flow fit. |
Definition at line 109 of file linear_flow_fit.c.
References A, MAKE_MATRIX_PTR, MAT_MUL, MAT_SUB, MIN_SAMPLES_FIT, n_samples, p, flow_t::pos, pprz_svd_float(), pprz_svd_solve_float(), and point_t::y.
Referenced by analyze_linear_flow_field().