Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.05.2013, 01:11   #1
803
Пользователь
 
Регистрация: 13.02.2012
Сообщений: 89
По умолчанию Матричные фильтры обработки изображений

Здравствуйте. Нашёл код на одном сайте по Матрицы свёртки. и возникло несколько вопросов. Вот сам код:
Код:
public static class Convolution
  {
    public static Bitmap Apply(Bitmap input, double[,] kernel)
    {
      //Получаем байты изображения
      byte[] inputBytes = BitmapBytes.GetBytes(input);
      byte[] outputBytes = new byte[inputBytes.Length];

      int width = input.Width;
      int height = input.Height;

      int kernelWidth = kernel.GetLength(0);
      int kernelHeight = kernel.GetLength(1);

      //Производим вычисления
      for (int x = 0; x < width; x++)
      {
        for (int y = 0; y < height; y++)
        {
          double rSum = 0, gSum = 0, bSum = 0, kSum = 0;

          for (int i = 0; i < kernelWidth; i++)
          {
            for (int j = 0; j < kernelHeight; j++)
            {
              int pixelPosX = x + (i - (kernelWidth / 2));
              int pixelPosY = y + (j - (kernelHeight / 2));
              if ((pixelPosX < 0) || 
                (pixelPosX >= width) || 
                (pixelPosY < 0) || 
                (pixelPosY >= height)) continue;

              byte r = inputBytes[3 * (width * pixelPosY + pixelPosX) + 0];
              byte g = inputBytes[3 * (width * pixelPosY + pixelPosX) + 1];
              byte b = inputBytes[3 * (width * pixelPosY + pixelPosX) + 2];

              double kernelVal = kernel[i, j];

              rSum += r * kernelVal;
              gSum += g * kernelVal;
              bSum += b * kernelVal;

              kSum += kernelVal;
            }
          }

          if (kSum <= 0) kSum = 1;

          //Контролируем переполнения переменных
          rSum /= kSum;
          if (rSum < 0) rSum = 0;
          if (rSum > 255) rSum = 255;

          gSum /= kSum;
          if (gSum < 0) gSum = 0;
          if (gSum > 255) gSum = 255;

          bSum /= kSum;
          if (bSum < 0) bSum = 0;
          if (bSum > 255) bSum = 255;

          //Записываем значения в результирующее изображение
          outputBytes[3 * (width * y + x) + 0] = (byte)rSum;
          outputBytes[3 * (width * y + x) + 1] = (byte)gSum;
          outputBytes[3 * (width * y + x) + 2] = (byte)bSum;
        }
      }
      //Возвращаем отфильтрованное изображение
      return BitmapBytes.GetBitmap(outputBytes, width, height);
    }
  }
Непонимание возникло вот в этих строчках
Код:
 double kernelVal = kernel[i, j];

              rSum += r * kernelVal;
              gSum += g * kernelVal;
              bSum += b * kernelVal;

              kSum += kernelVal;
Не могли бы вы объяснить мне пожалуйста. Заранее спасибо.
803 вне форума Ответить с цитированием
Старый 17.05.2013, 01:30   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,321
По умолчанию

http://habrahabr.ru/post/142818/

Картинка иллюстрирует действия с 1 каналом. Это нужно проделать с каждым каналом. Прочтите статью, возможно, вопросы отпадут.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Библиотека для обработки изображений (.NET / C++) sawer5 Общие вопросы .NET 1 28.12.2011 10:43
Алгоритмы обработки изображений xripunov Помощь студентам 4 24.08.2011 18:39
Разработать программу для обработки растровых изображений, хранящихся в файлах формата BMP (BitMaP). yeskin Фриланс 5 19.12.2010 15:06
Автоматизация обработки изображений и их оцифровки методами делфи helpme32 Мультимедиа в Delphi 1 14.12.2007 13:03