Я пытаюсь уменьшить шум на изображении, создавая двумерный алгоритм равномерного сглаживания в C ++.Функция, которую я использую для каждого пикселя, вычисляет среднее значение соседних пикселей в квадратном нечетном окне и использует его в качестве нового значения.
Однако при каждом запуске кода пиксели в новом изображении становятся темнее (значение пикселя 255 = белый, а 0 = черный).Вот функция для получения нового значения пикселя:
int utility::windowAverage (image &src, int x, int y, int window_size)
{
int sum = 0;
int avg;
for(int i = x-(window_size/2); i < x+(window_size/2);++i)
{
for(int j = y-(window_size/2); j < y+(window_size/2);++j)
{
sum += src.getPixel(i,j);
}
}
avg = sum/(window_size*window_size);
return avg;
}
Параметр image &src
является исходным изображением, а функция src.getPixel(i,j)
возвращает целое число от 0 до 255, представляющее яркость пикселя приуказанные координаты (i, j).
Я запускаю код на изображениях уровня серого в формате .pgm.
Как можно сгладить изображение, сохраняя ту же яркость?