矩阵乘法问题

时间:2016-12-02 17:58:27

标签: java matrix multiplication convolution

我有这个问题,我有一个NxM矩阵,我想将它乘以一个3x3矩阵,就像卷积矩阵乘法一样 example in this link

这是矩阵的代码:

 int width = img.getWidth();
 int height = img.getHeight();

 int matrix[][] = new int[width][height];
 int edgeMatrix[][] = {
       {-1,-1,-1},
       {-1,8,-1},
       {-1,-1,-1}
 };

这是循环的代码:

for (int x = 0; x < width; x++) {
    w = 0;
    holderX = x;
    for (w = 0; w < 3; w++) {
        v = 0;
        if (w > 0)
            x++;
            for (v = 0; v < 3; v++) {
                sum = sum + matrix[v][x] * edgeMatrix[v][w];
                if (w == 2 && v == 2)
                    x = holderX;
            }
        }
    }

这个循环已经乘以第一行&#34;行&#34;矩阵中的3个。

尝试以不同的方式实现这一点,但我不能得到当矩阵自动到达宽度的末端时,N值增加一个,然后重新开始,同时值仍然在内部工作矩阵乘法。

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

你不需要holderX,但还需要一个循环。

int width = img.getWidth();
int height = img.getHeight();

int input[][] = img.getPixels(); // or whatever api you use
int output[][] = new int[height][width];
int kernel[][] = {
  {-1,-1,-1},
  {-1,8,-1},
  {-1,-1,-1}
};


for (int y = 0; y < height; y++) {
  for (int x = 0; x < width; x++) {
    int accumulator = 0;
    for (int v = 0; v < 3; v++) {
      for (int w = 0; w < 3; w++) {
        int sy = y + v - 1;
        int sx = x + w - 1;
        if (sy >= 0 && sy < height && sx >= 0 && sx < width)) {
          accumulator += input[sy][sx] * kernel[v][w];
        }
      }
    }
    output[sy][sx] = accumulator;
  }
}