Frage

Also habe ich versucht, einen Gaußschen Filter auf ein Bild anzuwenden, das ich mit Java habe. Das Bild wird jedoch überhaupt nicht vom Filter bewirkt. Ich benutze den eingebauten Faltungsoperator. Könnte mir jemand einen Punkt für mich zeigen, was schief geht?

public static void main(String[] args) {
  File img = new File( "C:\\Users\\Aditya\\Pictures\\20130729_140153.jpg" );
  BufferedImage a = null;
  try{ 
      a= ImageIO.read( img );
  }
  catch( Exception e ){
      System.out.print( e.toString() );
      return;
  }
  BufferedImage a9 = new BufferedImage( a.getWidth() , a.getHeight() , a.getType() ); 
  float[] matrix = {
    1f/273,4f/273,7f/273,4f/273,1f/273,
    4f/273,16f/273,26f/273,16f/273,4f/273,
    7f/273,26f/273,41f/273,26f/273,7f/273,
    4f/273,16f/273,26f/273,16f/273,4f/273,
    1f/273,4f/273,7f/273,4f/273,1f/273
    };
    BufferedImageOp op = new ConvolveOp( new Kernel( 5, 5, matrix ) );
    a9 = op.filter( a, a9 );
    try{
        ImageIO.write( a9 , "jpg" ,new File( "C:\\Users\\Aditya\\Pictures\\jim.jpg" ));
    }catch( Exception e ){
        System.out.println( e );
    }
    }
}

Ich meine, ich meine nicht, dass es überhaupt keinen Unterschied in den Bildern von A und A9 gibt. Es ist, als wären sie kopiert worden!

War es hilfreich?

Lösung

An Ihrem Code ist nichts auszusetzen, ich habe ihn ausgeführt und sehe eine leichte Unschärfe im Ausgabebild. Wenn Sie einen ausgeprägteren Effekt sehen möchten, ändern Sie ihn beispielsweise in einen Kantenerkennungskern, indem Sie verwenden

    float[] matrix = {
             1,  0, -1,
             0,  0,  0,
            -1,  0,  1
    };
    BufferedImageOp op = new ConvolveOp(new Kernel(3, 3, matrix));
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top