Paparazzi UAS  v5.8.2_stable-0-g6260b7c
Paparazzi is a free software Unmanned Aircraft System.
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
image.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2015 Freek van Tienen <freek.v.tienen@gmail.com>
3  *
4  * This file is part of Paparazzi.
5  *
6  * Paparazzi is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2, or (at your option)
9  * any later version.
10  *
11  * Paparazzi is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Paparazzi; see the file COPYING. If not, write to
18  * the Free Software Foundation, 59 Temple Place - Suite 330,
19  * Boston, MA 02111-1307, USA.
20  */
21 
27 #ifndef _CV_LIB_VISION_IMAGE_H
28 #define _CV_LIB_VISION_IMAGE_H
29 
30 #include "std.h"
31 #include <sys/time.h>
32 
33 /* The different type of images we currently support */
34 enum image_type {
39 };
40 
41 /* Main image structure */
42 struct image_t {
46  struct timeval ts;
47 
50  void *buf;
51 };
52 
53 /* Image point structure */
54 struct point_t {
57 };
58 
59 /* Vector structure for point differences */
60 struct flow_t {
61  struct point_t pos;
64 };
65 
66 /* Usefull image functions */
67 void image_create(struct image_t *img, uint16_t width, uint16_t height, enum image_type type);
68 void image_free(struct image_t *img);
69 void image_copy(struct image_t *input, struct image_t *output);
70 void image_switch(struct image_t *a, struct image_t *b);
71 void image_to_grayscale(struct image_t *input, struct image_t *output);
72 uint16_t image_yuv422_colorfilt(struct image_t *input, struct image_t *output, uint8_t y_m, uint8_t y_M, uint8_t u_m, uint8_t u_M, uint8_t v_m, uint8_t v_M);
73 void image_yuv422_downsample(struct image_t *input, struct image_t *output, uint16_t downsample);
74 void image_subpixel_window(struct image_t *input, struct image_t *output, struct point_t *center, uint16_t subpixel_factor);
75 void image_gradients(struct image_t *input, struct image_t *dx, struct image_t *dy);
76 void image_calculate_g(struct image_t *dx, struct image_t *dy, int32_t *g);
77 uint32_t image_difference(struct image_t *img_a, struct image_t *img_b, struct image_t *diff);
78 int32_t image_multiply(struct image_t *img_a, struct image_t *img_b, struct image_t *mult);
79 void image_show_points(struct image_t *img, struct point_t *points, uint16_t points_cnt);
80 void image_show_flow(struct image_t *img, struct flow_t *vectors, uint16_t points_cnt, uint8_t subpixel_factor);
81 void image_draw_line(struct image_t *img, struct point_t *from, struct point_t *to);
82 
83 #endif
unsigned short uint16_t
Definition: types.h:16
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.
Definition: image.c:77
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.
Definition: image.c:431
uint16_t x
The x coordinate of the point.
Definition: image.h:55
uint32_t buf_size
The buffer size.
Definition: image.h:49
image_type
Definition: image.h:34
void image_show_flow(struct image_t *img, struct flow_t *vectors, uint16_t points_cnt, uint8_t subpixel_factor)
Shows the flow from a specific point to a new point This works on YUV422 and Grayscale images...
Definition: image.c:456
Definition: image.h:42
Definition: image.h:60
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...
Definition: image.c:97
uint8_t buf_idx
Buffer index for V4L2 freeing.
Definition: image.h:48
void image_gradients(struct image_t *input, struct image_t *dx, struct image_t *dy)
Calculate the gradients using the following matrix: [0 -1 0; -1 0 1; 0 1 0].
Definition: image.c:302
void image_draw_line(struct image_t *img, struct point_t *from, struct point_t *to)
Draw a line on the image.
Definition: image.c:479
int16_t flow_x
The x direction flow in subpixels.
Definition: image.h:62
int32_t image_multiply(struct image_t *img_a, struct image_t *img_b, struct image_t *mult)
Calculate the multiplication between two images and return the error This will only work with image g...
Definition: image.c:395
uint16_t w
Image width.
Definition: image.h:44
void image_yuv422_downsample(struct image_t *input, struct image_t *output, uint16_t downsample)
Simplified high-speed low CPU downsample function without averaging downsample factor must be 1...
Definition: image.c:213
unsigned long uint32_t
Definition: types.h:18
uint16_t h
Image height.
Definition: image.h:45
signed short int16_t
Definition: types.h:17
uint32_t image_difference(struct image_t *img_a, struct image_t *img_b, struct image_t *diff)
Calculate the difference between two images and return the error This will only work with grayscale i...
Definition: image.c:357
void * buf
Image buffer (depending on the image_type)
Definition: image.h:50
struct point_t pos
The original position the flow comes from.
Definition: image.h:61
Definition: image.h:54
void image_calculate_g(struct image_t *dx, struct image_t *dy, int32_t *g)
Calculate the G vector of an image gradient This is used for optical flow calculation.
Definition: image.c:325
signed long int32_t
Definition: types.h:19
void image_subpixel_window(struct image_t *input, struct image_t *output, struct point_t *center, uint16_t subpixel_factor)
This outputs a subpixel window image in grayscale Currently only works with Grayscale images as input...
Definition: image.c:247
uint16_t image_yuv422_colorfilt(struct image_t *input, struct image_t *output, uint8_t y_m, uint8_t y_M, uint8_t u_m, uint8_t u_M, uint8_t v_m, uint8_t v_M)
Filter colors in an YUV422 image.
Definition: image.c:149
unsigned char uint8_t
Definition: types.h:14
struct timeval ts
The timestamp of creation.
Definition: image.h:46
void image_free(struct image_t *img)
Free the image.
Definition: image.c:63
UYVY format (uint16 per pixel)
Definition: image.h:35
void image_create(struct image_t *img, uint16_t width, uint16_t height, enum image_type type)
Create a new image.
Definition: image.c:38
Grayscale image with only the Y part (uint8 per pixel)
Definition: image.h:36
uint16_t y
The y coordinate of the point.
Definition: image.h:56
void image_to_grayscale(struct image_t *input, struct image_t *output)
Convert an image to grayscale.
Definition: image.c:116
An image gradient (int16 per pixel)
Definition: image.h:38
int16_t flow_y
The y direction flow in subpixels.
Definition: image.h:63
An JPEG encoded image (not per pixel encoded)
Definition: image.h:37
enum image_type type
The image type.
Definition: image.h:43