IPB
ЛогинПароль:

 
 Ответить  Открыть новую тему 
> Размытие изображение по Гауссу
сообщение
Сообщение #1


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Добрый вечер! Необходимо реализовать программу для размытия изображения методом Гаусса. В интернете примеров алгоритма не нашел, только математическую часть.

Начал реализовывать и столкнулся с такой проблемой что цвет состовляющей пикселя например 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;

float ZnachR = 0;
float ZnachG = 0;
float ZnachB = 0;

int x,y;

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);
}
}
}
}


Заранее спасибо.

Если создал тему не в том разделе прошу прощения.

Сообщение отредактировано: ninja -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Кто тебе сказал, что нет исходников? google -> "C++ gaussian blur" выдаст тебе десятки разных программ. Первая же ссылка выводит на исходник, если что. Если не понял принцип работы - то по той же ссылке лежит PDF-файл, разжевывающий все до неприличия (правда, на английском. Я вообще предпочитаю работать с англоязычными источниками. Надежнее оно как-то)

 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Владимир спасибо большущее! Я просто искал на русском т.к. с английским не очень хорошо, буду разбираться. Не могли бы Вы мне на словах объяснить принцып работы?
например есть окно

1,2,1
2,4,2
1,2,1

и есть какое то изображение

1,2,3,4,5
6,7,8,9,10
11,12,13,14
15,16,17,18
19,20,21,22
......

беру например пиксель 12 раскладываю его на 3 составляющие R,G и B, что дальше делать не пойму, толи брать умножать окно на соответствующие пиксели, т.е
(7*1) + (8*2) + (9*1) + (11*2) + (12*4).... тогда что делать с составляющими цвета....

Если не трудно объясните пожалуйста.

Сообщение отредактировано: ninja -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

Репутация: -  55  +


составляющие цвета надо получить не только для этого пикселя, но и для соседних.
а дальше каждый из них умножить на соответствующий коэффициент (из "окна") и сложить.
Коэффициенты "окна" задают пропорции, в которых каждый из соседей влияет на вычисляемый пиксель. Чтобы не вылезать из интервала 0..255 просто нормализацию надо выполнить (обычно - разделить на сумму коэффициентов).


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Пионер
**

Группа: Пользователи
Сообщений: 103
Пол: Мужской
Реальное имя: Александр

Репутация: -  0  +


Спасибо, я разобрался...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 




- Текстовая версия 22.02.2018 19:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"