Слишком большое время работы для маленького цикла - C#

Узнай цену своей работы

Формулировка задачи:

Я реализую алгоритм SURF. Имеется уже заполненная матрица яркостей, где lockBitmap.Width и lockBitmap.Height - ширина и высота изображения в пикселях. Эта матрица заполняется быстро с помощью маршалинга.
Листинг программы
  1. double[,] BrightMatrix = new double[lockBitmap.Width, lockBitmap.Height];
И есть простенький код, который вычисляет интегральное представление изображения (матрица тех же размеров, где каждый элемент - сумма яркостей всех пикселей, левее и выше текущего):
Листинг программы
  1. for (int x = 0; x < lockBitmap.Width; x++)
  2. {
  3. for (int y = 0; y < lockBitmap.Height; y++)
  4. {
  5. double Sum = 0;
  6. for (int k = 0; k <= x; k++)
  7. {
  8. for (int l = 0; l <= y; l++)
  9. {
  10. Sum += BrightMatrix[k, l];
  11. }
  12. }
  13. IntegralMatrix[x, y] = Sum;
  14. }
  15. }
Для изображения размером 50Х50 пикселей код работает шустро. Но для изображения 300Х300 требуется почти минута времени. С чем может быть связано такое большое время, если я просто гуляю по небольшому, уже заполненному массиву и просто беру из него числа?

Решение задачи: «Слишком большое время работы для маленького цикла»

textual
Листинг программы
  1. for (int x = 0; x < source.Width; x++)
  2.             {
  3.                 for (int y = 0; y < source.Height; y++)
  4.                 {
  5.                     if (x == 0 && y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y]; }
  6.                     else if (y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y]; }
  7.                     else if (x == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x, y - 1]; }
  8.                     else { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y] + IntegralMatrix[x, y - 1] - IntegralMatrix[x - 1, y - 1]; }
  9.                 }
  10.             }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы