Python实现三维高斯函数图像显示

本文展示了如何使用numpy和TensorFlow两种不同的方法来生成并绘制3D高斯分布。首先,通过numpy模块创建网格数据,并计算高斯分布函数值,然后使用matplotlib进行3D表面图的绘制。接着,利用TensorFlow定义高斯核函数,同样生成3D高斯分布并绘制。这两种方法都详细介绍了代码实现过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、用numpy模块实现

import numpy as np
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d

x, y = np.mgrid[-2:2:0.01, -2:2:0.01]

z=(1/2*math.pi*3**2)*np.exp(-(x**2+y**2)/2*3**2)
ax = plt.subplot(111, projection='3d') 
ax.plot_surface(x, y, z, rstride=1, cstride=1, cmap='rainbow', alpha=0.9)#绘面
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('z')
plt.show()

在这里插入图片描述
2、用TensorFlow实现

import numpy as np
import matplotlib.pyplot as plt
import math
import mpl_toolkits.mplot3d
import tensorflow as tf
from sklearn import datasets

sess = tf.InteractiveSession()
gamma = tf.constant(-1.0)
x, y = np.mgrid[-2:2:0.01, -2:2:0.01]

x_data = tf.placeholder(shape=[400, 400], dtype=tf.float32)
y_data = tf.placeholder(shape=[400, 400], dtype=tf.float32)

Kernel = tf.exp(tf.multiply(gamma, tf.add((x_data*x_data),(y_data*y_data))))
Kernel = sess.run(Kernel, feed_dict={x_data: x,y_data: y})

ax = plt.subplot(111, projection='3d') 
ax.plot_surface(x, y, Kernel, rstride=1, cstride=1, cmap='rainbow', alpha=0.9)#绘面
ax.set_xlabel('x')
ax.set_ylabel('y')
ax.set_zlabel('Kernel')
plt.show()

在这里插入图片描述

### 三维高斯函数的数学定义 三维高斯函数可以看作是一个扩展到三个维度的空间分布模型。它的基本形式如下: \[ G(x, y, z; \mu_x, \mu_y, \mu_z, \sigma_x, \sigma_y, \sigma_z) = A e^{-\left(\frac{(x-\mu_x)^2}{2\sigma_x^2} + \frac{(y-\mu_y)^2}{2\sigma_y^2} + \frac{(z-\mu_z)^2}{2\sigma_z^2}\right)} \] 其中: - \(A\) 是幅度系数,决定了峰值的高度; - \((\mu_x, \mu_y, \mu_z)\) 表示三维空间中的均值向量,即高斯分布的中心位置; - \((\sigma_x, \sigma_y, \sigma_z)\) 是标准差向量,控制着沿各个轴方向上的扩散程度。 这种表达方式允许我们在三维空间中描述具有不同尺度和平移特性的概率密度分布[^1]。 当各维的标准差相同 (\(\sigma_x=\sigma_y=\sigma_z=\sigma\)) 并且均值位于原点时,上述方程简化为球对称的形式: \[ G(r;\mu=0,\sigma)= Ae^{-(r/\sqrt{2}\sigma)^2}, r=\sqrt{x^2+y^2+z^2}. \] 这表明,在特定条件下,三维高斯函数可退化成仅依赖于径向距离\(r\) 的单变量指数衰减模式。 ### 应用领域分析 #### 图形学与计算机视觉 在图形学和计算机视觉领域,三维高斯函数被广泛应用于场景重建以及真实感渲染技术之中。例如提到过的 **3DGS (Three-Dimensional Gaussian Scattering)** 方法就是利用一系列加权求和后的三维高斯基元来近似复杂表面反射属性或者整个物体形状轮廓的信息[^2]。这种方法不仅能够有效降低计算成本,还具备良好的鲁棒性和适应能力面对多种光照条件变化下的目标识别任务需求。 另外,在医学影像处理方面,CT 或 MRI 扫描得到的数据通常呈现连续体特性,因此也可以借助三维高斯混合模型来进行分割操作或是特征提取工作。通过对感兴趣区域内的像素强度分布情况进行统计建模之后再配合EM算法迭代估计未知参数直至收敛即可完成自动分类过程。 #### 物理科学模拟仿真 除了以上提及的人工智能相关应用场景之外,在物理学研究当中同样少不了见到三维高斯型势能曲线的身影。比如分子动力学模拟过程中涉及到原子间相互作用力场设定的时候经常会选用类似的解析形式作为初始猜测解;又或者是量子力学框架下薛定谔波动方程式求解时也会遇到相似结构类型的波函数展开项等等情况都需要深入探讨其背后蕴含的意义及其具体表现形式特点。 ```python import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt def gaussian_3d(x, y, z, mu=(0, 0, 0), sigma=(1, 1, 1)): X,Y,Z=np.meshgrid(x,y,z) g=A*np.exp(-(((X-mu[0])**2)/(2*sigma[0]**2)+ ((Y-mu[1])**2)/(2*sigma[1]**2)+((Z-mu[2])**2)/(2*sigma[2]**2))) return g fig=plt.figure(figsize=(8,6)) ax=fig.add_subplot(111,projection='3d') x=y=z=np.linspace(-5,5,100) Gaussian_values=gaussian_3d(x=x,y=y,z=z,mu=[0,0,0],sigma=[1,1,1]) xs,ys,zs=np.unravel_index(Gaussian_values.argmax(),Gaussian_values.shape) sc=ax.scatter(xs, ys, zs,c=Gaussian_values[xs][ys][zs],cmap="viridis") plt.colorbar(sc,label="Intensity") plt.show() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值