diff options
-rw-r--r-- | roots.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
@@ -4,6 +4,7 @@ #include <tuple> #include <functional> #include <thread> +#include <algorithm> #include <cstring> #include <cmath> #include <cstdint> @@ -316,9 +317,10 @@ tuple<int*,int,int> readData(const char *fname){ inline double interpCurve(double x){ // return atan(30*x); - return pow(x,1.0/2); + // return pow(x,1.0/2); // return sqrt(log(18*pow(x,0.7)+1)); // return x; + return log(x+1); } inline double interp(double x,double clip){ @@ -328,12 +330,22 @@ inline double interp(double x,double clip){ void buildImage(unsigned char *image,const int *tally,int width,int height){ int maxval=0; for(int i=0;i<width*height;i++){ - maxval=max(maxval,(int)tally[i]); + maxval=max(maxval,tally[i]); } + + int cumul[maxval+1]; + memset(cumul,0,(maxval+1)*sizeof(int)); + for(int i=0;i<width*height;i++){ + cumul[tally[i]]++; + } + for(int i=1;i<maxval+1;i++){ + cumul[i]+=cumul[i-1]; + } + assert(cumul[maxval]==width*height); + for(int i=0;i<width*height;i++){ - // image[3*i+0]=interp((double)min(tally[i],300)/300,0.4)*255; - image[3*i+0]=interp((double)min(tally[i],40)/40,0.4)*255; - // image[3*i+0]=interp((double)tally[i],0.4)*255; + // image[3*i+0]=interp((double)min(tally[i],capval)/capval,0.4)*255; + image[3*i]=pow((double)cumul[tally[i]]/cumul[maxval],2)*255; image[3*i+1]=image[3*i+0]; image[3*i+2]=image[3*i+0]; } |