我正在寻找实现自己的matlab函数,可用于使用3x3内核计算图像过滤。
它会是这样的: “out = myfilter(input_image,my_3x3_kernel)” 其中输出大小与输入图像大小相同。
但是,我不应该使用任何内置的图像过滤功能,如imfilter(),filter2()。 conv2()等
我是MATLAB的新手,我很失落。
我还被告知输入过滤器内核的固定大小为5x5,但我可以对图像使用零填充?不知道这意味着什么,所以一点帮助将帮助我更好地理解这一点。
谢谢!
答案 0 :(得分:3)
简单的方法。
生成“图片”:
n = 50;
myImage = rand(n,n);
myBiggerImage = zeros(n+2, n+2);
myBiggerImage(2:end-1, 2:end-1) = myImage; % padded copy of the image
myKernel = [1 2 1; 2 4 2; 1 2 1]; % for example - this is a 3x3 kernel
myFilteredImage = zeros(n,n); % space for the result
现在我们需要以某种方式增加“正确”的元素。无聊的方式是:
for ii = 1 to n
for jj = 1 to n
s = 0;
for kk = 1 to 3
for ll = 1 to 3
s = s + myBiggerImage(ii+kk, jj+ll) * myKernel(kk,ll);
end
end
myFilteredImage(ii,jj) = s;
end
end
现在你可以做一些事情来“矢量化”这个。但是你认为你能想出那部分吗?