Paparazzi UAS  v7.0_unstable
Paparazzi is a free software Unmanned Aircraft System.
textons.c File Reference

Takes an image and represents the texture and colors in the image with a texton histogram. More...

#include <stdlib.h>
#include <stdio.h>
#include "modules/computer_vision/cv.h"
#include "modules/computer_vision/textons.h"
#include "mcu_periph/sys_time.h"
#include "generated/airframe.h"
+ Include dependency graph for textons.c:

Go to the source code of this file.

Macros

#define MAX_N_TEXTONS   255
 
#define TEXTONS_RUN   1
 
#define TEXTONS_FPS   30
 
#define TEXTONS_LOAD_DICTIONARY   1
 
#define TEXTONS_REINITIALIZE_DICTIONARY   0
 
#define TEXTONS_ALPHA   0
 
#define TEXTONS_N_TEXTONS   20
 
#define TEXTONS_N_SAMPLES   250
 
#define TEXTONS_PATCH_SIZE   6
 
#define TEXTONS_N_LEARNING_SAMPLES   5000
 
#define TEXTONS_FULL_SAMPLING   0
 
#define TEXTONS_BORDER_WIDTH   0
 
#define TEXTONS_BORDER_HEIGHT   0
 
#define TEXTONS_DICTIONARY_NUMBER   0
 
#define TEXTONS_DICTIONARY_PATH   /data/ftp/internal_000
 

Functions

struct image_ttexton_func (struct image_t *img, UNUSED uint8_t p)
 Main texton processing function that first either loads or learns a dictionary and then extracts the texton histogram. More...
 
void DictionaryTrainingYUV (uint8_t *frame, uint16_t width, uint16_t height)
 Function that performs one pass for dictionary training. More...
 
void DistributionExtraction (uint8_t *frame, uint16_t width, uint16_t height)
 Function that extracts a texton histogram from an image. More...
 
void save_texton_dictionary (void)
 Save the texton dictionary. More...
 
void load_texton_dictionary (void)
 Load a texton dictionary. More...
 
void textons_init (void)
 Initialize. More...
 
void textons_stop (void)
 
float get_entropy (float *p_dist, int D)
 Function that calculates a base-2 Shannon entropy for a probability distribution. More...
 

Variables

float **** dictionary
 
uint32_t learned_samples = 0
 
uint8_t dictionary_initialized = 0
 
float * texton_distribution
 
struct video_listenerlistener = NULL
 
uint8_t running = TEXTONS_RUN
 
uint8_t load_dictionary = TEXTONS_LOAD_DICTIONARY
 
uint8_t reinitialize_dictionary = TEXTONS_REINITIALIZE_DICTIONARY
 
uint8_t alpha_uint = TEXTONS_ALPHA
 
uint8_t n_textons = TEXTONS_N_TEXTONS
 
uint8_t patch_size = TEXTONS_PATCH_SIZE
 
uint32_t n_learning_samples = TEXTONS_N_LEARNING_SAMPLES
 
uint32_t n_samples_image = TEXTONS_N_SAMPLES
 
uint8_t FULL_SAMPLING = TEXTONS_FULL_SAMPLING
 
uint32_t border_width = TEXTONS_BORDER_WIDTH
 
uint32_t border_height = TEXTONS_BORDER_HEIGHT
 
uint8_t dictionary_number = TEXTONS_DICTIONARY_NUMBER
 
uint8_t dictionary_ready = 0
 
float alpha = 0.0
 
static FILE * dictionary_logger = NULL
 

Detailed Description

Takes an image and represents the texture and colors in the image with a texton histogram.

A texton is a cluster centroid in a space populated by image patches. First, this code learns or loads a texton dictionary. Then, for each incoming image, patches are sampled from the image, compared to textons in the dictionary, and the closest texton is identified, augmenting the corresponding bin in the texton histogram.

Definition in file textons.c.

Macro Definition Documentation

◆ MAX_N_TEXTONS

#define MAX_N_TEXTONS   255

Definition at line 44 of file textons.c.

◆ TEXTONS_ALPHA

#define TEXTONS_ALPHA   0

