public Channel smoothWrap(int radius) {
radius = Math.Max(1, radius);
Channel filter = new Channel(width, height);
float factor = 1f/((2*radius + 1)*(2*radius + 1));
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++) {
filter.putPixel(x, y, factor*getPixel(x, y));
}
}
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
float sum = 0f;
for (int i = -radius; i < radius + 1; i++) {
for (int j = -radius; j < radius + 1; j++) {
sum += filter.getPixelWrap(x + j, y + i);
}
}
putPixel(x, y, sum);
}
}
return this;
}