輸入いる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に)) 。 } } } 出力を返します。 } }
Javaツールの画像ノイズ
おすすめ
転載: www.cnblogs.com/dgwblog/p/12514836.html
おすすめ
ランキング