二维高斯拟合20240815

news2024/11/25 13:16:52

二维高斯拟合

高斯函数表达式

二维高斯函数是一个在二维空间中用来表示高斯分布的函数,常用于统计学、图像处理和机器学习等领域。其数学表达式通常为:

f ( x , y ) = 1 2 π σ x σ y 1 − ρ 2 exp ⁡ ( − 1 2 ( 1 − ρ 2 ) ( ( x − μ x ) 2 σ x 2 − 2 ρ ( x − μ x ) ( y − μ y ) σ x σ y + ( y − μ y ) 2 σ y 2 ) ) f(x,y)=\frac{1}{2\pi\sigma_x\sigma_y\sqrt{1-\rho^2}} \exp\left(-\frac{1}{2(1-\rho^2)}\left(\frac{(x-\mu_x)^2}{\sigma_x^2} - \frac{2\rho(x-\mu_x)(y-\mu_y)}{\sigma_x\sigma_y} + \frac{(y-\mu_y)^2}{\sigma_y^2}\right)\right) f(x,y)=2πσxσy1ρ2 1exp(2(1ρ2)1(σx2(xμx)2σxσy2ρ(xμx)(yμy)+σy2(yμy)2))

其中,( (x,y) ) 是二维平面上的点,( μ x \mu_x μx ) 和 ( μ y \mu_y μy ) 是分布的均值,( σ x \sigma_x σx ) 和 ( σ y \sigma_y σy ) 是两个方向的标准差,( ρ \rho ρ ) 是两个维度之间的相关系数。这个表达式描述了在二维平面上的高斯分布[函数]

方案一 Matlab:

MATLAB 提供多种方法来计算二维高斯函数的积分。

方案二 Python

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import pandas as pd

# 读取数据
# df = pd.read_excel(path)

# 生成数据
x = np.linspace(-2, 2, 30)
y = np.linspace(-2, 2, 30)
X, Y = np.meshgrid(x, y)
Z = np.exp(-X**2 - Y**2)

# 添加随机噪音
Z_noisy = Z + 0.05*np.random.randn(*Z.shape)

# 二维高斯模型
def TwoD_gaussian(xy, a, x0, y0, sigma_x, sigma_y):
    """
    
    """
    x, y = xy
    z=a*np.exp(-((x-x0)**2/(2*sigma_x**2) + (y-y0)**2/(2*sigma_y**2)))
    return z.ravel()

# 初始参数
a0 = [1, 0, 0, 1, 1]

# 拟合
popt, pcov = curve_fit(TwoD_gaussian, (X, Y), Z_noisy.ravel(), p0=a0)

# 绘图
fig = plt.figure()
ax = fig.add_subplot(1, 2, 1, projection='3d')
ax.plot_surface(X, Y, Z)
ax.set_title('Original')
ax = fig.add_subplot(1, 2, 2, projection='3d')
ax.plot_surface(X, Y, TwoD_gaussian((X, Y), *popt).reshape(X.shape))
ax.set_title('Fitted')
plt.show()

程序运行后图像如下

在这里插入图片描述
如下代码有写问题还需要改进。

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def gaussian_2d(x, y, amplitude, xo, yo, sigma_x, sigma_y, theta):
    a = (np.cos(theta)**2)/(2*sigma_x**2) + (np.sin(theta)**2)/(2*sigma_y**2)
    b = -(np.sin(2*theta))/(4*sigma_x**2) + (np.sin(2*theta))/(4*sigma_y**2)
    c = (np.sin(theta)**2)/(2*sigma_x**2) + (np.cos(theta)**2)/(2*sigma_y**2)
    return amplitude * np.exp(-(a*(x - xo)**2 + 2*b*(x - xo)*(y - yo) + c*(y - yo)**2))

