我正在尝试在 Matlab 中创建一个模糊我的图像的函数。我正在使用 Matlabs 演示图像peppers.png
。
这是我的功能:
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 过滤器对每个像素进行平均......对你们来说有什么明显的为什么会这样?