Definition at line 68 of file textons.c.

◆ TEXTONS_BORDER_HEIGHT

#define TEXTONS_BORDER_HEIGHT   0

Definition at line 103 of file textons.c.

◆ TEXTONS_BORDER_WIDTH

#define TEXTONS_BORDER_WIDTH   0

Definition at line 98 of file textons.c.

◆ TEXTONS_DICTIONARY_NUMBER

#define TEXTONS_DICTIONARY_NUMBER   0

Definition at line 108 of file textons.c.

◆ TEXTONS_DICTIONARY_PATH

#define TEXTONS_DICTIONARY_PATH   /data/ftp/internal_000

Definition at line 113 of file textons.c.

◆ TEXTONS_FPS

#define TEXTONS_FPS   30

Definition at line 53 of file textons.c.

◆ TEXTONS_FULL_SAMPLING

#define TEXTONS_FULL_SAMPLING   0

Definition at line 93 of file textons.c.

◆ TEXTONS_LOAD_DICTIONARY

#define TEXTONS_LOAD_DICTIONARY   1

Definition at line 58 of file textons.c.

◆ TEXTONS_N_LEARNING_SAMPLES

#define TEXTONS_N_LEARNING_SAMPLES   5000

Definition at line 88 of file textons.c.

◆ TEXTONS_N_SAMPLES

#define TEXTONS_N_SAMPLES   250

Definition at line 78 of file textons.c.

◆ TEXTONS_N_TEXTONS

#define TEXTONS_N_TEXTONS   20

Definition at line 73 of file textons.c.

◆ TEXTONS_PATCH_SIZE

#define TEXTONS_PATCH_SIZE   6

Definition at line 83 of file textons.c.

◆ TEXTONS_REINITIALIZE_DICTIONARY

#define TEXTONS_REINITIALIZE_DICTIONARY   0

Definition at line 63 of file textons.c.

◆ TEXTONS_RUN

#define TEXTONS_RUN   1

Definition at line 48 of file textons.c.

Function Documentation

◆ DictionaryTrainingYUV()

void DictionaryTrainingYUV ( uint8_t frame,
uint16_t  width,
uint16_t  height 
)

Function that performs one pass for dictionary training.

It extracts samples from an image, finds the closest texton and moves it towards the sample.

Parameters
[in]frame*The YUV image data
[in]widthThe width of the image
[in]heightThe height of the image

Definition at line 227 of file textons.c.

References alpha, alpha_uint, image_t::buf, dictionary, dictionary_initialized, frame, learned_samples, n_samples_image, n_textons, patch_size, s, and image_t::w.

Referenced by texton_func().

+ Here is the caller graph for this function:

◆ DistributionExtraction()

void DistributionExtraction ( uint8_t frame,
uint16_t  width,
uint16_t  height 
)

Function that extracts a texton histogram from an image.

Parameters
[in]frame*The YUV image data
[in]widthThe width of the image
[in]heightThe height of the image

Definition at line 372 of file textons.c.

References border_height, border_width, image_t::buf, dictionary, frame, FULL_SAMPLING, n_samples_image, n_textons, patch_size, and texton_distribution.

Referenced by texton_func().

+ Here is the caller graph for this function:

◆ get_entropy()

float get_entropy ( float *  p_dist,
int  D 
)

Function that calculates a base-2 Shannon entropy for a probability distribution.

Parameters
[in]p_distThe probability distribution array
[in]DSize of the array

Definition at line 594 of file textons.c.

References D.

◆ load_texton_dictionary()

void load_texton_dictionary ( void  )

Load a texton dictionary.

Definition at line 532 of file textons.c.

References dictionary, dictionary_initialized, dictionary_logger, dictionary_number, dictionary_ready, learned_samples, load_dictionary, n_textons, patch_size, and TEXTONS_DICTIONARY_PATH.

Referenced by texton_func().

+ Here is the caller graph for this function:

◆ save_texton_dictionary()

void save_texton_dictionary ( void  )

Save the texton dictionary.

Definition at line 501 of file textons.c.

References dictionary, dictionary_logger, dictionary_number, n_textons, patch_size, and TEXTONS_DICTIONARY_PATH.

