如何在 MATLAB 或 python 中 graph/plot 二维高斯拉普拉斯算子 (LoG) 函数?
How to graph/plot 2D Laplacian of Gaussian (LoG) function in MATLAB or python?
你好
我正在尝试制作一个类似于下图的 3-D 图,它说明了二维高斯拉普拉斯算子 (LoG) 函数。如何通过 MATLAB 或 python 完成此操作?代码片段将不胜感激。
我发现我们可以使用 this method 绘制高斯,但我正在寻找如何绘制高斯的拉普拉斯。
您可以使用离散拉普拉斯函数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);
结果:
将 del2
应用于高斯函数可获得对真实拉普拉斯函数的近似值(它使用导数的离散近似值)。这不是必需的,我们可以很容易地计算出高斯二阶导数的表达式,并使用它。
首先我们定义一维高斯:
x = linspace(-4,4,41);
G = exp(-x.^2/2)/sqrt(2*pi);
接下来,我们计算一维高斯的二阶导数:
Gxx = G .* (x.^2-1);
Gaussian 有一个很好的 属性 可以将两个一维函数相乘得到二维函数。因此,
data = G .* Gxx.';
是二维高斯分布沿 y 轴的二阶导数。 data
的转置是沿 x 轴的二阶导数。
拉普拉斯定义为沿每个轴的偏导数之和:
data = data + data.';
绘制这导致(我也尝试复制原始图表的观点):
完整代码如下:
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')
你好
我正在尝试制作一个类似于下图的 3-D 图,它说明了二维高斯拉普拉斯算子 (LoG) 函数。如何通过 MATLAB 或 python 完成此操作?代码片段将不胜感激。
我发现我们可以使用 this method 绘制高斯,但我正在寻找如何绘制高斯的拉普拉斯。
您可以使用离散拉普拉斯函数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);
结果:
将 del2
应用于高斯函数可获得对真实拉普拉斯函数的近似值(它使用导数的离散近似值)。这不是必需的,我们可以很容易地计算出高斯二阶导数的表达式,并使用它。
首先我们定义一维高斯:
x = linspace(-4,4,41);
G = exp(-x.^2/2)/sqrt(2*pi);
接下来,我们计算一维高斯的二阶导数:
Gxx = G .* (x.^2-1);
Gaussian 有一个很好的 属性 可以将两个一维函数相乘得到二维函数。因此,
data = G .* Gxx.';
是二维高斯分布沿 y 轴的二阶导数。 data
的转置是沿 x 轴的二阶导数。
拉普拉斯定义为沿每个轴的偏导数之和:
data = data + data.';
绘制这导致(我也尝试复制原始图表的观点):
完整代码如下:
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')