From 3214c51acb3346815ccd5e33f4114f232879e1a8 Mon Sep 17 00:00:00 2001 From: Lars-Dominik Braun Date: Sat, 28 Feb 2015 15:07:18 +0100 Subject: Drop temporal filter/passes --- filters.c | 301 -------------------------------------------------------------- 1 file changed, 301 deletions(-) delete mode 100644 filters.c (limited to 'filters.c') diff --git a/filters.c b/filters.c deleted file mode 100644 index 29ecb22..0000000 --- a/filters.c +++ /dev/null @@ -1,301 +0,0 @@ -/* - FLAM3 - cosmic recursive fractal flames - Copyright (C) 1992-2009 Spotworks LLC - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -#include - -#include "filters.h" - - -/* - * filter function definitions - * from Graphics Gems III code - * and ImageMagick resize.c - */ - - -double flam3_spatial_support[flam3_num_spatialfilters] = { - - 1.5, /* gaussian */ - 1.0, /* hermite */ - 0.5, /* box */ - 1.0, /* triangle */ - 1.5, /* bell */ - 2.0, /* b spline */ - 2.0, /* mitchell */ - 1.0, /* blackman */ - 2.0, /* catrom */ - 1.0, /* hanning */ - 1.0, /* hamming */ - 3.0, /* lanczos3 */ - 2.0, /* lanczos2 */ - 1.5 /* quadratic */ -}; - -double flam3_hermite_filter(double t) { - /* f(t) = 2|t|^3 - 3|t|^2 + 1, -1 <= t <= 1 */ - if(t < 0.0) t = -t; - if(t < 1.0) return((2.0 * t - 3.0) * t * t + 1.0); - return(0.0); -} - -double flam3_box_filter(double t) { - if((t > -0.5) && (t <= 0.5)) return(1.0); - return(0.0); -} - -double flam3_triangle_filter(double t) { - if(t < 0.0) t = -t; - if(t < 1.0) return(1.0 - t); - return(0.0); -} - -double flam3_bell_filter(double t) { - /* box (*) box (*) box */ - if(t < 0) t = -t; - if(t < .5) return(.75 - (t * t)); - if(t < 1.5) { - t = (t - 1.5); - return(.5 * (t * t)); - } - return(0.0); -} - -double flam3_b_spline_filter(double t) { - - /* box (*) box (*) box (*) box */ - double tt; - - if(t < 0) t = -t; - if(t < 1) { - tt = t * t; - return((.5 * tt * t) - tt + (2.0 / 3.0)); - } else if(t < 2) { - t = 2 - t; - return((1.0 / 6.0) * (t * t * t)); - } - return(0.0); -} - -double flam3_sinc(double x) { - x *= M_PI; - if(x != 0) return(sin(x) / x); - return(1.0); -} - -double flam3_blackman_filter(double x) { - return(0.42+0.5*cos(M_PI*x)+0.08*cos(2*M_PI*x)); -} - -double flam3_catrom_filter(double x) { - if (x < -2.0) - return(0.0); - if (x < -1.0) - return(0.5*(4.0+x*(8.0+x*(5.0+x)))); - if (x < 0.0) - return(0.5*(2.0+x*x*(-5.0-3.0*x))); - if (x < 1.0) - return(0.5*(2.0+x*x*(-5.0+3.0*x))); - if (x < 2.0) - return(0.5*(4.0+x*(-8.0+x*(5.0-x)))); - return(0.0); -} - -double flam3_mitchell_filter(double t) { - double tt; - - tt = t * t; - if(t < 0) t = -t; - if(t < 1.0) { - t = (((12.0 - 9.0 * flam3_mitchell_b - 6.0 * flam3_mitchell_c) * (t * tt)) - + ((-18.0 + 12.0 * flam3_mitchell_b + 6.0 * flam3_mitchell_c) * tt) - + (6.0 - 2 * flam3_mitchell_b)); - return(t / 6.0); - } else if(t < 2.0) { - t = (((-1.0 * flam3_mitchell_b - 6.0 * flam3_mitchell_c) * (t * tt)) - + ((6.0 * flam3_mitchell_b + 30.0 * flam3_mitchell_c) * tt) - + ((-12.0 * flam3_mitchell_b - 48.0 * flam3_mitchell_c) * t) - + (8.0 * flam3_mitchell_b + 24 * flam3_mitchell_c)); - return(t / 6.0); - } - return(0.0); -} - -double flam3_hanning_filter(double x) { - return(0.5+0.5*cos(M_PI*x)); -} - -double flam3_hamming_filter(double x) { - return(0.54+0.46*cos(M_PI*x)); -} - -double flam3_lanczos3_filter(double t) { - if(t < 0) t = -t; - if(t < 3.0) return(flam3_sinc(t) * flam3_sinc(t/3.0)); - return(0.0); -} - -double flam3_lanczos2_filter(double t) { - if(t < 0) t = -t; - if(t < 2.0) return(flam3_sinc(t) * flam3_sinc(t/2.0)); - return(0.0); -} - -double flam3_gaussian_filter(double x) { - return(exp((-2.0*x*x))*sqrt(2.0/M_PI)); -} - -double flam3_quadratic_filter(double x) { - if (x < -1.5) - return(0.0); - if (x < -0.5) - return(0.5*(x+1.5)*(x+1.5)); - if (x < 0.5) - return(0.75-x*x); - if (x < 1.5) - return(0.5*(x-1.5)*(x-1.5)); - return(0.0); -} - -double flam3_spatial_filter(int knum, double x) { - - if (knum==0) - return flam3_gaussian_filter(x); - else if (knum==1) - return flam3_hermite_filter(x); - else if (knum==2) - return flam3_box_filter(x); - else if (knum==3) - return flam3_triangle_filter(x); - else if (knum==4) - return flam3_bell_filter(x); - else if (knum==5) - return flam3_b_spline_filter(x); - else if (knum==6) - return flam3_mitchell_filter(x); - else if (knum==7) - return flam3_sinc(x)*flam3_blackman_filter(x); - else if (knum==8) - return flam3_catrom_filter(x); - else if (knum==9) - return flam3_sinc(x)*flam3_hanning_filter(x); - else if (knum==10) - return flam3_sinc(x)*flam3_hamming_filter(x); - else if (knum==11) - return flam3_lanczos3_filter(x)*flam3_sinc(x/3.0); - else if (knum==12) - return flam3_lanczos2_filter(x)*flam3_sinc(x/2.0); - else if (knum==13) - return flam3_quadratic_filter(x); - assert (0); -} - -int normalize_vector(double *v, int n) { - double t = 0.0; - int i; - for (i = 0; i < n; i++) - t += v[i]; - if (0.0 == t) return 1; - t = 1.0 / t; - for (i = 0; i < n; i++) - v[i] *= t; - return 0; -} - -double flam3_create_temporal_filter(int numsteps, int filter_type, double filter_exp, double filter_width, - double **temporal_filter, double **temporal_deltas) { - - double maxfilt = 0.0; - double sumfilt = 0.0; - double slpx,halfsteps; - double *deltas, *filter; - - int i; - - /* Allocate memory - this must be freed in the calling routine! */ - deltas = (double *)malloc(numsteps*sizeof(double)); - filter = (double *)malloc(numsteps*sizeof(double)); - - /* Deal with only one step */ - if (numsteps==1) { - deltas[0] = 0; - filter[0] = 1.0; - *temporal_deltas = deltas; - *temporal_filter = filter; - return(1.0); - } - - /* Define the temporal deltas */ - for (i = 0; i < numsteps; i++) - deltas[i] = ((double)i /(double)(numsteps - 1) - 0.5)*filter_width; - - /* Define the filter coefs */ - if (flam3_temporal_exp == filter_type) { - - for (i=0; i < numsteps; i++) { - - if (filter_exp>=0) - slpx = ((double)i+1.0)/numsteps; - else - slpx = (double)(numsteps - i)/numsteps; - - /* Scale the color based on these values */ - filter[i] = pow(slpx,fabs(filter_exp)); - - /* Keep the max */ - if (filter[i]>maxfilt) - maxfilt = filter[i]; - } - - } else if (flam3_temporal_gaussian == filter_type) { - - halfsteps = numsteps/2.0; - for (i=0; i < numsteps; i++) { - - /* Gaussian */ - filter[i] = flam3_spatial_filter(flam3_gaussian_kernel, - flam3_spatial_support[flam3_gaussian_kernel]*fabs(i - halfsteps)/halfsteps); - /* Keep the max */ - if (filter[i]>maxfilt) - maxfilt = filter[i]; - } - - } else { // (flam3_temporal_box) - - for (i=0; i < numsteps; i++) - filter[i] = 1.0; - - maxfilt = 1.0; - - } - - /* Adjust the filter so that the max is 1.0, and */ - /* calculate the K2 scaling factor */ - for (i=0;i