def generate_data():
    # 生成示例数据
    x = np.linspace(0, 10, 100)
    y = np.linspace(0, 10, 100)
    x, y = np.meshgrid(x, y)
    amplitude = 3.0
    xo = 5.0
    yo = 5.0
    sigma_x = 2.0
    sigma_y = 2.0
    theta = np.pi / 4
    z = gaussian_2d(x, y, amplitude, xo, yo, sigma_x, sigma_y, theta)
    z += 0.2 * np.random.randn(x.shape[0], x.shape[1])  # 添加一些噪声
    return x, y, z

def fit_gaussian(x, y, z):
    # 初始猜测参数
    initial_guess = [3.0, 5.0, 5.0, 2.0, 2.0, np.pi / 4]
    popt, pcov = curve_fit(gaussian_2d, np.vstack((x.ravel(), y.ravel())), z.ravel(), p0=initial_guess)
    return popt

def plot_fit(x, y, z, popt):
    # 绘制原始数据和拟合结果
    fig, ax = plt.subplots(1, 1)
    ax.imshow(z, origin='lower', extent=[x.min(), x.max(), y.min(), y.max()])
    ax.contour(x, y, gaussian_2d(x, y, *popt), colors='r')
    plt.show()

if __name__ == "__main__":
    x, y, z = generate_data()
    popt = fit_gaussian(x, y, z)
    plot_fit(x, y, z, popt)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2045399.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

面向未来的算力网络连接技术架构

面向未来的算力网络连接发展特点与实践 物理层网络基础设施是算力网络的“最后一公里”,光纤光缆等物理层网络基础设施的发展有助于保障算力网络基础设施的稳健发展。物理层核心技术发生了巨大变化,在交换、传输等方面不断更新迭代,当前铜缆的…

【云原生】看一眼haproxy,秒变技术大佬(理论篇)

一、负载均衡 1、什么是负载均衡? 负载均衡:Load Balance,简称LB,是一种服务或基于硬件设备等实现的高可用反向代理技术,负载均衡将特定的业务(网络服务、网络流量等)分担给指定的一个或多个后端特定的服务器或设备&…

Secure CRT 9.x版本高亮着色配置文件

Secure CRT的网络配置文件高亮显示,还在完善,逐渐适配不同厂商 设备名字自动蓝色高亮显示设备接口名高亮显示IPv4地址、IPv6地址、MAC地址高亮显示掩码、反掩码高亮显示设备SN号高亮显示接口状态、设备状态等高亮显示各路由协议高亮显示 【下载地址】效果…

基于Spring Boot的疗养院管理系统的设计与实现

TOC springboot234基于Spring Boot的疗养院管理系统的设计与实现 第1章 绪论 1.1选题动因 当前的网络技术,软件技术等都具备成熟的理论基础,市场上也出现各种技术开发的软件,这些软件都被用于各个领域,包括生活和工作的领域。…

输出Docker容器的启动命令行脚本

当Docker容器启动后,如果忘记启动参数,比如目录挂载、端口映射等,可以通过Portainer等容器管理工具查看。但是,有时希望能获取容器启动的命令行,因为需要再启动一个类似容器,怎么办呢? 有一款工…

【Python养成】:输出两个等腰三角形且平行方向

项目场景: 遇到一个小小的高中小程序题目,有趣就做 了一下,供大家参考。 问题描述 要求使用python编程,实现如下图形。 原因分析: 其实就是 找规律和找空格。先左边后右边。具体解释可以找AI。太简单了没必要亲自讲解…

Linux 7 x86平台上安装达梦8数据库

1、环境描述 2、安装前准备 2.1 操作系统信息调研 Linux平台需要通过命令查看操作系统版本、位数、磁盘空间、内存等信息。 CPU信息 [rootray1 ~]# cat /proc/cpuinfo | grep -E "physical id|core id|cpu cores|siblings|cpu MHz|model name|cache size"|tail -n…

【PY模型训练】最终测试

Anacoda3 安装 1. conda -V 2.conda config --add channels https://mirrors.ustc.edu.cn/anaconda/pkgs/main/ 3.打开.condarc文件,将下面内容直接放入.condarc文件里面 channels: - conda-forge - defaults show_channel_urls: true default_ch…

【Qt】 QWidget的cursor属性

