Я пишу фильтр Gaussian Blur с матрицей 3x3 (ядро) и используя QImage
в качестве внешней библиотеки. Ядро вычисляется так, как должно быть. После того, как ядро инициализации и вычислил я приношу unsigned int
Matrix в программу:Как правильно развернуть Gaussian Blur?
typedef std::vector<std::vector<unsigned int> > uintMatrix; // For copying pixels value
В main.cpp он инициализируется как:
uintMatrix tmpPxMat(image.width(); std::vector<unsigned int> (image.height(), 0));
Я использую его в качестве временного хранилища для значений размытых пикселей.
Затем я использую мой алгоритм размытия изображения:
// Blur Pixels
for(int x = 0; x < image.width(); x++)
for(int y = 0; y < image.height(); y++) {
// To avoid edge cases don't process them, I'll fix it soon
if(x == 0 || x == image.height()-1 || y == 0 || y == image.width()-1)
continue;
// 3x3 Matrix
tmpPxMat[x][y] += kernel[0][0] * image.pixel(x-1, y-1) +
kernel[0][1] * image.pixel(x, y-1) +
kernel[0][2] * image.pixel(x+1, y-1);
tmpPxMat[x][y] += kernel[1][0] * image.pixel(x-1, y) +
kernel[1][1] * image.pixel(x, y) +
kernel[1][2] * image.pixel(x+1, y);
tmpPxMat[x][y] += kernel[2][0] * image.pixel(x-1, y+1) +
kernel[2][1] * image.pixel(x, y+1) +
kernel[2][2] * image.pixel(x+1, y+1);
}
Затем я скопировать результат из tmpPxMat[][]
к происхождения изображения:
// Copy blurred values to the image
for(int x = 0; x < image.width(); x++)
for(int y = 0; y < image.height(); y++)
image.setPixel(x, y, tmpPxMat[x][y]);
И сохранить его:
image.save("/home/john/Pictures/blurred", "PNG", 100);
Но в конце я получаю не тот результат, которого я ждал. Вот что я получаю:
До/После:
Извините за длинное описание вопроса, но я сжимаю его так же, как я мог.
У вас нет проблем с отливом? Гауссовское ядро должно быть матрицей с плавающей точкой, результатом которой является свертка, сохраняемая как int. – Miki
Каковы цвета изображения, представленные в текстуре? – jaggedSpire
Ваше выходное изображение окрашено, но ваша обработка, похоже, не обрабатывает три канала данных цвета (RGB), так вы используете обработку оттенков серого на цветных изображениях? –