Changeset 2715
- Timestamp:
- Aug 14, 2008, 8:34:44 PM (14 years ago)
- Location:
- libpipi/trunk
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
libpipi/trunk/examples/edd.c
r2666 r2715 62 62 63 63 /* Compute the fast error */ 64 tmp = pipi_gaussian_blur_ext(dither, sigma, sigma, 0. 16, 0.26);64 tmp = pipi_gaussian_blur_ext(dither, sigma, sigma, 0.0, 0.16, 0.26); 65 65 e1 = pipi_measure_msd(gauss, tmp); 66 66 pipi_free(tmp); … … 72 72 for(dx = 0; dx <= Z; dx++) 73 73 { 74 tmp = pipi_gaussian_blur_ext(dither, sigma, sigma, 74 tmp = pipi_gaussian_blur_ext(dither, sigma, sigma, 0.0, 75 75 fx + step * dx / Z, 76 76 fy + step * dy / Z); -
libpipi/trunk/pipi/context.c
r2713 r2715 119 119 char const *arg; 120 120 va_list ap; 121 double w, h ;121 double w, h, a = 0.0; 122 122 123 123 if(ctx->nimages < 1) … … 129 129 arg = strchr(arg, 'x'); 130 130 if(arg) 131 { 131 132 h = atof(arg + 1); 133 arg = strchr(arg, 'r'); 134 if(arg) 135 a = atof(arg + 1); 136 } 132 137 src = ctx->images[ctx->nimages - 1]; 133 dst = pipi_gaussian_blur_ext(src, w, h, 0.0, 0.0);138 dst = pipi_gaussian_blur_ext(src, w, h, a, 0.0, 0.0); 134 139 if(dst == NULL) 135 140 return -1; -
libpipi/trunk/pipi/filter/blur.c
r2681 r2715 35 35 pipi_image_t *pipi_gaussian_blur(pipi_image_t *src, float radius) 36 36 { 37 return pipi_gaussian_blur_ext(src, radius, radius, 0.0, 0.0 );37 return pipi_gaussian_blur_ext(src, radius, radius, 0.0, 0.0, 0.0); 38 38 } 39 39 40 40 pipi_image_t *pipi_gaussian_blur_ext(pipi_image_t *src, float rx, float ry, 41 float dx, float dy)41 float angle, float dx, float dy) 42 42 { 43 43 pipi_image_t *ret; 44 44 double *kernel; 45 double Kx, Ky, t = 0.0 ;45 double Kx, Ky, t = 0.0, sint, cost, bbx, bby; 46 46 int i, j, krx, kry, m, n; 47 47 … … 49 49 if(ry < BLUR_EPSILON) ry = BLUR_EPSILON; 50 50 51 sint = sin(angle * M_PI / 180.); 52 cost = cos(angle * M_PI / 180.); 53 54 /* Compute the final ellipse's bounding box */ 55 bbx = sqrt(rx * rx * cost * cost + ry * ry * sint * sint); 56 bby = sqrt(ry * ry * cost * cost + rx * rx * sint * sint); 57 51 58 /* FIXME: the kernel becomes far too big with large values of dx, because 52 59 * we grow both left and right. Fix the growing direction. */ 53 krx = (int)(3. * rx + .99999 + ceil(abs(dx)));60 krx = (int)(3. * bbx + .99999 + ceil(abs(dx))); 54 61 m = 2 * krx + 1; 55 62 Kx = -1. / (2. * rx * rx); 56 63 57 kry = (int)(3. * ry + .99999 + ceil(abs(dy)));64 kry = (int)(3. * bby + .99999 + ceil(abs(dy))); 58 65 n = 2 * kry + 1; 59 66 Ky = -1. / (2. * ry * ry); … … 63 70 for(j = -kry; j <= kry; j++) 64 71 { 65 double ey = Ky * ((double)j + dy) * ((double)j + dy);66 67 72 for(i = -krx; i <= krx; i++) 68 73 { 69 double ex = Kx * ((double)i + dx) * ((double)i + dx); 74 double u = (double)i * cost - (double)j * sint + dx; 75 double v = (double)j * cost + (double)i * sint + dy; 76 double ex = Kx * u * u; 77 double ey = Ky * v * v; 70 78 double d = exp(ex + ey); 71 79 -
libpipi/trunk/pipi/pipi.h
r2711 r2715 100 100 extern pipi_image_t *pipi_gaussian_blur(pipi_image_t *, float); 101 101 extern pipi_image_t *pipi_gaussian_blur_ext(pipi_image_t *, 102 float, float, float, float );102 float, float, float, float, float); 103 103 extern pipi_image_t *pipi_box_blur(pipi_image_t *, int); 104 104 extern pipi_image_t *pipi_box_blur_ext(pipi_image_t *, int, int);
Note: See TracChangeset
for help on using the changeset viewer.