Javaツールの画像ノイズ

輸入いるjava.awt.image *。;
  
  
パブリッククラスノイズフィルタリングは、フィルタ{延びている
      
      
    のpublic static final int型インパルス = 0       
    public static final int型のGAUSSIAN = 1 ;
      
    INTノイズタイププロテクト =インパルス      
    保護されたダブルSTDDEV = 10.0 ;
      
    保護されたダブルimpulseRatio = 0.05 ;
      
      
    パブリックノイズフィルタ(){ 
    } 
      
      
    パブリックノイズフィルタ(ノイズint型){ 
        setNoiseType(ノイズタイプ)    } 
      
      
    パブリックノイズフィルタ(int型のノイズ二重パラメータ){
        setNoiseType(noiseType)           
        (noiseType場合 == IMPULSE)setImpulseRatio(パラメータ);
        (noiseType == GAUSSIAN)setGaussianStdDev(パラメータ)であれば    } 
      
      
    公共ボイドsetNoiseType(INT noiseType){ 
        this.noiseType = noiseType     } 
      
      
    公共INT getNoiseType(){ 
        noiseTypeを返します    } 
      
      
    公共ボイドsetGaussianStdDev(ダブルSTDDEV){ 
        this.stdDev = STDDEV     } 
      
      
    公共ダブルgetGaussianStdDev(){ 
        STDDEVを返します    } 
      
    公共ボイドsetImpulseRatio(ダブルimpulseRatio){ 
        this.impulseRatio = impulseRatio     } 
      
    公共ダブルgetImpulseRatio(){ 
        リターンimpulseRatio     } 
      
    パブリックjava.awt.image.BufferedImageフィルタ(バッファ画像イメージバッファ画像出力){ 
        出力 = verifyOutput(出力画像)          
        スイッチ(noiseType){ 
            デフォルト:
            ケースIMPULSE:戻りimpulseNoise(画像出力)            ケースGAUSSIAN:リターンgaussianNoise(画像出力)        } 
    }
      
      
    保護されたBufferedImage impulseNoise(BufferedImageの画像バッファ画像出力){ 
        output.setData(image.getData())           
        ラスタソース = image.getRaster()         たWritableRasterアウト= output.getRaster()           
        ダブルランド;
        二重halfImpulseRatio = impulseRatio / 2.0         INTバンド= out.getNumBands()         INT幅= image.getWidth()   //幅画像の 
        INT高さ= image.getHeight() 画像の//高 
        java.util.RandomのrandGen =新しいjava.util.Randomの()           
        以下のための(int型J = 0 ; J <高さ、J ++){ 
            ため(INT iが= 0 ; I <幅; I ++){ 
                ランド= randGen.nextDouble()                 もし(RAND <halfImpulseRatio){ 
                    ため(INT B = 0 B <バンド、B ++)out.setSample(I、J、B、0); 
                }そうであれば{(RAND <impulseRatio)
                    のための(int型、B = 0 B <バンド、B ++)out.setSample(I、J、B、255)。
                } 
            } 
        } 
          
        出力を返します    } 
      
      
    保護されたBufferedImage gaussianNoise(バッファ画像イメージバッファ画像出力){
        ラスタソース = image.getRaster()         たWritableRasterアウト= output.getRaster()           
        int型CURRVAL ;                     //現在の値 
        をダブルnewValに                  //新しい「うるさい」値 
        をダブルガウス                //ガウス番号 
        INTバンド= out.getNumBands() //バンドの数 
        INT幅= image.getWidth()   //幅画像の 
        INT高さ= image.getHeight() 画像の//高 
        java.util.RandomのrandGen =新しいjava.util.Randomの()           
        (INT Jため = 0 ; J <高さ、J ++){ 
            ためには、(INT iは0 = ; I <幅; I ++){ 
                ガウシアン= randGen.nextGaussian()                   
                (INT Bに対する = 0 B <バンド、B ++){ 
                    newValに= STDDEV *ガウス                    CURRVAL = source.getSample(I、J、B)                     newValに= newValに+ CURRVAL                     IF(newValに<0)newValに= 0.0                     もし(newValに> 255)newValに= 255.0 ;
                      
                    out.setSample(I、J、B、(INT)(newValに))                 } 
            } 
        } 
          
        出力を返します    } 
}

おすすめ

転載: www.cnblogs.com/dgwblog/p/12514836.html