1 /* Copyright (C) 2005-2011 Fabio Riccardi */
2 
3 package com.lightcrafts.jai.utils;
4 
5 import com.lightcrafts.mediax.jai.ImageFunction;
6 
7 /**
8  * Created by IntelliJ IDEA.
9  * User: fabio
10  * Date: Jun 2, 2005
11  * Time: 4:58:10 PM
12  * To change this template use File | Settings | File Templates.
13  */
14 
15 public class GaussianImageFunction implements ImageFunction {
16     final double s;
17 
GaussianImageFunction(double s)18     public GaussianImageFunction(double s) {
19         this.s = s;
20     }
21 
gauss(double x, double y, double s)22     static double gauss(double x, double y, double s) {
23         return (1/ (s * s * 2 * Math.PI)) * Math.exp(-(x * x + y * y) / (2 * s * s));
24     }
25 
getElements(double startX, double startY, double deltaX, double deltaY, int countX, int countY, int element, double[] real, double[] imag)26     public void getElements(double startX, double startY,
27                             double deltaX, double deltaY,
28                             int countX, int countY,
29                             int element, double[] real, double[] imag) {
30         for (int i = 0; i < countX; i++) {
31             double x = startX + deltaX * i;
32             for (int j = 0; j < countY; j++) {
33                 double y = startY + deltaY * j;
34 
35                 real[i + countX * j] = (float) gauss(x, y, s);
36             }
37         }
38     }
39 
getElements(float startX, float startY, float deltaX, float deltaY, int countX, int countY, int element, float[] real, float[] imag)40     public void getElements(float startX, float startY,
41                             float deltaX, float deltaY,
42                             int countX, int countY,
43                             int element, float[] real, float[] imag) {
44         for (int i = 0; i < countX; i++) {
45             double x = startX + deltaX * i;
46             for (int j = 0; j < countY; j++) {
47                 double y = startY + deltaY * j;
48 
49                 real[i + countX * j] = (float) gauss(x, y, s);
50             }
51         }
52     }
53 
getNumElements()54     public int getNumElements() {
55         return 1;
56     }
57 
isComplex()58     public boolean isComplex() {
59         return false;
60     }
61 }
62