X-Git-Url: http://git.cinelerra-gg.org/git/?a=blobdiff_plain;f=cinelerra-5.0%2Fdb%2Futils%2Fhisteq.C;fp=cinelerra-5.0%2Fdb%2Futils%2Fhisteq.C;h=0000000000000000000000000000000000000000;hb=30bdb85eb33a8ee7ba675038a86c6be59c43d7bd;hp=73916b8652225b33a744ac0e565721d2dc833437;hpb=52fcc46226f9df46f9ce9d0566dc568455a7db0b;p=goodguy%2Fhistory.git diff --git a/cinelerra-5.0/db/utils/histeq.C b/cinelerra-5.0/db/utils/histeq.C deleted file mode 100644 index 73916b86..00000000 --- a/cinelerra-5.0/db/utils/histeq.C +++ /dev/null @@ -1,104 +0,0 @@ -#include -#include -#include -#include -#include -#include "../guicast/linklist.h" - - - -class HistEq { - void fit(int *dat, int n, double &a, double &b); -public: - void eq(unsigned char *dp, int len); - HistEq() {} - ~HistEq() {} -}; - -double mean(uint8_t *dat, int n) -{ - int s = 0; - for( int i=0; imx ? mx : v; -} - -void HistEq:: -fit(int *dat, int n, double &a, double &b) -{ - double st2 = 0, sb = 0; - int64_t sy = 0; - for( int i=0; i=0; ++bp ) ++hist[*bp]; - int t = 0; - for( int i=0; i<256; ++i ) { t += hist[i]; wts[i] = t; } - int lmn = len/20, lmx = len-lmn; - int mn = 0; while( mn < 256 && wts[mn] < lmn ) ++mn; - int mx = 255; while( mx > mn && wts[mx] > lmx ) --mx; - double a, b; - fit(&wts[mn], mx-mn, a, b); - double r = 256./len; - double a1 = (a - b*mn) * r, b1 = b * r; - for( int i=0 ; i<256; ++i ) map[i] = clip(a1 + i*b1, 0, 255); - bp = dp; - for( int i=len; --i>=0; ++bp ) *bp = map[*bp]; -} - - -int main(int ac, char **av) -{ - FILE *ifp = !strcmp(av[1],"-") ? stdin : fopen(av[1],"r"); - FILE *ofp = !strcmp(av[2],"-") ? stdout : fopen(av[2],"w"); - char line[120]; - fgets(line,sizeof(line),ifp); fputs(line,ofp); - fgets(line,sizeof(line),ifp); fputs(line,ofp); - int w, h; if( sscanf(line,"%d %d\n",&w,&h) != 2 ) exit(1); - fgets(line,sizeof(line),ifp); fputs(line,ofp); - int len = w*h; - unsigned char data[len], *bp = data; - for( int ch, i=len; --i>=0 && (ch=getc(ifp)) >= 0; ++bp ) *bp = ch; - HistEq().eq(data,len); - bp = data; - for( int i=len; --i>=0; ++bp ) putc(*bp,ofp); - - if( ifp != stdin ) fclose(ifp); - if( ofp != stdout ) fclose(ofp); - return 0; -} -