-
Notifications
You must be signed in to change notification settings - Fork 0
/
extra.cpp
33 lines (31 loc) · 1015 Bytes
/
extra.cpp
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
#include "extra.h"
// creates the gaussian filter patch needed for patchCube
// credits to @chqrlie on stackoverflow. Link: https://stackoverflow.com/a/54615770/14868344
float * gaussianPatch(const int size, const float sigma){
float *gauss = (float*)malloc(size*size*(sizeof(float)));
float sum = 0;
float max = 0;
int i, j;
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
float x = i - (size - 1) / 2.0;
float y = j - (size - 1) / 2.0;
gauss[i*size + j] = exp(((pow(x, 2) + pow(y, 2)) / ((2 * pow(sigma, 2)))) * (-1));
sum += gauss[i*size + j];
}
}
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
gauss[i*size + j] /= sum;
if(gauss[i*size + j]>max){
max=gauss[i*size + j];
}
}
}
for (i = 0; i < size; i++) {
for (j = 0; j < size; j++) {
gauss[i*size + j] /= max;
}
}
return gauss;
}