Java tools image noise

import java.awt.image. * ;
  
  
public class noise filtering extends Filter { 
      
      
    public static final int IMPULSE = 0 ;
      
    public static final int GAUSSIAN = 1 ;
      
    protected int noise type = IMPULSE ;
      
    protected double stdDev = 10.0 ;
      
    protected double impulseRatio = 0.05 ;
      
      
    public noise filter () { 
    } 
      
      
    public noise filter (noise int type) { 
        setNoiseType (noise type) ;
    } 
      
      
    Public Noise Filter (int type noise ,  double parameter) {
        setNoiseType (noise type) ;
          
        if (noiseType == IMPULSE) setImpulseRatio(parameter);
        if (noiseType == GAUSSIAN) setGaussianStdDev(parameter);
    }
      
      
    public void setNoiseType(int noiseType) {
        this.noiseType = noiseType;
    }
      
      
    public int getNoiseType() {
        return noiseType;
    }
      
      
    public void setGaussianStdDev(double stdDev) {
        this.stdDev = stdDev;
    }
      
      
    public double getGaussianStdDev() {
        return stdDev;
    }
      
    public void setImpulseRatio(double impulseRatio) {
        this.impulseRatio = impulseRatio;
    }
      
    public double getImpulseRatio() {
        return impulseRatio;
    }
      
    public java.awt.image.BufferedImage filter(BufferedImage image, BufferedImage output) {
        output = verifyOutput(output, image);
          
        switch (noiseType) {
            default:
            case IMPULSE: return impulseNoise(image, output);
            case GAUSSIAN: return gaussianNoise(image, output);
        }
    }
      
      
    protected BufferedImage impulseNoise(BufferedImage image, BufferedImage output) {
        output.setData(image.getData());
          
        Raster source = image.getRaster();
        WritableRaster out = output.getRaster();
          
        double rand;
        double halfImpulseRatio = impulseRatio / 2.0;
        int bands  = out.getNumBands();
        int width  = image.getWidth();  // width of the image
        int height = image.getHeight(); // height of the image
        java.util.Random randGen = new java.util.Random();
          
        for (int j=0; j<height; j++) {
            for (int i=0; i<width; i++) {
                rand = randGen.nextDouble();
                if (rand < halfImpulseRatio) {
                    for (int b=0; b<bands; b++) out.setSample(i, j, b, 0);
                } else if (rand < impulseRatio) {
                    for (int b=0; b<bands; b++) out.setSample(i, j, b, 255);
                }
            }
        }
          
        return output;
    }
      
      
    protected BufferedImage gaussianNoise(BufferedImage image, BufferedImage output) {
        Raster source = image.getRaster();
        WritableRaster out = output.getRaster();
          
        int currVal;                    // the current value
        double newVal;                  // the new "noisy" value
        double gaussian;                // gaussian number
        int bands  = out.getNumBands(); // number of bands
        int width  = image.getWidth();  // width of the image
        int height = image.getHeight(); // height of the image
        java.util.Random randGen = new java.util.Random();
          
        for (int j=0; j<height; j++) {
            for (int i=0; i<width; i++) {
                gaussian = randGen.nextGaussian();
                  
                for (int b=0; b<bands; b++) {
                    newVal = stdDev * gaussian;
                    currVal = source.getSample(i, j, b);
                    newVal = newVal + currVal;
                    if (newVal < 0)   newVal = 0.0;
                    if (newVal > 255) newVal = 255.0;
                      
                    out.setSample(i, j, b, (int)(newVal));
                }
            }
        }
          
        return output;
    }
}

Guess you like

Origin www.cnblogs.com/dgwblog/p/12514836.html