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;
}
}