Трехмерная матрица RGB

Добрый вечер. Пытаюсь разобраться с тем, как сложить или перемножить матрицу, которая задается по условию, с матрицей цветов. Только судя по всему Bitmap или Color вообще не прокатывают. Возможно кто-нибудь знает, как преобразовать матрицу цветов (result[0]) в трехмерную, а затем обратно или может есть еще способ записывать матрицу matr по типу Color или вроде того. Само по себе задание это действия с матричным фильтром. Вроде бы не так уж и сложно на словах, но конструкцию подходящую найти не получается.

  private void filtr3_Click(object sender, EventArgs e)
        {
            Bitmap im = (Bitmap)firstimage.Image;
            Bitmap[] result = new Bitmap[] { new Bitmap(im.Width, im.Height) };
            Bitmap[] outputimg = new Bitmap[] { new Bitmap(im.Width, im.Height) };
            //Color[] outputimg = new Color[im.Width, im.Height];
            Color[,] input = new Color[im.Width, im.Height];
            int width = im.Width;
            int height = im.Height;
            // StreamWriter steamWriter = new StreamWriter("D:/Программы/kursovKIT/kursovKIT/1.txt");
            int[,] cl = new int[im.Width, im.Height];
            int[,] matr = new int[,]{ { -1, -2, -1 },
                                              { -2,  13, -2 },
                                              { -1, -2, -1 } };
            for (int i = 0; i < width; i++)
            {
                for (int j = 0; j < height; j++)
                {
                    
                    Color color = im.GetPixel(i, j);
                    double R = color.R;
                     double G = color.G;
                      double B = color.B;
                      int r = Convert.ToInt32(R);
                      int g = Convert.ToInt32(G);
                      int b = Convert.ToInt32(B);
                      result[0].SetPixel(i, j, Color.FromArgb(color.A, r, g, b));
                     
                    for (int i1 = 0; i1 < width; i1 += 3)
                    {
                        for (int j1 = 0; j1 < height; j1 += 3)
                        {
                            outputimg[0] = result[0]*matr[3,3];
                        }
                    }
                }
            }
            // pictureBox1.Image = im;
           
        }

А в чем именно проблема с ними?
И какое задание исходное?

В общем получается, что мне нужно наложить как бы матричный фильтр (это как раз matr). Для этого я могу складывать или умножать исходную картинку с вот этой матрицей. Логично, что для этого дела я получаю массив Bitmap result (не отрицаю, что есть другие способы, возможно даже лучше), а дальше я должен производить любое выбранное действие над этим result и получать как бы новый массив, который потом буду выводить в виде картинки. Одно но, с матрицами работать неудобно, если на число можно без проблем умножить, то на матрицу только такую, которая будем подходить по размерности. Да и видимо я мальца туповат, поэтому не пойму, как получить обычную трехмерную матрицу для картинки.