数字图像处理均值滤波代码
时间: 2023-11-24 07:07:55 浏览: 80
junzhilvbo.rar_图形图像处理_Visual_C++_
以下是纯Java实现的算数均值滤波器代码,可以用于数字图像处理中的降噪和模糊处理:
```
public static BufferedImage arithmeticMeanFilter(BufferedImage image, int filterSize) {
int width = image.getWidth();
int height = image.getHeight();
int[][] pixels = new int[width][height];
int[][] resultPixels = new int[width][height];
int filterRadius = filterSize / 2;
int filterArea = filterSize * filterSize;
// 将图像像素存储到二维数组中
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
pixels[x][y] = image.getRGB(x, y) & 0xff;
}
}
// 对每个像素进行均值滤波
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
int sum = 0;
for (int i = -filterRadius; i <= filterRadius; i++) {
for (int j = -filterRadius; j <= filterRadius; j++) {
int px = Math.min(Math.max(x + i, 0), width - 1);
int py = Math.min(Math.max(y + j, 0), height - 1);
sum += pixels[px][py];
}
}
resultPixels[x][y] = sum / filterArea;
}
}
// 将处理后的像素存储到新的BufferedImage中
BufferedImage resultImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_GRAY);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
resultImage.setRGB(x, y, resultPixels[x][y] << 16 | resultPixels[x][y] << 8 | resultPixels[x][y]);
}
}
return resultImage;
}
```
其中,`image`为输入的原始图像,`filterSize`为滤波器的大小,返回值为处理后的图像。该算法使用了算数均值滤波器,对于每个像素,计算其周围滤波器大小范围内的像素值的平均值,并将结果作为该像素的新值。
阅读全文