48#include "generated/airframe.h"
54#define OPTICFLOW_SHOW_CORNERS 0
56#define EXHAUSTIVE_FAST 0
69#ifndef OPTICFLOW_CORNER_METHOD
70#define OPTICFLOW_CORNER_METHOD ACT_FAST
73#ifndef OPTICFLOW_CORNER_METHOD_CAMERA2
74#define OPTICFLOW_CORNER_METHOD_CAMERA2 ACT_FAST
80#ifndef OPTICFLOW_MAX_TRACK_CORNERS
81#define OPTICFLOW_MAX_TRACK_CORNERS 25
84#ifndef OPTICFLOW_MAX_TRACK_CORNERS_CAMERA2
85#define OPTICFLOW_MAX_TRACK_CORNERS_CAMERA2 25
90#ifndef OPTICFLOW_WINDOW_SIZE
91#define OPTICFLOW_WINDOW_SIZE 10
94#ifndef OPTICFLOW_WINDOW_SIZE_CAMERA2
95#define OPTICFLOW_WINDOW_SIZE_CAMERA2 10
100#ifndef OPTICFLOW_SEARCH_DISTANCE
101#define OPTICFLOW_SEARCH_DISTANCE 20
104#ifndef OPTICFLOW_SEARCH_DISTANCE_CAMERA2
105#define OPTICFLOW_SEARCH_DISTANCE_CAMERA2 20
110#ifndef OPTICFLOW_SUBPIXEL_FACTOR
111#define OPTICFLOW_SUBPIXEL_FACTOR 10
114#ifndef OPTICFLOW_SUBPIXEL_FACTOR_CAMERA2
115#define OPTICFLOW_SUBPIXEL_FACTOR_CAMERA2 10
120#ifndef OPTICFLOW_RESOLUTION_FACTOR
121#define OPTICFLOW_RESOLUTION_FACTOR 100
124#ifndef OPTICFLOW_RESOLUTION_FACTOR_CAMERA2
125#define OPTICFLOW_RESOLUTION_FACTOR_CAMERA2 100
130#ifndef OPTICFLOW_MAX_ITERATIONS
131#define OPTICFLOW_MAX_ITERATIONS 10
134#ifndef OPTICFLOW_MAX_ITERATIONS_CAMERA2
135#define OPTICFLOW_MAX_ITERATIONS_CAMERA2 10
140#ifndef OPTICFLOW_THRESHOLD_VEC
141#define OPTICFLOW_THRESHOLD_VEC 2
144#ifndef OPTICFLOW_THRESHOLD_VEC_CAMERA2
145#define OPTICFLOW_THRESHOLD_VEC_CAMERA2 2
150#ifndef OPTICFLOW_PYRAMID_LEVEL
151#define OPTICFLOW_PYRAMID_LEVEL 2
154#ifndef OPTICFLOW_PYRAMID_LEVEL_CAMERA2
155#define OPTICFLOW_PYRAMID_LEVEL_CAMERA2 2
160#ifndef OPTICFLOW_FAST9_ADAPTIVE
161#define OPTICFLOW_FAST9_ADAPTIVE TRUE
164#ifndef OPTICFLOW_FAST9_ADAPTIVE_CAMERA2
165#define OPTICFLOW_FAST9_ADAPTIVE_CAMERA2 TRUE
170#ifndef OPTICFLOW_FAST9_THRESHOLD
171#define OPTICFLOW_FAST9_THRESHOLD 20
174#ifndef OPTICFLOW_FAST9_THRESHOLD_CAMERA2
175#define OPTICFLOW_FAST9_THRESHOLD_CAMERA2 20
180#ifndef OPTICFLOW_FAST9_MIN_DISTANCE
181#define OPTICFLOW_FAST9_MIN_DISTANCE 10
184#ifndef OPTICFLOW_FAST9_MIN_DISTANCE_CAMERA2
185#define OPTICFLOW_FAST9_MIN_DISTANCE_CAMERA2 10
190#ifndef OPTICFLOW_FAST9_PADDING
191#define OPTICFLOW_FAST9_PADDING 20
194#ifndef OPTICFLOW_FAST9_PADDING_CAMERA2
195#define OPTICFLOW_FAST9_PADDING_CAMERA2 20
201#define FAST9_LOW_THRESHOLD 5
202#define FAST9_HIGH_THRESHOLD 60
205#ifndef OPTICFLOW_METHOD
206#define OPTICFLOW_METHOD 0
209#ifndef OPTICFLOW_METHOD_CAMERA2
210#define OPTICFLOW_METHOD_CAMERA2 0
215#if OPTICFLOW_METHOD > 1
216#error WARNING: Both Lukas Kanade and EdgeFlow are NOT selected camera1
219#if OPTICFLOW_METHOD_CAMERA2 > 1
220#error WARNING: Both Lukas Kanade and EdgeFlow are NOT selected camera2
223#ifndef OPTICFLOW_DEROTATION
224#define OPTICFLOW_DEROTATION TRUE
227#ifndef OPTICFLOW_DEROTATION_CAMERA2
228#define OPTICFLOW_DEROTATION_CAMERA2 TRUE
233#ifndef OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X
234#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X 1.0
237#ifndef OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X_CAMERA2
238#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X_CAMERA2 1.0
243#ifndef OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y
244#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y 1.0
247#ifndef OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y_CAMERA2
248#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y_CAMERA2 1.0
253#ifndef OPTICFLOW_MEDIAN_FILTER
254#define OPTICFLOW_MEDIAN_FILTER FALSE
257#ifndef OPTICFLOW_MEDIAN_FILTER_CAMERA2
258#define OPTICFLOW_MEDIAN_FILTER_CAMERA2 FALSE
263#ifndef OPTICFLOW_FEATURE_MANAGEMENT
264#define OPTICFLOW_FEATURE_MANAGEMENT 0
267#ifndef OPTICFLOW_FEATURE_MANAGEMENT_CAMERA2
268#define OPTICFLOW_FEATURE_MANAGEMENT_CAMERA2 0
273#ifndef OPTICFLOW_FAST9_REGION_DETECT
274#define OPTICFLOW_FAST9_REGION_DETECT 1
277#ifndef OPTICFLOW_FAST9_REGION_DETECT_CAMERA2
278#define OPTICFLOW_FAST9_REGION_DETECT_CAMERA2 1
283#ifndef OPTICFLOW_FAST9_NUM_REGIONS
284#define OPTICFLOW_FAST9_NUM_REGIONS 9
287#ifndef OPTICFLOW_FAST9_NUM_REGIONS_CAMERA2
288#define OPTICFLOW_FAST9_NUM_REGIONS_CAMERA2 9
293#ifndef OPTICFLOW_ACTFAST_LONG_STEP
294#define OPTICFLOW_ACTFAST_LONG_STEP 10
297#ifndef OPTICFLOW_ACTFAST_LONG_STEP_CAMERA2
298#define OPTICFLOW_ACTFAST_LONG_STEP_CAMERA2 10
303#ifndef OPTICFLOW_ACTFAST_SHORT_STEP
304#define OPTICFLOW_ACTFAST_SHORT_STEP 2
307#ifndef OPTICFLOW_ACTFAST_SHORT_STEP_CAMERA2
308#define OPTICFLOW_ACTFAST_SHORT_STEP_CAMERA2 2
313#ifndef OPTICFLOW_ACTFAST_GRADIENT_METHOD
314#define OPTICFLOW_ACTFAST_GRADIENT_METHOD 1
317#ifndef OPTICFLOW_ACTFAST_GRADIENT_METHOD_CAMERA2
318#define OPTICFLOW_ACTFAST_GRADIENT_METHOD_CAMERA2 1
323#ifndef OPTICFLOW_ACTFAST_MIN_GRADIENT
324#define OPTICFLOW_ACTFAST_MIN_GRADIENT 10
327#ifndef OPTICFLOW_ACTFAST_MIN_GRADIENT_CAMERA2
328#define OPTICFLOW_ACTFAST_MIN_GRADIENT_CAMERA2 10
334#ifndef OPTICFLOW_BODY_TO_CAM_PHI
335#define OPTICFLOW_BODY_TO_CAM_PHI 0
337#ifndef OPTICFLOW_BODY_TO_CAM_THETA
338#define OPTICFLOW_BODY_TO_CAM_THETA 0
340#ifndef OPTICFLOW_BODY_TO_CAM_PSI
341#define OPTICFLOW_BODY_TO_CAM_PSI -M_PI_2
344#ifndef OPTICFLOW_BODY_TO_CAM_PHI_CAMERA2
345#define OPTICFLOW_BODY_TO_CAM_PHI_CAMERA2 0
347#ifndef OPTICFLOW_BODY_TO_CAM_THETA_CAMERA2
348#define OPTICFLOW_BODY_TO_CAM_THETA_CAMERA2 0
350#ifndef OPTICFLOW_BODY_TO_CAM_PSI_CAMERA2
351#define OPTICFLOW_BODY_TO_CAM_PSI_CAMERA2 -M_PI_2
356#ifndef OPTICFLOW_TRACK_BACK
357#define OPTICFLOW_TRACK_BACK FALSE
360#ifndef OPTICFLOW_TRACK_BACK_CAMERA2
361#define OPTICFLOW_TRACK_BACK_CAMERA2 FALSE
368#ifndef OPTICFLOW_SHOW_FLOW
369#define OPTICFLOW_SHOW_FLOW FALSE
372#ifndef OPTICFLOW_SHOW_FLOW_CAMERA2
373#define OPTICFLOW_SHOW_FLOW_CAMERA2 FALSE
380#include "filters/median_filter.h"
386static int cmp_flow(
const void *a,
const void *
b);
387static int cmp_array(
const void *a,
const void *
b);
441#ifdef OPTICFLOW_CAMERA2
526 result->
fps = 1000.f / dt;
586#if OPTICFLOW_SHOW_CORNERS
1238 return (
a_p->flow_x *
a_p->flow_x +
a_p->flow_y *
a_p->flow_y) - (
b_p->flow_x *
b_p->flow_x +
b_p->flow_y *
1253 return pa[0] -
pb[0];
void act_fast(struct image_t *img, uint8_t fast_threshold, uint16_t *num_corners, struct point_t **ret_corners, uint16_t n_agents, uint16_t n_time_steps, float long_step, float short_step, int min_gradient, int gradient_method, int camera_id)
Do an ACT-FAST corner detection.
Finds corners in an image by actively scanning the image.
float agl_dist_value_filtered
Bind to agl ABI message and provide a filtered value to be used in flight plans.
uint32_t getAmountPeaks(int32_t *edgehist, int32_t thres, int32_t size)
getAmountPeaks, calculates the amount of peaks in a edge histogram
void calculate_edge_displacement(int32_t *edge_histogram, int32_t *edge_histogram_prev, int32_t *displacement, uint16_t size, uint8_t window, uint8_t disp_range, int32_t der_shift)
Calculate_displacement calculates the displacement between two histograms.
void draw_edgeflow_img(struct image_t *img, struct edge_flow_t edgeflow, int32_t *edge_hist_x_prev, int32_t *edge_hist_x)
Draws edgehistogram, displacement and linefit directly on the image for debugging (only for edgeflow ...
void calculate_edge_histogram(struct image_t *img, int32_t edge_histogram[], char direction, uint16_t edge_threshold)
Calculate a edge/gradient histogram for each dimension of the image.
void line_fit(int32_t *displacement, int32_t *divergence, int32_t *flow, uint32_t size, uint32_t border, uint16_t RES)
Fits a linear model to an array with pixel displacements with least squares.
void calc_previous_frame_nr(struct opticflow_result_t *result, struct opticflow_t *opticflow, uint8_t current_frame_nr, uint8_t *previous_frame_offset, uint8_t *previous_frame_nr)
Calc_previous_frame_nr; adaptive Time Horizon.
calculate optical flow with EdgeFlow
void fast9_detect(struct image_t *img, uint8_t threshold, uint16_t min_dist, uint16_t x_padding, uint16_t y_padding, uint16_t *num_corners, uint16_t *ret_corners_length, struct point_t **ret_corners, uint16_t *roi)
Do a FAST9 corner detection.
#define FLOAT_EULERS_ZERO(_e)
#define float_rmat_of_eulers
void float_rmat_transp_vmult(struct FloatVect3 *vb, struct FloatRMat *m_b2a, struct FloatVect3 *va)
rotate 3D vector by transposed rotation matrix.
#define VECT3_ASSIGN(_a, _x, _y, _z)
void image_copy(struct image_t *input, struct image_t *output)
Copy an image from inut to output This will only work if the formats are the same.
void image_switch(struct image_t *a, struct image_t *b)
This will switch image *a and *b This is faster as image_copy because it doesn't copy the whole image...
void image_show_points(struct image_t *img, struct point_t *points, uint16_t points_cnt)
Show points in an image by coloring them through giving the pixels the maximum value.
void image_to_grayscale(struct image_t *input, struct image_t *output)
Convert an image to grayscale.
void image_show_flow_color(struct image_t *img, struct flow_t *vectors, uint16_t points_cnt, uint8_t subpixel_factor, const uint8_t *color, const uint8_t *bad_color)
Shows the flow from a specific point to a new point This works on YUV422 and Grayscale images.
void image_create(struct image_t *img, uint16_t width, uint16_t height, enum image_type type)
Create a new image.
Image helper functions like resizing, color filter, converters...
struct timeval ts
The timestamp of creation.
uint16_t x_sub
The x subpixel coordinate of the point.
uint32_t x
The x coordinate of the point.
uint32_t y
The y coordinate of the point.
uint16_t count
Number of times the point has been tracked successfully.
struct point_t pos
The original position the flow comes from in subpixels.
struct FloatEulers eulers
Euler Angles at time of image.
uint32_t error
The matching error in the tracking process in subpixels.
uint16_t y_sub
The y subpixel coordinate of the point.
@ IMAGE_GRAYSCALE
Grayscale image with only the Y part (uint8 per pixel)
int16_t flow_der_x
The derotated flow calculation in the x direction (in subpixels)
float div_size
Divergence as determined with the size_divergence script.
float surface_roughness
Surface roughness as determined with a linear optical flow fit.
uint16_t tracked_cnt
The amount of tracked corners.
float divergence
Divergence as determined with a linear flow fit.
uint16_t corner_cnt
The amount of coners found by FAST9.
float fps
Frames per second of the optical flow calculation.
float noise_measurement
noise of measurement, for state filter
struct FloatVect3 vel_body
The velocity in body frame (m/s) with X positive to the front of the aircraft, Y positive to the righ...
int16_t flow_x
Flow in x direction from the camera (in subpixels) with X positive to the right.
uint8_t camera_id
Camera id as passed to cv_add_to_device.
struct FloatVect3 vel_cam
The velocity in camera frame (m/s)
int16_t flow_y
Flow in y direction from the camera (in subpixels) with Y positive to the bottom.
int16_t flow_der_y
The derotated flow calculation in the y direction (in subpixels)
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,...
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,...
struct flow_t * opticFlowLK(struct image_t *new_img, struct image_t *old_img, struct point_t *points, uint16_t *points_cnt, uint16_t half_window_size, uint16_t subpixel_factor, uint8_t max_iterations, uint8_t step_threshold, uint8_t max_points, uint8_t pyramid_level, uint8_t keep_bad_points)
efficient fixed-point optical-flow calculation
PRINT_CONFIG_VAR(ONELOOP_ANDI_FILT_CUTOFF)
#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X_CAMERA2
#define OPTICFLOW_MEDIAN_FILTER
#define OPTICFLOW_BODY_TO_CAM_THETA_CAMERA2
#define OPTICFLOW_FAST9_ADAPTIVE_CAMERA2
#define OPTICFLOW_ACTFAST_LONG_STEP
static void manage_flow_features(struct image_t *img, struct opticflow_t *opticflow, struct opticflow_result_t *result)
#define OPTICFLOW_SUBPIXEL_FACTOR_CAMERA2
#define OPTICFLOW_FEATURE_MANAGEMENT_CAMERA2
#define OPTICFLOW_MEDIAN_FILTER_CAMERA2
#define OPTICFLOW_FAST9_NUM_REGIONS_CAMERA2
#define OPTICFLOW_SHOW_FLOW
#define OPTICFLOW_ACTFAST_SHORT_STEP
#define OPTICFLOW_THRESHOLD_VEC
#define OPTICFLOW_PYRAMID_LEVEL_CAMERA2
struct FloatRMat body_to_cam[2]
#define OPTICFLOW_SUBPIXEL_FACTOR
#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_X
static struct flow_t * predict_flow_vectors(struct flow_t *flow_vectors, uint16_t n_points, float phi_diff, float theta_diff, float psi_diff, struct opticflow_t *opticflow)
#define OPTICFLOW_ACTFAST_LONG_STEP_CAMERA2
static uint32_t timeval_diff(struct timeval *starttime, struct timeval *finishtime)
Calculate the difference from start till finish.
#define OPTICFLOW_FAST9_MIN_DISTANCE
bool calc_fast9_lukas_kanade(struct opticflow_t *opticflow, struct image_t *img, struct opticflow_result_t *result)
Run the optical flow with fast9 and lukaskanade on a new image frame.
#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y_CAMERA2
#define OPTICFLOW_MAX_ITERATIONS
#define OPTICFLOW_DEROTATION_CORRECTION_FACTOR_Y
#define OPTICFLOW_ACTFAST_GRADIENT_METHOD
#define OPTICFLOW_SEARCH_DISTANCE_CAMERA2
#define OPTICFLOW_THRESHOLD_VEC_CAMERA2
#define OPTICFLOW_ACTFAST_MIN_GRADIENT_CAMERA2
#define OPTICFLOW_BODY_TO_CAM_PSI
#define OPTICFLOW_FAST9_THRESHOLD_CAMERA2
#define OPTICFLOW_CORNER_METHOD
#define OPTICFLOW_RESOLUTION_FACTOR
static int cmp_array(const void *a, const void *b)
Compare the rows of an integer (uint16_t) 2D array based on the first column.
#define OPTICFLOW_FAST9_MIN_DISTANCE_CAMERA2
#define OPTICFLOW_FEATURE_MANAGEMENT
#define OPTICFLOW_BODY_TO_CAM_PSI_CAMERA2
static int cmp_flow(const void *a, const void *b)
Compare two flow vectors based on flow distance Used for sorting.
#define OPTICFLOW_WINDOW_SIZE
#define OPTICFLOW_METHOD_CAMERA2
#define OPTICFLOW_TRACK_BACK_CAMERA2
void opticflow_calc_init(struct opticflow_t opticflow[])
Initialize the opticflow calculator.
#define OPTICFLOW_MAX_ITERATIONS_CAMERA2
#define OPTICFLOW_SHOW_FLOW_CAMERA2
#define OPTICFLOW_PYRAMID_LEVEL
bool opticflow_calc_frame(struct opticflow_t *opticflow, struct image_t *img, struct opticflow_result_t *result)
Run the optical flow on a new image frame.
#define OPTICFLOW_TRACK_BACK
#define OPTICFLOW_ACTFAST_GRADIENT_METHOD_CAMERA2
struct MedianFilter3Float vel_filt
#define OPTICFLOW_ACTFAST_MIN_GRADIENT
#define FAST9_LOW_THRESHOLD
#define OPTICFLOW_FAST9_NUM_REGIONS
#define OPTICFLOW_MAX_TRACK_CORNERS
#define OPTICFLOW_FAST9_PADDING
#define OPTICFLOW_SEARCH_DISTANCE
#define OPTICFLOW_FAST9_PADDING_CAMERA2
#define OPTICFLOW_BODY_TO_CAM_THETA
#define OPTICFLOW_FAST9_REGION_DETECT
bool calc_edgeflow_tot(struct opticflow_t *opticflow, struct image_t *img, struct opticflow_result_t *result)
Run the optical flow with EDGEFLOW on a new image frame.
#define FAST9_HIGH_THRESHOLD
#define OPTICFLOW_DEROTATION
#define OPTICFLOW_ACTFAST_SHORT_STEP_CAMERA2
#define OPTICFLOW_BODY_TO_CAM_PHI_CAMERA2
#define OPTICFLOW_FAST9_REGION_DETECT_CAMERA2
#define OPTICFLOW_RESOLUTION_FACTOR_CAMERA2
#define OPTICFLOW_BODY_TO_CAM_PHI
#define OPTICFLOW_MAX_TRACK_CORNERS_CAMERA2
#define OPTICFLOW_FAST9_THRESHOLD
#define OPTICFLOW_DEROTATION_CAMERA2
#define OPTICFLOW_WINDOW_SIZE_CAMERA2
#define OPTICFLOW_FAST9_ADAPTIVE
#define OPTICFLOW_CORNER_METHOD_CAMERA2
Calculate velocity from optic flow.
struct image_t prev_img_gray
Previous gray image frame.
bool track_back
Whether to track flow vectors back to the previous image, in order to check if the back-tracked flow ...
uint16_t fast9_min_distance
Minimum distance in pixels between corners.
float derotation_correction_factor_x
Correction factor for derotation in x axis, determined from a fit from the gyros and flow rotation....
uint16_t search_distance
Search distance for blockmatching alg.
uint16_t max_track_corners
Maximum amount of corners Lucas Kanade should track.
struct image_t img_gray
Current gray image frame.
uint8_t corner_method
Method to use for determining where the corners are.
bool got_first_img
If we got a image to work with.
struct point_t * fast9_ret_corners
Corners.
bool derotation
Derotation switched on or off (depended on the quality of the gyroscope measurement)
const struct video_config_t * camera
uint16_t resolution_factor
The resolution in EdgeFlow to determine the Divergence.
uint8_t max_iterations
The maximum amount of iterations the Lucas Kanade algorithm should do.
int actfast_gradient_method
Whether to use a simple or Sobel filter.
uint16_t subpixel_factor
The amount of subpixels per pixel.
float actfast_long_step
Step size to take when there is no texture.
bool show_flow
Whether to draw the flow vectors on the image. Watch out! This changes the image as will be received ...
bool fast9_adaptive
Whether the FAST9 threshold should be adaptive.
uint8_t fast9_threshold
FAST9 corner detection threshold.
int actfast_min_gradient
Threshold that decides when there is sufficient texture for edge following.
bool median_filter
Decides to use a median filter on the velocity.
uint8_t threshold_vec
The threshold in x, y subpixels which the algorithm should stop.
uint16_t window_size
Window size for the blockmatching algorithm (general value for all methods)
uint16_t fast9_padding
Padding used in FAST9 detector.
bool just_switched_method
Boolean to check if methods has been switched (for reinitialization)
bool feature_management
Decides whether to keep track corners in memory for the next frame instead of re-detecting every time...
bool fast9_region_detect
Decides whether to detect fast9 corners in specific regions of interest or the whole image (only for ...
uint8_t pyramid_level
Number of pyramid levels used in Lucas Kanade algorithm (0 == no pyramids used)
uint16_t fast9_rsize
Amount of corners allocated.
float derotation_correction_factor_y
Correction factor for derotation in Y axis, determined from a fit from the gyros and flow rotation....
float actfast_short_step
Step size to take when there is an edge to be followed.
uint8_t method
Method to use to calculate the optical flow.
#define FAST9_MAX_CORNERS
uint8_t fast9_num_regions
The number of regions of interest the image is split into.
struct opticflow_t opticflow[ACTIVE_CAMERAS]
Opticflow calculations.
float get_size_divergence(struct flow_t *vectors, int count, int n_samples)
Get divergence from optical flow vectors based on line sizes between corners.
Calculate divergence from flow vectors by looking at line sizes beteween the points.
bool distorted_pixels_to_normalized_coords(float x_pd, float y_pd, float *x_n, float *y_n, float k, const float *K)
Transform distorted pixel coordinates to normalized coordinates.
bool normalized_coords_to_distorted_pixels(float x_n, float y_n, float *x_pd, float *y_pd, float k, const float *K)
Transform normalized coordinates to distorted pixel coordinates.
Functions for undistorting camera images.
float focal_y
focal length in the y-direction in pixels
float center_x
center image coordinate in the x-direction
float focal_x
focal length in the x-direction in pixels
struct camera_intrinsics_t camera_intrinsics
Intrinsics of the camera; camera calibration parameters and distortion parameter(s)
float Dhane_k
(un)distortion parameter for a fish-eye lens
float center_y
center image coordinate in the y-direction
char * dev_name
path to device
unsigned short uint16_t
Typedef defining 16 bit unsigned short type.
int int32_t
Typedef defining 32 bit int type.
unsigned int uint32_t
Typedef defining 32 bit unsigned int type.
short int16_t
Typedef defining 16 bit short type.
unsigned char uint8_t
Typedef defining 8 bit unsigned char type.
signed char int8_t
Typedef defining 8 bit char type.