用于计算大小为NXN的滤镜并将其应用于Matlab中的conv2()函数将其应用于输入图像I的函数

问题描述 投票:1回答:1

[我正在尝试编写一个函数来创建大小为NXN的滤镜,然后将其应用于读入的图像。这是我的尝试...

function Iout = noiseReduction(I, N)
image = imread(I);
figure(3)
subplot(2,1,1), imshow(image), title('Original Image', 'FontSize', 15);

mask = ones(3,3) * N;
Iout = conv2(image, mask);
subplot(2,1,2), imshow(uint8(Iout)), title('Blurred Image', 'FontSize', 15);

end

但是,当我运行函数时,在Blurred Image中没有任何输出,我只是得到一个空白方块。谁能帮我找出这是怎么回事?任何帮助都将非常棒。

matlab convolution
1个回答
1
投票
mask = ones(3,3) * N;

这不是NxN过滤器,而是3x3过滤器,其中每个元素的值为N

通过使用这种滤镜进行卷积,可以获得具有非常大值的图像。您稍后将其强制转换为uint8,将所有值都钳位为255。因此图像看起来全为白色。

相反,将您的内核定义为:

mask = ones(N,N) / N^2;

现在mask为NxN且总和为1,这意味着输出将保持与输入相同的范围。

© www.soinside.com 2019 - 2024. All rights reserved.