二维卷积 - 如何在Java中实现?

时间:2012-10-25 02:34:36

标签: java arrays image-processing convolution

我现在一直在撞墙撞墙。 我习惯使用Matlab的conv2函数,它自己进行卷积。

但是,我只是无法在Java中正确实现它。我会提供一个代码片段,但它全都搞砸了。我会尽力把它弄清楚并发布(实际上是凌晨4点30分,我仍然在努力...)。

任何人都可以发布一个工作代码方法,在Java中两个相同大小的二维数组之间进行二维卷积吗?

提前致谢!

1 个答案:

答案 0 :(得分:2)

一个小小的谷歌搜索永远不会伤害。 This code可能会对您有所帮助。特别是,

public static double[][] convolution2D(double[][] input,
            int width, int height,
            double[][] kernel,
            int kernelWidth,
            int kernelHeight) {
        int smallWidth = width - kernelWidth + 1;
        int smallHeight = height - kernelHeight + 1;
        double[][] output = new double[smallWidth][smallHeight];
        for (int i = 0; i < smallWidth; ++i) {
            for (int j = 0; j < smallHeight; ++j) {
                output[i][j] = 0;
            }
        }
        for (int i = 0; i < smallWidth; ++i) {
            for (int j = 0; j < smallHeight; ++j) {
                output[i][j] = singlePixelConvolution(input, i, j, kernel,
                        kernelWidth, kernelHeight);
            }
        }
        return output;
    }