Слишком большое время работы для маленького цикла - C#
Формулировка задачи:
Я реализую алгоритм SURF.
Имеется уже заполненная матрица яркостей, где lockBitmap.Width и lockBitmap.Height - ширина и высота изображения в пикселях. Эта матрица заполняется быстро с помощью маршалинга.
И есть простенький код, который вычисляет интегральное представление изображения (матрица тех же размеров, где каждый элемент - сумма яркостей всех пикселей, левее и выше текущего):
Для изображения размером 50Х50 пикселей код работает шустро. Но для изображения 300Х300 требуется почти минута времени. С чем может быть связано такое большое время, если я просто гуляю по небольшому, уже заполненному массиву и просто беру из него числа?
Листинг программы
- double[,] BrightMatrix = new double[lockBitmap.Width, lockBitmap.Height];
Листинг программы
- for (int x = 0; x < lockBitmap.Width; x++)
- {
- for (int y = 0; y < lockBitmap.Height; y++)
- {
- double Sum = 0;
- for (int k = 0; k <= x; k++)
- {
- for (int l = 0; l <= y; l++)
- {
- Sum += BrightMatrix[k, l];
- }
- }
- IntegralMatrix[x, y] = Sum;
- }
- }
Решение задачи: «Слишком большое время работы для маленького цикла»
textual
Листинг программы
- for (int x = 0; x < source.Width; x++)
- {
- for (int y = 0; y < source.Height; y++)
- {
- if (x == 0 && y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y]; }
- else if (y == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y]; }
- else if (x == 0) { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x, y - 1]; }
- else { IntegralMatrix[x, y] = BrightMatrix[x, y] + IntegralMatrix[x - 1, y] + IntegralMatrix[x, y - 1] - IntegralMatrix[x - 1, y - 1]; }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д