GraphD писал(а):нормализованный к размеру окна градиент еще лучше (от масштаба не зависит)
Это что за зверь такой?
GraphD писал(а):2DeaD. Че-то не понятно о каком из средних идет речь, из каких регионов.
Вот еще давно пытался "влоб" оптимизировать свертку, т.е. перемножение пикселей с окном NxN значений ядра. Т.е. подготовив несколько массивов перемноженных данных, дак вышло в 20 раз медленнее просчета по пиксельно. Тут надо от платформы исходить, если PC - память у нее слабая...
Дык какой смысл как вы предлагаете оптимизировать? конечно у вас медленней выйдет, множитель то у вас не инвариантен относительно сдвига.
Ладно, так и быть
садитесь поудобнее, начинаем урок динамического программирования, из классической школы построения алгоритмов
Динамическим программированием называется метод решения задач, в котором задача большой сложности может быть быстро сведена к решению 1 или более задач меньшей сложности, при этом обычно строится матрица решений (может быть как одномерной, так и многомерной).
Далее перейдем к нашей задаче (для простоты будем считать картинку черно-белой, 256 градаций серого):
Пусть Pic[x][y] - матрица яркостей пикселей картинки, где 0<=x<W, 0<=y<H.
Рассчитаем матрицу Pic0[x0][y0] сумм яркостей Pic[x][y] из прямоугольника (0,0)-(x0,y0):
Тупо бежим по всем пикселям в двойном цикле и выставляем Pic0[x][y]=Pic[x][y]+Pic0[x-1][y]+Pic0[x][y-1]-Pic0[x-1][y-1].
Средний цвет прямоугольной области (x1+1,y1+1)-(x2,y2), где x2>x1, y2>y1 теперь можно вычислить значение следующей формулы:
AverageColor(x1+1,y1+1,x2,y2)=(Pic0[x2][y2]-Pic0[x1][y2]-Pic0[x2][y1]+Pic0[x1][y1])/((x2-x1)*(y2-y1)), то есть за фиксированное число операций.
Вот и всё. Урок классических алгоритмов окончен
PS: Домашнее задание
решить с помощью динпрога игру в камешки (где можно забирать из кучки 1-3 камешка и кто последний берет, тот проиграл)
PPS: Только обувью не кидаться за стёбный тон
)))))))
PPPS: Просьба извинить меня всем пострадавшим и сломавшим мозг при попытке понять моё недавно еще постоянно изменяющееся и кривое сообщение, форум видимо что-то из кода принял за тег и сломал мне пол сообщения. Еле вернул текст
Добавлено спустя 1 минуту 4 секунды:Виталий писал(а):Ничего подобного. по вычислительной сложности это как минимум в 256 раз дольше. и во столько же больше памяти надо.
Все зависит от гистограммы - среднее значение - это вырожденная гистограмма. =)
Можно на 2, на 4, на 8 значений гистограмму делать.
Да и современные процессоры умеют конфейером эт дела обсчитывать вроде (но я толком не знаю как).
Конкретизируйте ваше предложение с помощью указания функции расстояния/нормы для гистограмм