00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020 #include "libauxiliar.h"
00021 #include "mt19937ar.h"
00022
00023 void fpClear(float *fpI,float fValue, int iLength) {
00024 for (int ii=0; ii < iLength; ii++) fpI[ii] = fValue;
00025 }
00026
00027
00028
00029
00030
00031
00032
00033 void wxFillExpLut(float *lut, int size) {
00034 for (int i=0; i< size; i++) lut[i]= expf( - (float) i / LUTPRECISION);
00035 }
00036
00037
00038
00039
00040 float wxSLUT(float dif, float *lut) {
00041
00042 if (dif >= (float) LUTMAXM1) return 0.0;
00043
00044 int x= (int) floor( (double) dif * (float) LUTPRECISION);
00045
00046 float y1=lut[x];
00047 float y2=lut[x+1];
00048
00049 return y1 + (y2-y1)*(dif*LUTPRECISION - x);
00050 }
00051
00052
00053
00054
00055
00056
00057 float fiL2FloatDist(float *u0,float *u1,int i0,int j0,int i1,int j1,int radius,int width0, int width1) {
00058
00059 float dist=0.0;
00060 for (int s=-radius; s<= radius; s++) {
00061
00062 int l = (j0+s)*width0 + (i0-radius);
00063 float *ptr0 = &u0[l];
00064
00065 l = (j1+s)*width1 + (i1-radius);
00066 float *ptr1 = &u1[l];
00067
00068 for (int r=-radius; r<=radius; r++,ptr0++,ptr1++) {
00069 float dif = (*ptr0 - *ptr1);
00070 dist += (dif*dif);
00071 }
00072
00073 }
00074
00075 return dist;
00076 }
00077
00078
00079
00080
00081 float fiL2FloatDist(float **u0,float **u1,int i0,int j0,int i1,int j1,int radius,int channels, int width0, int width1) {
00082
00083 float dif = 0.0f;
00084
00085
00086 for (int ii=0; ii < channels; ii++) {
00087
00088 dif += fiL2FloatDist(u0[ii],u1[ii],i0,j0,i1,j1,radius,width0, width1);
00089
00090 }
00091
00092
00093 return dif;
00094 }
00095
00096
00097
00098
00099 void fiAddNoise(float *u, float *v, float std, long int randinit, int size) {
00100
00101
00102 mt_init_genrand((unsigned long int) time (NULL) + (unsigned long int) getpid() + (unsigned long int) randinit);
00103
00104 for (int i=0; i< size; i++) {
00105
00106
00107
00108 double a=mt_genrand_res53();
00109 double b=mt_genrand_res53();
00110 double z = (double)(std)*sqrt(-2.0*log(a))*cos(2.0*M_PI*b);
00111
00112 v[i] = u[i] + (float) z;
00113
00114 }
00115
00116 }
00117
00118
00119