@Override protected boolean processSquare(GrayF32 square, Result result, double a, double b) { squares.add(square.clone()); return true; } }
private void addNoiseToImage() { imageNoisy = image.clone(); ImageMiscOps.addGaussian(imageNoisy,rand,noiseSigma,0,255); }
@Override protected boolean processSquare(GrayF32 square, Result result, double a , double b) { squares.clear(); squaresGray.clear(); if( super.processSquare(square,result,a,b)) { squares.add(super.getBinaryInner().clone()); squaresGray.add(super.getGrayNoBorder().clone()); return true; } return false; } }
@Override protected boolean processSquare(GrayF32 square, Result result, double a , double b) { if( super.processSquare(square,result,a,b)) { squares.add(super.getBinaryInner().clone()); squaresGray.add(super.getGrayNoBorder().clone()); return true; } return false; } }
public void process( List<TestItem> filters , List<String> images ) { for( String imagePath : images ) { System.out.println("-------------------------------------------------"); System.out.println(imagePath); loadImage(imagePath); addNoiseToImage(); GrayF32 originalImage = image.clone(); GrayF32 imageDenoised = new GrayF32(image.width,image.height); System.out.println(" Noise MSE: "+computeMSE(imageNoisy)); TestItem best = null; double bestScore = Double.MAX_VALUE; for( TestItem i : filters ) { ImageMiscOps.fill(imageDenoised,0); i.filter.process(imageNoisy,imageDenoised); if( ImageStatistics.meanDiffSq(image,originalImage) != 0 ) throw new RuntimeException("Filter modified input image"); double error = computeMSE(imageDenoised); double errorEdge = computeEdgeMSE(imageDenoised); System.out.printf("%30s MSE = %8.3f Edge MSE = %8.3f\n",i.name,error,errorEdge); if( bestScore > error ) { bestScore = error; best = i; } } System.out.println("Best Filter: "+best.name); } }