2016-12-12 13 views
0

我一直試圖通過使用中位數過濾器來描述我的圖像this article我的圖片去噪方法有什麼問題?

我只做了一個傳遞,直到我得到這個東西的工作。結果主要是一個被淘汰的圖像,如下所示。

我的代碼的最小工作版本低於:

import java.awt.image.BufferedImage; 
import java.util.Arrays; 

public class Denoise { 

public static void main(String args[]) { 
     String directory = "C:\\Users\\Speedy Octopus\\Desktop\\Place Car Folders Here\\Original\\15.JPG"; 
     BufferedImage image = ImageUtility.loadImage(directory); 

    for (int iterationCount = 0; iterationCount < 1; iterationCount++){ 
     for (int i = 1; i < image.getWidth()-1; i++) { 
      for (int j = 1; j < image.getHeight()-1; j++) { 
       image.setRGB(i, j, getMedianPixelValue(image, i, j)); 
      } 
     } 

    } 
    String directory2 = "C:\\Users\\Speedy Octopus\\Desktop\\Place Car Folders Here\\Original\\152.JPG"; 
    Controller.saveImage(image, directory2); 
} 

public static int getMedianPixelValue(BufferedImage image, int i, int j) { 
    int[] surroundingPixels = new int[8]; 

    int iter = 0; 
    for (int q = i-1; q<=i+1; q++) { 
     for (int r = j-1; r<=j+1;r++) { 
      if (!(q == i && r == j)) { 
       surroundingPixels[iter] = image.getRGB(q, r); 
       iter++; 
      } 
     } 
    } 

    Arrays.sort(surroundingPixels); 

    int medianIndex = surroundingPixels.length/2; 
    int medianPixel = surroundingPixels[medianIndex]; 

    return medianPixel; 
} 

} This is my starting image

This is my result

回答

0

正如我在這個問題Applying Mean filter on an image using java的getRGB回答說:「在默認的RGB返回一個整數像素顏色模型(TYPE_INT_ARGB)「,因此在進行任何比較之前必須提取併除去alpha(A)分量:

pixel=image.getRGB(i, j)&0x00ffffff; 

在媒體排序等

而且可以提取R,G,和B以及分別處理它們,或者做在整個像素RGB的比較 - 你可以實驗無論哪種方式。