我一直试图使用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;
}
答案 0 :(得分:0)
正如我在这个问题中回答的那样Applying Mean filter on an image using java getRGB“返回默认RGB颜色模型(TYPE_INT_ARGB)中的整数像素”,因此在进行任何比较之前必须提取并删除alpha(A)组件:< / p>
pixel=image.getRGB(i, j)&0x00ffffff;
在媒体分类等
你可以提取R,G和B并单独处理它们,或者对整个像素RGB进行比较 - 你可以用任何一种方式进行实验。