Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
linear_flow_fit.c File Reference
#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"
+ Include dependency graph for linear_flow_fit.c:

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...
 

Macro Definition Documentation

◆ MAX_COUNT_PT

#define MAX_COUNT_PT   50

Definition at line 49 of file linear_flow_fit.c.

◆ MIN_SAMPLES_FIT

#define MIN_SAMPLES_FIT   3

Definition at line 51 of file linear_flow_fit.c.

◆ N_PAR_TR_FIT

#define N_PAR_TR_FIT   6

Definition at line 53 of file linear_flow_fit.c.

Function Documentation

◆ analyze_flow_field()

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.

Parameters
[out]outcomeIf 0, there were too few vectors for a fit. If 1, the fit was successful.
[in]vectorsThe optical flow vectors
[in]countThe number of optical flow vectors
[in]error_thresholdError used to determine inliers / outliers.
[in]n_iterationsNumber of RANSAC iterations.
[in]n_samplesNumber of samples used for a single fit (min. 5).
[in]im_widthImage width in pixels
[in]im_heightImage height in pixels
[in]focal_lengthFocal length in pixels
[out]infoContains 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().

+ Here is the caller graph for this function:

◆ analyze_linear_flow_field()

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.

Parameters
[out]outcomeIf 0, there were too few vectors for a fit. If 1, the fit was successful.
[in]vectorsThe optical flow vectors
[in]countThe number of optical flow vectors
[in]error_thresholdError used to determine inliers / outliers.
[in]n_iterationsNumber of RANSAC iterations.
[in]n_samplesNumber of samples used for a single fit (min. 3).
[in]im_widthImage width in pixels
[in]im_heightImage height in pixels
[out]infoContains 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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ extract_information_from_parameters()

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.

Parameters
[in]parameters_u*Parameters of the horizontal flow field
[in]parameters_v*Parameters of the vertical flow field
[in]im_widthWidth of image in pixels
[in]im_heightHeight of image in pixels
[out]infoContains 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().

+ Here is the caller graph for this function:

◆ fit_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.

Parameters
[in]vectorsThe optical flow vectors
[in]countThe number of optical flow vectors
[in]error_thresholdError used to determine inliers / outliers.
[in]n_iterationsNumber of RANSAC iterations.
[in]n_samplesNumber 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().

+ Here is the call graph for this function:
+ Here is the caller graph for this function: