MAKE A MEME View Large Image Antialiased lanczos.png This one should be relatively close to an ideal filter primarily because I used a lot of taps several million for the more problematic pixels Here's the source I used written by myself The choice of 16384x16384 might ...
View Original:Antialiased lanczos.png (128x128)
Download: Original    Medium    Small Thumb
Courtesy of:commons.wikimedia.org More Like This
Keywords: Antialiased lanczos.png This one should be relatively close to an ideal filter primarily because I used a lot of taps several million for the more problematic pixels Here's the source I used written by myself The choice of 16384x16384 might have been overkill; I cannot spot any significant differences between this and using 1024x1024 taps all over the image The generation took about an hour on one core of an Intel Q9450 Compile and link with gcc -O3 -o antialias antialias c -lm -std gnu99 <tt> include <stdio h> include <stdlib h> include <math h> / Do a finer sampling the higher up we get in the picture since there's much more detail there / define SAMPLES_FROM_Y y 16384 512 / y y + 512 define MAX_SAMPLES SAMPLES_FROM_Y 0 float weightsMAX_SAMPLESMAX_SAMPLES; static inline int color double x double y double t z; int i j k; x x 1 0 / 128 0 - 0 5; y y 1 0 / 2048 0 ; t 1 0 / y + 0 001 ; z t x; i floor t ; j floor z ; k i + j; return k 2 0 ; static double sinc double x static const double cutoff 1 220703668e-4; / sqrt sqrt eps / if abs x < cutoff / For small x use Taylor series instead / const double x2 x x; const double x4 x2 x2; return 1 0 - x2 / 6 0 + x4 / 120 0; else return sin x / x; static double lanczos_tap double x if x < -3 0 x > 3 0 return 0 0; if x < 0 0 return sinc -x M_PI sinc -x M_PI / 3 0 ; else return sinc x M_PI sinc x M_PI / 3 0 ; static void precalculate_weights unsigned num_samples double total 0 0; for int yi 0; yi < num_samples; ++yi double sy 6 0 double yi / num_samples - 0 5 ; double wy lanczos_tap sy ; for int xi 0; xi < num_samples; ++xi double sx 6 0 double xi / num_samples - 0 5 ; weightsyixi wy lanczos_tap sx ; total + weightsyixi; double inv_total 1 0 / total; for int yi 0; yi < num_samples; ++yi for int xi 0; xi < num_samples; ++xi weightsyixi inv_total; static double antialiased_color double x double y unsigned num_samples double acc 0 0; double delta 6 0 / num_samples; int xi yi; double sx sy; for yi 0 sy y - 3 0; yi < num_samples; ++yi sy + delta for xi 0 sx x - 3 0; xi < num_samples; ++xi sx + delta if color sx sy acc + weightsyixi; return acc; </tt> Transferred from http //en wikipedia org en wikipedia; transferred to Commons by User Surena using http //tools wikimedia de/~magnus/commonshelper php CommonsHelper 2008-12-23 Original uploader was Sesse at http //en wikipedia org en wikipedia Later version s were uploaded by Ancient Anomaly Technion Dicklyon at http //en wikipedia org en wikipedia Released into the public domain by the author Objection The automatic move did not keep the old versions about which there is still some disagreement And it completely mangled the code This is not a satisfactory automatic move The name also changed so if the version in en in deleted the image links will break What's up with that Dicklyon <span class signature-talk >talk</span> 16 49 19 March 2011 UTC en wikipedia Sesse Original upload log This one should be relatively close to an ideal filter primarily because I used a lot of taps several million for the more</nowiki> Anti-aliasing
Terms of Use   Search of the Day