模糊算法java代码_简单的java高斯模糊算法

通过对像素点取平均值计算出高斯模糊效果,没有实现权重,只有简单的模糊,矩阵为3X3

1.[代码][Java]代码

import java.awt.Color;

import java.awt.image.BufferedImage;

import java.io.File;

import java.io.IOException;

import javax.imageio.ImageIO;

public class Test

{

/**

* 简单高斯模糊算法

*

* @param args

* @throws IOException [参数说明]

*

* @return void [返回类型说明]

* @exception throws [违例类型] [违例说明]

* @see [类、类#方法、类#成员]

*/

public static void main(String[] args)

throws IOException

{

BufferedImage img = ImageIO.read(new File("d:\\My Documents\\psb.jpg"));

System.out.println(img);

int height = img.getHeight();

int width = img.getWidth();

int[][] matrix = new int[3][3];

int[] values = new int[9];

for (int i = 0; i < width; i++)

{

for (int j = 0; j < height; j++)

{

readPixel(img, i, j, values);

fillMatrix(matrix, values);

img.setRGB(i, j, avgMatrix(matrix));

}

}

ImageIO.write(img, "jpeg", new File("d:/test.jpg"));//保存在d盘为test.jpeg文件

}

private static void readPixel(BufferedImage img, int x, int y, int[] pixels)

{

int xStart = x - 1;

int yStart = y - 1;

int current = 0;

for (int i = xStart; i < 3 + xStart; i++)

{

for (int j = yStart; j < 3 + yStart; j++)

{

int tx = i;

if (tx < 0)

{

tx = -tx;

}

else if (tx >= img.getWidth())

{

tx = x;

}

int ty = j;

if (ty < 0)

{

ty = -ty;

}

else if (ty >= img.getHeight())

{

ty = y;

}

pixels[current++] = img.getRGB(tx, ty);

}

}

}

private static void fillMatrix(int[][] matrix, int... values)

{

int filled = 0;

for (int i = 0; i < matrix.length; i++)

{

int[] x = matrix[i];

for (int j = 0; j < x.length; j++)

{

x[j] = values[filled++];

}

}

}

private static int avgMatrix(int[][] matrix)

{

int r = 0;

int g = 0;

int b = 0;

for (int i = 0; i < matrix.length; i++)

{

int[] x = matrix[i];

for (int j = 0; j < x.length; j++)

{

if (j == 1)

{

continue;

}

Color c = new Color(x[j]);

r += c.getRed();

g += c.getGreen();

b += c.getBlue();

}

}

return new Color(r / 8, g / 8, b / 8).getRGB();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值