Circle.java

package ac.essex.ooechs.imaging.commons.texture; 
 
import ac.essex.ooechs.imaging.commons.PixelLoader; 
import ac.essex.ooechs.imaging.commons.StatisticsSolver; 
import ac.essex.ooechs.imaging.commons.fast.FastStatistics; 
import ac.essex.ooechs.imaging.commons.util.Pythag; 
 
/** 
 * Gets the sum intensity of a circular area around a pixel. That area is defined by a radius 
 * which may be supplied to the constructor. 
 */ 
public class Circle implements AbstractShape { 
 
    protected boolean mask[][]; 
    protected int maskWidth, maskHeight; 
    protected int radius; 
 
    public Circle(int radius) { 
        maskWidth = (radius * 2) + 1; 
        maskHeight = (radius * 2) + 1; 
        mask = new boolean[maskWidth][maskHeight]; 
        for (int y = 0; y < maskHeight; y++) { 
            for (int x = 0; x < maskWidth; x++) { 
                mask[x][y] = Pythag.distance(x - radius, y - radius) <= radius; 
                //System.out.print(mask[x][y] ? "x " : "- "); 
            } 
            //System.out.println(); 
        } 
    } 
 
    public int getSum(PixelLoader image, int x, int y) { 
 
        int sum = 0; 
 
        for (int dy = 0; dy < maskHeight; dy++) { 
 
            int ny = y + (dy - radius); 
 
            for (int dx = 0; dx < maskWidth; dx++) { 
 
                int nx = x + (dx - radius); 
 
                try { 
                    if (mask[dx][dy]) { 
                        sum += image.getGreyValue(nx, ny); 
                    } 
                } catch (Exception e) { 
                } 
 
            } 
        } 
 
        return sum; 
 
    } 
 
    public FastStatistics getStatistics(PixelLoader image, int x, int y) { 
 
        FastStatistics solver = new FastStatistics(); 
 
        for (int dy = 0; dy < maskHeight; dy++) { 
 
            int ny = y + (dy - radius); 
 
            for (int dx = 0; dx < maskWidth; dx++) { 
 
                int nx = x + (dx - radius); 
 
                try { 
                    if (mask[dx][dy]) { 
                        solver.addData(image.getGreyValue(nx, ny)); 
                    } 
                } catch (Exception e) { 
                } 
 
            } 
        } 
 
        return solver; 
 
    }     
 
 
}