-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlibrary.h
202 lines (104 loc) · 6.64 KB
/
library.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
// Authors: Unknown. Please, if you are the author of this file, or if you
// know who are the authors of this file, let us know, so we can give the
// adequate credits and/or get the adequate authorizations.
#ifndef _LIBRARY_H_
#define _LIBRARY_H_
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>
// #include <unistd.h>
#include <float.h>
#define MAX(i,j) ( (i)<(j) ? (j):(i) )
#define MIN(i,j) ( (i)<(j) ? (i):(j) )
#define LUTMAX 30
#define LUTPRECISION 1000.0
#define TINY 1.0e-10
//#define MAXFLOAT 10000000.0
#define IRAC8 0.35355339 /* 1/sqrt(8) */
#define IRAC2P2 0.29289322 /* 1/(sqrt(2)+2) */
#define IRAC2 0.70710678 /* 1/sqrt(2) */
#define RAC8P4 6.8284271 /* sqrt(8)+4 */
#define RADIANS_TO_DEGREES (180.0/M_PI)
#define PI 3.14159
#define COEFF_YR 0.299
#define COEFF_YG 0.587
#define COEFF_YB 0.114
///////////////////////////////////////////////////////////////// Errors
void wxwarning(const char * message,const char *function, const char *file);
void wxerror(const char * message, const char *function, const char *file);
///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked mathematical functions
double fsqr(double a);
void fill_exp_lut(float *lut,int size); /* Fills exp(x) for x great or equal than zero*/
float slut(float dif,float *lut); /* We look for f(dif) in the lut*/
///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked mxsignal functions
float max(float *u,int *pos, int size); /// Max(u), pos contains the index of the maximum
float min(float *u,int *pos, int size); /// Min(u), pos contains the index of the minimum
void max_u_v(float *u,float *v,int size);
void max_u_k(float *u,float k,int size);
void min_u_v(float *u,float *v,int size);
void min_u_k(float *u,float k,int size);
void abs(float *u,float *v,int size); /// v = abs(u)
void copy(float *u,float *v,int size); /// v = u
void clear(float *u, float value ,int size); /// u = k
void combine(float *u,float a,float *v,float b, float *w, int size); /// w = a*u + b*v
void multiple(float *u,float multiplier,int size); /// u = K * u
float scalar_product(float *u, float *v, int n);
// float lpdist(float *u,float *v,float *mask,int pow,int size);
// float lpnorm(float *u,int fpow,int size);
float mean(float *u,int size);
float var(float *u,int size);
float median(float *u,int size);
float nearest(float *u,float value,int *pos,int size); /// Returns the nearest value in the vector u and its position if selected
void binarize(float *u, float *v,float value, int inverse, int size); /// v = 255 if u > value 0 else
int normalize(float *u,int size); /// u = u / sum_i u(i). Returns 0 if mxsignal sum equals zero
float * gauss(int sflag,float std,int *size); /// Create a 1d gauss kernel of standard deviation std
// void addnoise(float *u,float *v,float std,long int randinit, int size);
// void addnoise_var_afine(float *u,float *v,float a,float b,long int randinit, int size);
void quick_sort(float *arr,float *brr,int n); /// Quicksort
/// histogram of values. 'n' (number of bins) or 's' (step) must be selected in flag while the other value is filled
float * histo ( float* input, float *iminim, float *imaxim, int *n, float *s, int size, char flag );
///////////////////////////////////////////////////////////////////////////////////////////////////// Used and checked image functions
void compute_gradient_orientation(float* igray,float *grad, float *ori, int width, int height);
// void extract ( float *igray,float *ogray, int ax, int ay,int cwidth, int cweight,int width, int height );
void sample ( float *igray,float *ogray, float factor ,int width, int height);
void sample_aglomeration(float *igray,float *ogray, float factor, int width, int height);
void gray ( float *red, float *green,float *blue, float *out, int width, int height );
/*
float l2_distance ( float * u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height);
float l2_distance_non_normalized(float *u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width,int height);
float weighted_l2_distance ( float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float * kernel,int radius );
float l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int xradius, int yradius,int width,int height);
float weighted_l2_distance_nsq(float *u0,float *u1,int i0,int j0,int i1,int j1,int width,int height,float *kernel,int xradius, int yradius);
*/
void rgb2yuv ( float *r,float *g,float *b,float *y,float *u,float *v,int width,int height );
void yuv2rgb ( float *r,float *g,float *b,float *y,float *u,float *v,int width,int height );
void rgb2yuv(float *r,float *g,float *b,float *y,float *u,float *v,float yR, float yG, float yB, int width,int height);
void yuv2rgb(float *r,float *g,float *b,float *y,float *u,float *v,float yR, float yG, float yB, int width,int height);
void draw_line(float *igray, int a0, int b0, int a1, int b1, float value, int width, int height);
// void draw_circle(float *igray, int pi,int pj,float radius, float value, int width, int height);
void draw_square(float *igray, int a0, int b0, int w0, int h0, float value, int width, int height);
#endif // _LIBRARY_H_
/////////////////////////////////////// Not often used and not checked
//
//
/*
*/
//void md_fsig_absdif(float *u,float *v,int size); /// v = abs(v-u)
//void md_fsig_sign(float *u,float *v, int size); //// ¿¿¿¿¿ ?????
//int md_fsig_is_increasing(float *u,float tolerance, int size); ///// ¿¿¿¿¿ ?????
//void md_fsig_multiple(float *u,float multiplier,int size); // u = K * u
//void md_fsig_product(float *u,float *v,int size); // u = u * v
//void md_fsig_offset(float *u,float offset, int size); // u = u - K
//
//
//void md_fsig_threshold(float *u, float *v,float valuem,float valueM, int size); // threshold into (m,M)
//--- Conversion ---
//void md_fsig_float2char(float min, float max, float *u, float *v, int size); // Linear Conversion between (min,max) and (0,255)
//void md_fsig_addnoise(float *u,float *v,float std,long int randinit, int size); // Add gaussian noise of standard deviation sigma
// v quantified mxmximage u with interval length lambda
// if u \in ( (n - 1/2) l, (n + 1/2 ) l ) - > v = n l
// n= 0 -> (-1/2 * l, 1/2 * l) //
//void md_fsig_quant(float *u, float *v, float lambda, int size);
// v is projected to the space of quantizations of length lambda that gives u
//void md_fsig_projectquant(float *u,float *v,float lambda, int size);