QWidget的cursor属性 cursor属性可以设置当鼠标指向不同控件,不同窗口会产生不同的效果。 API说明 cursor() 获取到当前 widget 的 cursor 属性, 返回 QCursor 对象. 当⿏标悬停在该 widget 上时, 就会显⽰出对应的形状. setCursor(const QCursor& cursor) …

CSS——less

一、less简介 1、less是一门css的预处理语言。是一个css的增强版,通过less可以编写更少的代码实现更强大的样式。 2、css原先也只支持变量的设置。 变量的设置可以便捷更改一样的样式,其中,calc()是计算函数。 3、在le…

【6大设计原则】精通设计模式之里氏代换原则:从理论到实践,掌握代码演化的黄金法则

一、引言 1.1 设计模式的必要性 在软件开发的复杂性面前,设计模式提供了一套成熟的解决方案,它们是经过多年实践总结出来的,能够帮助我们应对各种编程难题。设计模式不仅仅是一种编程技巧,更是一种编程哲学,它能够提…

CSS——动画(animation)

一、过渡(transition) 1、通过过渡可以指定一个属性发生变化时的切换方式 2、通过过渡可以创建一些非常好的效果,提升用户体验 3、常用属性值 ① transition-property 指定要执行过渡的属性 多个属性间使用,隔开如果所有…

Ubuntu24.04搭建maxkb开发环境

接上文:windows10搭建maxkb开发环境(劝退指南) 上文在windows10环境搭建maxkb开发环境遇到各种坑,后面就转战ubuntu平台,果然比较顺利的完成开发环境搭建。当然遇到相关的问题还是可以参考上文《windows10搭建maxkb开发…

数据库根据日期统计SQL编写记录

统计每天产生多少数据 SELECT to_char("日期字段",YYYY-MM-dd) time ,count(*) FROM "表名" GROUP BY time;统计每月产生多少数据 SELECT to_char("日期字段",YYYY-MM) time ,count(*) FROM "表名" GROUP BY time;统计每年产生多少数…

unity游戏开发005:资源的导入

“君子之学,无时无处而不以立志为事” unity游戏开发 前言文章有误敬请斧正 不胜感恩!||unity游戏开发005 Unity资源导入指南一、资源的种类二、资源导入的基本步骤三、导入资源的设置四、导入资源的注意事项五、常见问题及解决方案六、总结 前言 昨天我…

大数据技术——实战项目:广告数仓(第八部分)FineBI实战

目录 第1章 FineBI概述 第2章 FineBI部署 第3章 FineBI实战 3.1 需求回顾 3.2 添加Clickhouse驱动 3.3 添加Clickhouse数据库连接 3.4 添加数据集 3.5 创建分析主题并选择数据集 3.6 加工数据 3.7 创建可视化组件 3.7.1 地图可视化组件 3.7.2 投放平台流量柱状图…

【C语言篇】深入理解指针4(模拟实现qsort函数)

文章目录 回调函数是什么qsort函数介绍和使用举例qsort函数介绍qsort函数排序整型数据使用qsort排序结构数据 qsort函数的模拟实现总结写在最后 回调函数是什么 回调函数就是⼀个通过函数指针调⽤的函数。 如果你把函数的指针(地址)作为参数传递给另⼀…

豆包MarsCode:开启AI辅助编程的新时代

文章目录 引言MarsCode简介主要功能安装步骤JetBrains 安装1. /doc 文档生成2. /fix 智能修复 AI Fix3. /test 单元测试生成 使用步骤深入与最佳实践常见问题解答结语学习资源互动环节 引言 在人工智能技术飞速发展的今天,编程领域的创新也在不断涌现。豆包MarsCod…

从繁琐到高效:采购合同管理软件如何使企业受益

企业普遍面临由合同管理复杂性引发的压力,这已成为一个普遍现象。手动处理和整理大量的关键信息,同时确保所有文档的透明度和一致性,无疑是一项重大挑战。为了降低流程时间并提高效率,采用有效的工具显得尤为必要。 然而&#xf…