2016-12-05 2 views
0

Wenn ich ihm ein Bild mit Salz und Pfeffer-Rauschen gebe er ein Bild, um alle Details zu verlieren gibt, und ich weiß nicht, was mit meinem Code falsch:Anwenden Mittel Filter auf einem Bild, Java mit

public class Q1 { 
    public static void main(String[] args) throws IOException { 
     BufferedImage img = ImageIO.read(new File("task1input.png")); 

     //get dimensions 
     int maxHeight = img.getHeight(); 
     int maxWidth = img.getWidth(); 

     //create 2D Array for new picture 
     int pictureFile[][] = new int [maxHeight][maxWidth]; 
     for(int i = 0; i < maxHeight; i++){ 
      for(int j = 0; j < maxWidth; j++){ 
       pictureFile[i][j] = img.getRGB(j, i); 
      } 
     } 

     int output [][] = new int [maxHeight][maxWidth]; 

     //Apply Mean Filter 
     for (int v=1; v<maxHeight; v++) { 
      for (int u=1; u<maxWidth; u++) { 
       //compute filter result for position (u,v) 

       int sum = 0; 
       for (int j=-1; j<=1; j++) { 
        for (int i=-1; i<=1; i++) { 
         if((u+(j)>=0 && v+(i)>=0 && u+(j)<maxWidth && v+(i)<maxHeight)){ 
         int p = pictureFile[v+(i)][u+(j)]; 
         sum = sum + p; 
         } 
        } 
       } 

       int q = (int) (sum /9); 
       output[v][u] = q; 
      } 
     } 

     //Turn the 2D array back into an image 
     BufferedImage theImage = new BufferedImage(
      maxHeight, 
      maxWidth, 
      BufferedImage.TYPE_INT_RGB); 
     int value; 
     for(int y = 1; y<maxHeight; y++){ 
      for(int x = 1; x<maxWidth; x++){ 
       value = output[y][x] ; 
       theImage.setRGB(y, x, value); 
      } 
     } 

     File outputfile = new File("task1output3x3.png"); 
     ImageIO.write(theImage, "png", outputfile); 
    } 
} 
+0

Format Code und entfernen Sie nicht verwendete druckt – Eldelshell

Antwort

0

getRGB " Gibt ein ganzzahliges Pixel im Standard-RGB-Farbmodell (TYPE_INT_ARGB) zurück. Daher müssen Sie R, G und B extrahieren und separat hinzufügen. dann setze sie wieder zusammen. Eine Möglichkeit ist, diese

int pixel=pictureFile[u+i][v+j]; 
int rr=(pixel&0x00ff0000)>>16, rg=(pixel&0x0000ff00)>>8, rb=pixel&0x000000ff; 
sumr+=rr; 
sumg+=rg; 
sumb+=rb; 

sie dann wieder zusammen setzen

sumr/=9; sumg/=9; sumb/=9; 
newPixel=0xff000000|(sumr<<16)|(sumg<<8)|sumb); 
+0

wenn ich das tat es verbessert die Details alot aber es hat nicht das Salz und Pfeffer Lärm es irgendwie entfernen es verschwommen gemacht, damit es nicht klar gesehen wird, wie vorher ist das richtig? @gpasch –

+0

hängt von dem Bild ab - ja Unschärfe ist der Effekt - Sie können stattdessen Median-Filter versuchen – gpasch

Verwandte Themen