如何在MATLAB或Python中绘制2D高斯拉普拉斯(LoG)函数的3D图?
没问题!既然你已经掌握了高斯函数的绘制方法,那实现二维高斯拉普拉斯(LoG)的3D图其实很容易上手——核心就是先明确LoG的数学表达式,再基于它生成网格数据,最后用绘图工具渲染出来就行。我给你分别整理了MATLAB和Python的可直接运行代码片段:
MATLAB 实现方法
二维高斯拉普拉斯的数学表达式为:
$$LoG(x,y) = \frac{1}{\pi\sigma^4} \left( \frac{x^2 + y2}{2\sigma2} - 1 \right) e{-\frac{x2 + y2}{2\sigma2}}$$
其中*σ(标准差)*是控制LoG核大小的关键参数。以下是完整代码:
% 设置核心参数 sigma = 1; % 高斯核的标准差,可根据需求调整 step = 0.1; % 网格点的步长,步长越小图越精细 range = 3*sigma; % 取3σ范围,覆盖LoG函数的主要分布区域 % 生成二维坐标网格 [x, y] = meshgrid(-range:step:range, -range:step:range); % 计算每个网格点的LoG函数值 r_squared = x.^2 + y.^2; % 计算每个点到原点的距离平方 log_val = (1/(pi*sigma^4)) .* ((r_squared/(2*sigma^2)) - 1) .* exp(-r_squared/(2*sigma^2)); % 绘制3D曲面图 figure; surf(x, y, log_val); shading interp; % 启用平滑着色,让曲面更细腻 colormap jet; % 选择jet配色方案,便于区分数值高低 colorbar; % 添加颜色条,直观对应数值 title('二维高斯拉普拉斯(LoG)函数3D图'); xlabel('X'); ylabel('Y'); zlabel('LoG Value');
Python 实现方法
Python这边我们用numpy生成数据,matplotlib绘制3D图,逻辑和MATLAB一致:
import numpy as np import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D # 设置核心参数 sigma = 1 step = 0.1 range_val = 3 * sigma # 同样取3σ范围 # 生成二维坐标网格 x = np.arange(-range_val, range_val + step, step) y = np.arange(-range_val, range_val + step, step) X, Y = np.meshgrid(x, y) # 计算LoG函数值 r_squared = X**2 + Y**2 log_val = (1/(np.pi * sigma**4)) * ((r_squared/(2*sigma**2)) - 1) * np.exp(-r_squared/(2*sigma**2)) # 创建3D绘图对象 fig = plt.figure(figsize=(10, 7)) ax = fig.add_subplot(111, projection='3d') # 绘制平滑曲面 surf = ax.plot_surface(X, Y, log_val, cmap='jet', shading='interp') # 添加图表元素 ax.set_title('二维高斯拉普拉斯(LoG)函数3D图', fontsize=12) ax.set_xlabel('X') ax.set_ylabel('Y') ax.set_zlabel('LoG Value') fig.colorbar(surf, shrink=0.5, aspect=5) # 添加颜色条 plt.show()
你可以根据需要调整sigma和step参数:σ越大,LoG的“中心环”越宽;步长越小,曲面的细节越丰富。
内容的提问来源于stack exchange,提问作者john
相关产品推荐
相关产品推荐

