private void medianFilter(FImage output, List<List<Pixel>> rays) { if (rays.size() == 0) return; Collections.sort(rays, new Comparator<List<Pixel>>() { @Override public int compare(List<Pixel> o1, List<Pixel> o2) { return o1.size() - o2.size(); } }); final float[] working = new float[rays.get(rays.size() - 1).size()]; for (final List<Pixel> ray : rays) { final int length = ray.size(); for (int i = 0; i < length; i++) { final Pixel pixel = ray.get(i); working[i] = output.pixels[pixel.y][pixel.x]; } final float median = FloatArrayStatsUtils.median(working, 0, length); for (int i = 0; i < length; i++) { final Pixel pixel = ray.get(i); if (output.pixels[pixel.y][pixel.x] > median) output.pixels[pixel.y][pixel.x] = median; } } }
private void medianFilter(FImage output, List<List<Pixel>> rays) { if (rays.size() == 0) return; Collections.sort(rays, new Comparator<List<Pixel>>() { @Override public int compare(List<Pixel> o1, List<Pixel> o2) { return o1.size() - o2.size(); } }); final float[] working = new float[rays.get(rays.size() - 1).size()]; for (final List<Pixel> ray : rays) { final int length = ray.size(); for (int i = 0; i < length; i++) { final Pixel pixel = ray.get(i); working[i] = output.pixels[pixel.y][pixel.x]; } final float median = FloatArrayStatsUtils.median(working, 0, length); for (int i = 0; i < length; i++) { final Pixel pixel = ray.get(i); if (output.pixels[pixel.y][pixel.x] > median) output.pixels[pixel.y][pixel.x] = median; } } }
@Override public void processImage(FImage image) { final float[] tmp = new float[support.size()]; final FImage tmpImage = new FImage(image.width, image.height); for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { int count = 0; for (final Pixel sp : support) { final int xx = x + sp.x; final int yy = y + sp.y; if (xx >= 0 && xx < image.width - 1 && yy >= 0 && yy < image.height - 1) { tmp[count++] = image.pixels[yy][xx]; } } tmpImage.pixels[y][x] = FloatArrayStatsUtils.median(tmp, 0, count); } } image.internalAssign(tmpImage); } }
@Override public void processImage(FImage image) { final float[] tmp = new float[support.size()]; final FImage tmpImage = new FImage(image.width, image.height); for (int y = 0; y < image.height; y++) { for (int x = 0; x < image.width; x++) { int count = 0; for (final Pixel sp : support) { final int xx = x + sp.x; final int yy = y + sp.y; if (xx >= 0 && xx < image.width - 1 && yy >= 0 && yy < image.height - 1) { tmp[count++] = image.pixels[yy][xx]; } } tmpImage.pixels[y][x] = FloatArrayStatsUtils.median(tmp, 0, count); } } image.internalAssign(tmpImage); } }
vec[i] = frameSample.get(i).getBand(b).pixels[y][x]; img.bands.get(b).pixels[y][x] = FloatArrayStatsUtils.median(vec);
vec[i] = frameSample.get(i).getBand(b).pixels[y][x]; img.bands.get(b).pixels[y][x] = FloatArrayStatsUtils.median(vec);