Обработка изображений — Как применить сглаживание рамочного фильтра

РЕДАКТИРОВАТЬ: Мое описание фильтра коробки очень неправильно (все веса должны быть одинаковыми в фильтре коробки), но предоставленный ответ действительно решает проблему на картинке. А именно ошибка, связанная с тем, что сумма весов не была равна 1.

Я посещаю занятия по компьютерной графике, и у меня возникают проблемы с работой фильтра сглаживания. Для своих попыток я использую маску 3x3 и сворачиваю ее с исходным изображением. Формула, приведенная в моей книге, дает веса как 1/(2r+1) для дискретных и 1/2r для непрерывных, где r — радиус от центрального пикселя. Итак, что я делаю, так это присваиваю каждому значению маски 3x3, как

b a b
a 1 a
b a b

где a равно 1/3, а b равно 1/( ( 2 * sqrt(2)) +1)

а затем свернуть его с исходным изображением.

Я использую конкретную библиотеку CImg, которую можно найти здесь: http://cimg.sourceforge.net/ и я мог бы также включить свой исходный код и результаты.

#include "CImg.h"
#include <cmath>

using namespace cimg_library;
int main() 
{
     CImg<unsigned char> image("zhbackground.bmp"), image2("zhbackground.bmp");
     double a = 1.0/3.0;
     double b = 1.0/((2.0*sqrt(2.0))+1.0);
     CImg<> mask = CImg<>(3,3).fill(b,a,b,a,1,a,b,a,b);
     image2.convolve(mask);
     CImgDisplay main_disp(image,"original"), main_disp2(image2, "second");
     while(1)
     {
        main_disp.wait();main_disp2.wait();
     }
}

originalвторой


person Tim    schedule 17.09.2012    source источник


Ответы (1)


Веса фильтров должны в сумме равняться 1,0. У вас нет.

person Mark Ransom    schedule 17.09.2012
comment
Я чувствовал себя глупо, когда читал это, чувствовал себя еще глупее, когда мне потребовалось около десяти минут, чтобы понять, что я должен сделать, чтобы это исправить. Очевидно, просто суммируя веса и деля веса на эту сумму. - person Tim; 17.09.2012
comment
@Tim Да, извини, я мог бы быть немного полезнее. И не нужно корить себя, я думаю, что это часто упускают из виду. P.S. Если бы были какие-либо веса, которые были бы <0.0 или >1.0, вам также нужно было бы добавить зажим. - person Mark Ransom; 17.09.2012