Я пытаюсь сделать функцию в Matlab, которая размывает мое изображение. Я использую демо-версию Matlabs peppers.png
.Matlab Blur Filter, используя функцию
Вот моя функция:
function g = myfilter(f, h)
f = double(f); %convert to double
g = zeros(size(f)); %new array (size of f)
a = (size(h, 1) - 1)/2; %padding on edges
for row = (a + 1) : (size(f,1) - a)
for col = (a + 1) : (size(f,2) - a)
gxy = 0; %running sum
for m = -a:a
for n = -a:a
gxy = gxy + f(row - m, col - n) + h(m + a+1, n + a+1);
end
end
g(row, col) = gxy;
end
end
g = uint8(g); %convert back to int
Вот мои команды:
>> img = imread('peppers.png');
>> imshow(img)
>> imgGray = rgb2gray(img);
>> imshow(imgGray)
>>
>> filt1 = (1/9)*ones(3)
filt1 =
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
0.1111 0.1111 0.1111
>> test = myfilter(imgGray, filt1);
>> imshow(test)
Он успешно преобразует цветное изображение в серый и применяет фильтр.
К сожалению, фильтр просто создает почти полное белое изображение (слишком яркое) ... Я просто не понимаю, почему ... Он должен принимать среднее значение для каждого пикселя с использованием фильтра 3x3 ... Есть что-нибудь Очевидно, вам, ребята, почему это происходит?