Добрый вечер! Необходимо реализовать программу для размытия изображения методом Гаусса. В интернете примеров алгоритма не нашел, только математическую часть.
Начал реализовывать и столкнулся с такой проблемой что цвет состовляющей пикселя например R получается больше 255, а такого, быть не может
Код на С++
Скорей всего я не понял принцып работы алгоритма.
unsigned int *GausFilter(unsigned int *Image) { unsigned int filter[3][3] = {1,2,1, 2,4,2, 1,2,1}; unsigned char s = 0; float R,G,B;
for (int j = 0; j < *ImageHight; j++) { for (int i = 0; i < *ImageWidth; i++) { R = G = B = 0; if (j == 0) { ZnachR = float(MyGetRValue(Image[i * *ImageWidth + j])) / 255.0; ZnachG = float(MyGetGValue(Image[i * *ImageWidth + j])) / 255.0; ZnachG = float(MyGetGValue(Image[i * *ImageWidth + j])) / 255.0;
x = y = 0; for (x = 2; x <= 3; x++) { for (y = 2; y <= 3; y++) { R += ZnachR * filter[x][y]; G += ZnachG * filter[x][y]; B += ZnachB * filter[x][y]; } } R = ceil(R * 255); G = ceil(G * 255); B = ceil(B * 255); } } } }
Заранее спасибо.
Если создал тему не в том разделе прошу прощения.
volvo
6.02.2011 23:07
Кто тебе сказал, что нет исходников? google -> "C++ gaussian blur" выдаст тебе десятки разных программ. Первая же ссылка выводит на исходник, если что. Если не понял принцип работы - то по той же ссылке лежит PDF-файл, разжевывающий все до неприличия (правда, на английском. Я вообще предпочитаю работать с англоязычными источниками. Надежнее оно как-то)
ninja
6.02.2011 23:22
Владимир спасибо большущее! Я просто искал на русском т.к. с английским не очень хорошо, буду разбираться. Не могли бы Вы мне на словах объяснить принцып работы? например есть окно
беру например пиксель 12 раскладываю его на 3 составляющие R,G и B, что дальше делать не пойму, толи брать умножать окно на соответствующие пиксели, т.е (7*1) + (8*2) + (9*1) + (11*2) + (12*4).... тогда что делать с составляющими цвета....
Если не трудно объясните пожалуйста.
мисс_граффити
10.02.2011 20:12
составляющие цвета надо получить не только для этого пикселя, но и для соседних. а дальше каждый из них умножить на соответствующий коэффициент (из "окна") и сложить. Коэффициенты "окна" задают пропорции, в которых каждый из соседей влияет на вычисляемый пиксель. Чтобы не вылезать из интервала 0..255 просто нормализацию надо выполнить (обычно - разделить на сумму коэффициентов).
ninja
14.02.2011 2:03
Спасибо, я разобрался...
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.