public void doErosion() { Image img = canvas.getImgRecon(); Image tempImg = new Image(img.getWidth(), img.getHeight(), BufferedImage.TYPE_BYTE_GRAY); WritableRaster cRaster = tempImg.getRaster(); if (img != null) { WritableRaster raster = img.getRaster(); int h = img.getHeight(); int w = img.getWidth(); for (int i = 0; i < w; i++) { for (int j = 0; j < h; j++) { cRaster.setSample(i,j,0,this.getMin(i,j,w,h,raster)); } } this.canvas.imgRecon = tempImg; } } public int getMin(int i, int j, int w, int h, WritableRaster raster) { int x,y; int ero = Integer.MAX_VALUE; for (int k = -1; k < 2; k++) { for (int l = -1; l < 2; l++) { x = i + k; y = j + l; if (!(x >= 0 && x < w)) { x = i - k; } if (!(y >= 0 && y < h)) { y = j - l; } ero = Math.min(ero, raster.getSample(x,y,0)); } } return ero; }