Referenced by texton_func().

+ Here is the caller graph for this function:

◆ texton_func()

struct image_t * texton_func ( struct image_t img,
UNUSED uint8_t  p 
)

Main texton processing function that first either loads or learns a dictionary and then extracts the texton histogram.

Parameters
[out]*imgThe output image
[in]*imgThe input image (YUV422)

Definition at line 144 of file textons.c.

References alpha, alpha_uint, image_t::buf, image_t::buf_size, dictionary_initialized, dictionary_ready, DictionaryTrainingYUV(), DistributionExtraction(), frame, image_t::h, if(), learned_samples, load_dictionary, load_texton_dictionary(), n_learning_samples, patch_size, reinitialize_dictionary, running, save_texton_dictionary(), and image_t::w.

Referenced by textons_init().

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

◆ textons_init()

void textons_init ( void  )

Initialize.

Definition at line 562 of file textons.c.

References cv_add_to_device(), dictionary, dictionary_initialized, dictionary_ready, learned_samples, listener, MAX_N_TEXTONS, patch_size, texton_distribution, texton_func(), TEXTONS_FPS, and image_t::w.

+ Here is the call graph for this function:

◆ textons_stop()

void textons_stop ( void  )

Definition at line 583 of file textons.c.

References dictionary, and texton_distribution.

Variable Documentation

◆ alpha

◆ alpha_uint

uint8_t alpha_uint = TEXTONS_ALPHA

Definition at line 121 of file textons.c.

Referenced by DictionaryTrainingYUV(), and texton_func().

◆ border_height

Definition at line 128 of file textons.c.

Referenced by DistributionExtraction().

◆ border_width

Definition at line 127 of file textons.c.

Referenced by DistributionExtraction().

◆ dictionary

◆ dictionary_initialized

uint8_t dictionary_initialized = 0

Definition at line 41 of file textons.c.

Referenced by DictionaryTrainingYUV(), load_texton_dictionary(), texton_func(), and textons_init().

◆ dictionary_logger

FILE* dictionary_logger = NULL
static

Definition at line 136 of file textons.c.

Referenced by load_texton_dictionary(), and save_texton_dictionary().

◆ dictionary_number

uint8_t dictionary_number = TEXTONS_DICTIONARY_NUMBER

Definition at line 129 of file textons.c.

Referenced by load_texton_dictionary(), and save_texton_dictionary().

◆ dictionary_ready

uint8_t dictionary_ready = 0

Definition at line 132 of file textons.c.

Referenced by load_texton_dictionary(), texton_func(), and textons_init().

◆ FULL_SAMPLING

uint8_t FULL_SAMPLING = TEXTONS_FULL_SAMPLING

Definition at line 126 of file textons.c.

Referenced by DistributionExtraction().

◆ learned_samples

uint32_t learned_samples = 0

Definition at line 40 of file textons.c.

Referenced by DictionaryTrainingYUV(), load_texton_dictionary(), texton_func(), and textons_init().

◆ listener

struct video_listener* listener = NULL

Definition at line 116 of file textons.c.

Referenced by textons_init().

◆ load_dictionary

uint8_t load_dictionary = TEXTONS_LOAD_DICTIONARY

Definition at line 119 of file textons.c.

Referenced by load_texton_dictionary(), and texton_func().

◆ n_learning_samples

uint32_t n_learning_samples = TEXTONS_N_LEARNING_SAMPLES

Definition at line 124 of file textons.c.

Referenced by texton_func().

◆ n_samples_image

uint32_t n_samples_image = TEXTONS_N_SAMPLES

Definition at line 125 of file textons.c.

Referenced by DictionaryTrainingYUV(), and DistributionExtraction().

◆ n_textons

◆ patch_size

◆ reinitialize_dictionary

uint8_t reinitialize_dictionary = TEXTONS_REINITIALIZE_DICTIONARY

Definition at line 120 of file textons.c.

Referenced by texton_func().

◆ running

uint8_t running = TEXTONS_RUN

Definition at line 118 of file textons.c.

Referenced by texton_func().

◆ texton_distribution

float* texton_distribution