如何在MATLAB或python中绘制/绘制高斯(LoG)函数的二维Laplacian函数?

时间:2019-02-27 12:04:02

标签: python matlab image-processing plot computer-vision

enter image description here

你好

我正在尝试制作类似于以下图的3-D图,该图说明了高斯(LoG)函数的2-D拉普拉斯算子。如何通过MATLAB或python完成此操作?代码片段将不胜感激。

我发现我们可以使用this method绘制高斯曲线,但是我正在寻找如何绘制高斯的拉普拉斯曲线。

2 个答案:

答案 0 :(得分:3)

您可以使用离散的拉普拉斯函数del2

N = 3;
x=linspace(-N, N,30);
[X,Y]=meshgrid(x,x);
z=del2((1000/sqrt(2*pi).*exp(-(X.^2/2)-(Y.^2/2))));
surf(X,Y,z);

结果:

enter image description here

答案 1 :(得分:1)

使用del2应用于高斯函数可获得真实拉普拉斯函数的近似值(它对导数使用离散近似值)。这不是必需的,我们可以轻松地计算出高斯二阶导数的表达式,并使用它。

首先,我们定义一维高斯:

x = linspace(-4,4,41);
G = exp(-x.^2/2)/sqrt(2*pi);

接下来,我们计算一维高斯的二阶导数:

Gxx = G .* (x.^2-1);

高斯函数具有很好的属性,您可以将两个1D函数相乘在一起以获得2D函数。因此,

data = G .* Gxx.';

是2D高斯沿y轴的二阶导数。 data的转置是沿x轴的二阶导数。

拉普拉斯定义为沿每个轴的偏导数之和:

data = data + data.';

绘图会导致(我也尝试复制原始图的观点):

Laplace of Gaussian

这是完整的代码:

x = linspace(-4,4,41);
G = exp(-x.^2/2)/sqrt(2*pi);
Gxx = G .* (x.^2-1);
data = G .* Gxx.';
data = data + data.';
surf(x,x,data,'facecolor','white')
view(45,13)
set(gca,'dataaspectratio',[1,1,0.08])
grid off
xlabel('X')
ylabel('Y')