| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Алгоритмы > Фильтр Гаусса |
| Автор: TupleCa 9.4.2007, 14:02 | ||
| изображение хранится в виде массива w*h*3. 3 т.к хранится красный, зеленый, голубой. все значения принадлежат [0;255]. потом формируется новое изображение: Код:
в OR OG OB хранится исходник в NR(G,B) новое "изображение" и вот когда o меняю (o - это сигма), или n и m меняю или просто картинку. то часто SumR, SumG или SumB превышают 255. причем очень прилично превышают (по 350 есть и даже по 400). соответсвенно вывести на экран изображение не получается. Это так и должно быть, что иногда получается иногда нет. (в зависимости от o n m и картинки). Или это я ошибся где-то? |
| Автор: maxim1000 9.4.2007, 15:17 |
| для двумерного фильтра Гаусса нужно два раза умножать на нормализирующий множитель (по сути, просто в квадрат его возвести), тогда, по идее, за пределы выходить не должно |
| Автор: esperant0 9.4.2007, 16:27 |
| Не могли бы вы формулу дать. Известный мне фильт гауса не меняет светность картинки, и не дает значения пикселей большие чем было. |
| Автор: TupleCa 9.4.2007, 16:54 | ||
формулу известного фильтра? или "неизвестного" ))) т.е как я делаю??? |
| Автор: esperant0 9.4.2007, 17:14 | ||||
Формулу вашего фильтра или алгоритм. |
| Автор: TupleCa 9.4.2007, 17:26 | ||
я код привел же. ну щас поподроюнее напишу
вообщем формула такая: (если таким языком понятно будет))) I'(i,j) = СУММА( l=[-n;n])СУММА(k=[-m;m]) I(i-l)(i-k)*{[1/(корень(2*пи)*сигма)]*e^((-d*d)/(2*сигма*сигма))}^2 |