使用3x3高斯内核模糊图像?

Tay*_*lor 2 java processing image gaussian

我想创建一种使用3x3高斯内核模糊24位图像的方法.

我得到了以下的东西.

3x3高斯内核:

http://i.stack.imgur.com/YAEQR.png

A是原始图像,B是结果图像.

B(i,j) =
1/16 * A(i-1,j-1) +1/8 * A(i,j-1) +1/16 * A(i+1,j-1) +1/8 * A(i-1,j) +1/4 * A(i,j) +1/8 *A(i+1,j) +1/16 * A(i-1,j+1) +1/8 * A(i,j+1) +1/16 * A(i+1,j+1)  
Run Code Online (Sandbox Code Playgroud)

方法:

public static BufferedImage gaussianBlur(Image img)
Run Code Online (Sandbox Code Playgroud)

其中img是输入图像的参考变量.
返回值是结果图像的对象的地址.

我应该将图像分成9个部分来实现这个方法吗?

her*_*tao 10

您无需将其分为9个部分.至少,我认为没有充分理由这样做.

但是在这个过程中你最好小心,记得将图像数据复制到某个地方并始终使用这些数据来计算新图像,避免使用新的图像数据来计算新图像.


另外,我不明白为什么你需要编写自己的函数来高斯模糊图像.这可以很容易地完成如下:

float[] matrix = {
    1/16f, 1/8f, 1/16f, 
    1/8f, 1/4f, 1/8f, 
    1/16f, 1/8f, 1/16f, 
};

BufferedImageOp op = new ConvolveOp( new Kernel(3, 3, matrix) );
blurredImage = op.filter(sourceImage, destImage);
Run Code Online (Sandbox Code Playgroud)