图像处理滤波器的2D / 3D图

时间:2012-09-26 16:13:32

标签: matlab image-processing plot convolution

我试图理解2D& Matlab中的3D绘图功能,关于图像处理过滤器,如箱形图,高斯,墨西哥帽等......

我只获得了过滤器的内核,例如具有每个细胞的系数的5×5矩阵。 ezsurfc不会工作,我不明白。 冲浪而不是工作,但我对网格没有任何线索,如何使其更细粒度和光滑?

我对冲浪的理解是,我需要为每个参数提供相同的尺寸,那么如何在不将内核设置为20x20甚至更大的情况下进行操作呢? 我的想法是,我得到了一个类似于示例的输出,我发布了。我提到过滤器的20x20网格掩模,因为它看起来平滑度和扁平化需要的系数多于5x5 ...我是对还是完全错了?

我已经尝试过以下matlab代码,例如拉普拉斯过滤器:

[x,y] = meshgrid(1:1:5); %create a 5x5 matrix for x and y (meshes)
z = [0 1 2 1 0; 1 3 5 3 1;2 5 9 5 2; 1 3 5 3 1;0 1 2 1 0]; % kernel 5x5
surf(x,y,z);

这给了我输出: current output

那么如何从5x5内核信息中生成精细的粒度2D和3D图? 非常感谢提前!

P.S。:希望我的代码缩进不会搞砸......否则随意编辑 - 这是我在StackOverflow上的第一篇文章。 : - )

我想得到的,就像这两个例子: example no.1 example no.2

1 个答案:

答案 0 :(得分:5)

您可以使用interp2在同一网格尺寸上查找中间值以进行可视化目的

step = 0.1; % granularity
[xn,yn] = meshgrid(1:step:5); % define finer grid
zn = interp2(x,y,z,xn,yn); % get new z values 
surf(xn,yn,zn);

enter image description here

请注意,您将使用默认的线性插值方法(即interp2(x,y,z,xn,yn,'linear'))获得与原始内核最接近的近似值。使用其他方法将导致使用更平滑的内核,但它们的3D形状将有所不同。所以这取决于您的使用和应用。

更新

你可以将上采样的不适定问题绕过一个更高的分辨率(只有在假设的“下采样与奈奎斯特采样率相关”时,通过尝试用已知内核逼近数据才能进行逆重建) ,然后你可以调整。

例如,由于您给出的是对称内核的示例,它会在最大值附近衰减,您可以使用高斯函数。 MATLAB通过fspecial函数完成此操作。

假设基础函数(例如高斯函数)并使用从当前内核定义的参数(即将函数拟合到数据中)

% use max location, amplitude and std from your kernel
max_z = max(z(:));
std_z = std(z(:));

% Set of tunable parameters (size of grid & granularity)
bounds_grid = [30 30]; grid bounds
step = 0.5; % resolution

% Grid
siz = (bounds_grid-1)/2;
[x,y] = meshgrid(-siz(2):step:siz(2),-siz(1):step:siz(1));

% Gaussian parameters
s = std_z; m = 0;

% Analytic function
g = exp(-((x-m).^2 + (y-m).^2)/(2*s*s));
g(g<eps*max(g(:))) = 0;
g = max_z*g./max(g(:));

surf(g);

这样你就可以尊重高斯波瓣中内核的参数,但是可以控制最终高斯内核的网格大小和分辨率。

一些例子:

enter image description here