Excel+VBA处理高斯光束
文章目录
- 1 图片导入与裁剪
- 2 获取图片数据
- 3 数据拟合
1 图片导入与裁剪
插入图片没什么好说的,新建Excel,【插入】->【图片】。
由于图像比较大,所以要对数据进行截取,选中图片之后,点击选项卡右端的【图片格式】->【裁剪】,将光斑所在区域截取出来,如图所示
由于灰度图像在观感上比较单一,故可以通过重新着色的方法,为其添加伪彩色。
首先,复制一张图片,点击【图像格式】->【颜色】->【重新着色】;或者在【颜色】下选择其他变体,
然后将图片导出,由于Excel功能的限制,我们没法直接导出图片,所以将图片复制到PPT中,然后右键【图片】->【另存为图片】。为了便于后续的处理,保存为【bmp】格式。
2 获取图片数据
在选中图片的值之后,就可以提取图片中的数据了,我们需要用到VBA工具。如果初次使用,选择【文件】->【选项】->【自定义功能区】->选中开发工具。
添加之后,在菜单栏选择【开发工具】->【插入】->【按钮】,从而插入一个按钮,右键按钮->【编辑文字】,更名为【加载数据】。
然后右键按钮->【指定宏】,在弹出的对话框中添入【Load_Click】,然后点击【新建】,便可到达VBA编辑界面。并且已经写好了
Sub Load_Click()
End Sub
接下来我们就开始编写图片的编辑方法。
BMP文件包括三个部分,分别是文件头、颜色映射表和图片数据,其中文件头总计54位,存储着图片的格式宽高等信息;而数据区则根据图片的深度以及颜色信息对像素的值进行存储。
尽管我们拍摄的图像是灰度图,但经过PPT的重新存储,变成了24位的RGB图像,我们只需选择其中的一个通道即可。
VBA中通过单引号'
进行注释。
Sub Load_Click()Const file As String = "E:\Pictures\Facula1.bmp"Dim bytes() As ByteDim width, height, stride As Long '分别位图像的宽, 高, 偏移'获取bmp图片二进制数组Open file For Binary As #1 '#1表示文件编号ReDim bytes(LOF(1) - 1) '重新定义bytes的长度Get #1, , bytes '将文件1的内容写入bytesClose #1For i = 0 To 3start = start + bytes(i + 10) * 256 ^ iwidth = width + bytes(i + 18) * 256 ^ i 'bitmap中第18-21位为列数height = height + bytes(i + 22) * 256 ^ i 'bitmap中第22-25位为行数Nextstride = width * 3 + 2If (stride Mod 4) <> 0 Thenstride = stride - (stride Mod 4) + 4 'bitmap格式每行必须是4的倍数End IfCells.ClearFor i = 1 To heightFor j = 1 To widthpos = start + (j-1) * 3 + (i - 1) * strideCells(i, j).Value = bytes(pos) '将像素的灰度值赋给单元格NextNext
End Sub
点击【加载数据】按钮,就可以看图像的数据被加载到单元格中。
若将赋值语句Cells(i, j).Value = bytes(pos)
变成颜色变化,则可以通过单元格复现图像。
'...For i = 1 To heightFor j = 1 To widthpos = start + (j-1) * 3 + (i - 1) * stride'将单元格的颜色变为图像的颜色Cells(i, j).Interior.Color = RGB(bytes(pos + 2), bytes(pos + 1), bytes(pos))NextNext
点击加载数据
,就可以看到如下情景
3 数据拟合
当我们得到图像中的数据之后,需要对每一行的最大值进行提取。将鼠标定位到第一行数据的最后一列GH
,在新的一列GI
中输入=MAX(A1:GH1)
,从而从第一行的所有数据中求得最大值。
然后将鼠标放到刚刚操作的单元格的右下方,当鼠标变成黑色十字的时候双击,即可对这一列进行最大值操作。
得到最大值之后,将这一列的数据复制到新的sheet中,粘贴时如果出现错误,需选择右下角出现的复制选项,并选择粘贴数值。
选中这一列,点击【插入】->【推荐的图表】,从而得到光强分布的散点图,双击图表标题即可对其进行更改。
在Excel中,提供了初级的数据拟合功能,点击图像右上角的加号,会出现一系列图表元素,最底端即趋势线,鼠标浮动其上,右侧出现一个三角形,点击之后选择最下面的更多选项
。
可以看到Excel中提供了指数、对数、线性、多项式以及移动平均等多种拟合曲线,可惜并没有我们需要的Gauss函数。
y = a ⋅ exp ( − ( x − b c ) 2 ) y=a⋅\exp{(−(\frac{x−b}{c})^2)} y=a⋅exp(−(cx−b)2)
其中,a的值表示该函数的最大值;b表示其中心值,c表示当y值降到 1 e 2 \frac{1}{e^2} e21分之一处时x距离中心的位置。
然而,我们可以通过对原始数据进行简单的变换
ln y = ln a − ( x − b ) 2 c 2 ln y = − x 2 c 2 + 2 b x c 2 + ln a − b 2 c 2 \begin{aligned} \ln y&=\ln a-\frac{(x-b)^2}{c^2}\\ \ln y&=-\frac{x^2}{c^2}+\frac{2bx}{c^2}+\ln a-\frac{b^2}{c^2} \end{aligned} lnylny=lna−c2(x−b)2=−c2x2+c22bx+lna−c2b2
令 Y = ln y , A = − 1 c 2 , B = 2 b c 2 , C = ln a − b 2 c 2 Y=\ln y, A=-\frac{1}{c^2}, B = \frac{2b}{c^2}, C=\ln a-\frac{b^2}{c^2} Y=lny,A=−c21,B=c22b,C=lna−c2b2,则Gauss函数变为
Y = A x 2 + B x + C Y=Ax^2+Bx+C Y=Ax2+Bx+C
待拟合成功后,有 c = 1 − A , b = − B 2 A , a = exp 4 A C − B 2 4 A c=\frac{1}{\sqrt{-A}},b=-\frac{B}{2A},a=\exp\frac{4AC-B^2}{4A} c=−A1,b=−2AB,a=exp4A4AC−B2。
从而就可以进行多项式拟合了。
所以,首先在【B1】单元格中输入【=LN(A1)】,然后按照刚才的方法,将鼠标放置在单元格的右下角,待其变为黑色十字后双击,从而新建一列数据。
随后,对新建的数据仍然插入推荐的图表,并添加趋势线,然后在趋势线设置栏选中显示公式
。
可见,由于存在大量光斑之外的数据,所以拟合效果并不好,所以需要对数据重新选择
在弹出的选择数据源
窗口,重设图表数据区域。在本例中,将其设为=Sheet2!$B$50:$B$130
。其中Sheet2
为本sheet
的名字,$B$50:$B$130
表示B
列第50行到B
列第130行。
可见拟合效果好了很多,其中 A = − 0.0021 A=-0.0021 A=−0.0021, B = 0.1567 B=0.1567 B=0.1567, c = 1.5589 c=1.5589 c=1.5589,
根据 c = 1 − A , b = − B 2 A , a = exp 4 A C − B 2 4 A c=\frac{1}{\sqrt{-A}},b=-\frac{B}{2A},a=\exp\frac{4AC-B^2}{4A} c=−A1,b=−2AB,a=exp4A4AC−B2,可新开一个sheet
,并在其中输入公式
A | B | |
---|---|---|
1 | -0.0021 | =1/SQRT(-A1) |
2 | 0.1567 | =-A2/A1/2 |
3 | 1.5589 | =EXP((4*A1*A3-A2^2)/A1/4) |
从而计算出c=21.82, b=37.31, a=88.42
,但需要注意的是,我们刚刚在选取数据的时候,是从50开始的,所以b=50+37.31=87.31
。
相关文章:

Excel+VBA处理高斯光束
文章目录 1 图片导入与裁剪2 获取图片数据3 数据拟合 1 图片导入与裁剪 插入图片没什么好说的,新建Excel,【插入】->【图片】。 由于图像比较大,所以要对数据进行截取,选中图片之后,点击选项卡右端的【图片格式】…...

如何启动若依框架
Mysql安装 一、下载 链接:https://pan.baidu.com/s/1s8-Y1ooaRtwP9KnmP3rxlQ?pwd1234 提取码:1234 二、安装(解压) 下载完成后我们得到的是一个压缩包,将其解压,我们就可以得到MySQL 5.7.24的软件本体了(就是一个文件夹)&…...

案例:CentOS8 在 MySQL8.0 实现半同步复制
异步复制 MySQL 默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主节点如果 crash 掉了,此时主节点上已经提交的事务可能并没有传…...

阿里云带宽计费模式怎么选?如何收费的?
阿里云服务器带宽计费模式分为“按固定带宽”和“按使用流量”,有什么区别?按固定带宽是指直接购买多少M带宽,比如1M、5M、10M、100M等,阿里云直接分配用户所购买的带宽值,根据带宽大小先付费再使用;按使用…...

c#记录几个问题
最近在看c#,有几个问题记录下 1)全局变量,其实是声明一个public static类,里面包含一些public static变量和函数,也就是在程序开始运行后就创生了一个对应的存储空间,调用时就要写明是谁的什么变量。针对的…...

第69讲后端登录逻辑实现
Admin实体: TableName("t_admin") Data public class Admin {TableId(type IdType.AUTO)private Integer id; // 编号private String userName; // 用户名private String password; // 密码TableField(select false)private String newPassword; // 新…...

Qt 字符串类应用与常用基本数据类型
目录 操作字符串 查询字符串 Qt 常见数据类型 操作字符串 创建一个控制台项目 (1)QString提供一个二元的 “” 操作符,主要用于组合两个字符串。QString str1 "Hello World 传递给QString一个 const char* 类型的ASCII字符串 “He…...

JAVA面试题15
当然,我可以提供给您一些常见的Java面试题及其答案。以下是一些示例: 什么是Java的四种基本数据类型? 答案:Java的四种基本数据类型是整型(byte、short、int、long)、浮点型(float、double&…...

git安装及使用
1、下载git 官网 Windows系统Git安装教程(详解Git安装过程) 官网打不开的话,可以使用镜像地址 镜像地址 2、使用git Git的下载、安装与使用(Windows) 30分钟带你精通git使用 3、注册github https://github.com/ 4、github文档 h…...

电力负荷预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型(结合时间序列)
文章目录 效果一览文章概述源码设计参考资料效果一览 文章概述 电力负荷预测 | Matlab实现基于LSTM长短期记忆神经网络的电力负荷预测模型(结合时间序列) 所谓预测,就是指通过对事物进行分析及研究,并运用合理的方法探索事物的发展变化规律,对其未来发展做出预先估计和判断…...

力扣:455. 分发饼干
贪心解法思路: 1.先把两个数组按顺序遍历好,之后用最大的饼干来喂最大的胃口,如果最大的饼干不能喂饱最大的胃口,就除去这个最大的胃口,在剩下的为胃口中找最大的胃口来进行比对。这题主要历用了通过局部的优解&#…...

SpringCloud-项目引入Nacos
一、安装Nacos服务 首先,我们需要从 Nacos 的官方网站下载发布版本。下载地址:Releases alibaba/nacos GitHub 选择合适的版本并下载,解压缩得到 Nacos 的安装包。 在解压后的 Nacos 目录中,找到 bin 文件夹。 用写字板编辑…...

如何在 Windows 10/11 上恢复回收站永久删除的文件夹?
经验丰富的 Windows 用户将使用 Windows 备份和还原或文件历史记录来恢复不在回收站中的已删除文件夹。这些工具确实有助于 Windows 文件夹恢复,但并不总是有效。现在有许多专用的 Windows 数据恢复软件和免费解决方案可以替代它们,为 Windows 用户提供了…...

七、滚动条操作——调整图像对比度
对比度调整:是在原来图像基础上进行相应的公式调整,是类似乘法操作,本身像数值越大,对比度增加之后其与低像素点值差距越大,导致对比增强 项目最终效果:通过滚动条trackbar来实现调整图片亮度的功能 我这里…...

免费生成ios证书的方法(无需mac电脑)
使用hbuilderx的uniapp框架开发移动端程序很方便,可以很方便地开发出移动端的小程序和app。但是打包ios版本的app的时候却很麻烦,官方提供的教程需要使用mac电脑来生成证书,但是mac电脑却不便宜,一般的型号都差不多上万。 因此&a…...

gtkmm4 应用程序使用 CSS 样式
文章目录 前言css选择器css文件示例源代码效果动态设置css-classes 前言 程序样式和代码逻辑分离开 使代码逻辑更可观 css选择器 Cambalache提供了两种css-classes 相当于css里的类名:class“类名”css-name 相当于css里的标签名:spin div p 啥的 如上我设置了这个按钮控件的…...

科研绘图-半小提琴图-
文章目录 前言1.软件安装-Origin 20222.绘制半小提琴图3.绘制径向条形图 前言 本文叙述记录的是一些科研绘图的实现方法,具体介绍从软件安装到实现图表绘制的详细过程。 1.软件安装-Origin 2022 Origin是一款具有丰富绘图功能的科研绘图软件,安装过程…...

机器学习 | 深入集成学习的精髓及实战技巧挑战
目录 xgboost算法简介 泰坦尼克号乘客生存预测(实操) lightGBM算法简介 《绝地求生》玩家排名预测(实操) xgboost算法简介 XGBoost全名叫极端梯度提升树,XGBoost是集成学习方法的王牌,在Kaggle数据挖掘比赛中,大部分获胜者用了XGBoost。…...

SNMP(简单网络管理协议)介绍
简介 作为系统管理员的重要工作之一是收集关于服务器和基础设施的准确信息。有许多工具和选项可用于收集和处理这种类型的信息。其中许多工具都是建立在一种称为SNMP的技术之上。 SNMP代表简单网络管理协议。这是服务器可以共享有关其当前状态的信息的一种方式,也…...

Spring中常见的设计模式
使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、程序的重用性、更具有灵活、优雅,而Spring中共有九种常见的设计模式 工厂模式 工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一。这种类型的设计模式属于…...

【MySQL】——数值函数的学习
🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Z1fAnfrxGD7I5gqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…...

LLMs模型选择,LLMs复读机问题,LLMs长文本处理方案
为什么会出现 LLMs 复读机问题? LLMs 复读机问题(LLMs Parroting Problem)是指大型语言模型(LLMs)在生成文本时可能出现的重复或重复先前输入内容的现象。出现LLMs复读机问题可能有以下几个原因: 数据偏差…...

LeetCode.144. 二叉树的前序遍历
题目 144. 二叉树的前序遍历 分析 这道题目是比较基础的题目,我们首先要知道二叉树的前序遍历是什么? 就是【根 左 右】 的顺序,然后利用递归的思想,就可以得到这道题的答案,任何的递归都可以采用 栈 的结构来实现…...

Redis复制
文章目录 1.Redis复制是什么2.Redis能干嘛3.权限细节4.基本操作命令5.常用三招5.1 一主二仆5.2 薪火相传5.3 反客为主 6.复制原理和工作流程7.复制的缺点 1.Redis复制是什么 就是主从复制,master以写为主,Slave以读为主。当master数据变化的时候&#x…...

C++入门学习(二十七)跳转语句—break语句
1、与switch语句联合使用 C入门学习(二十三)选择结构-switch语句-CSDN博客 #include <iostream> #include <string> using namespace std;int main() { int number;cout<<"请为《斗萝大路》打星(1~5※):" &…...

Spark安装(Yarn模式)
一、解压 链接:https://pan.baidu.com/s/1O8u1SEuLOQv2Yietea_Uxg 提取码:mb4h tar -zxvf /opt/software/spark-3.0.3-bin-hadoop3.2.tgz -C /opt/module/spark-yarn mv spark-3.0.3-bin-hadoop3.2/ spark-yarn 二、配置环境变量 vim /etc/profile…...

1.4 Binance_interface API U本位合约行情
Binance_interface API U本位合约行情 Github地址PyTed量化交易研究院 1. API U本位合约行情接口总览 方法解释Pathget_ping测试服务器连通性 PING/fapi/v1/pingget_time获取服务器时间/fapi/v1/timeget_exchangeInfo获取交易规则和交易对/fapi/v1/exchangeInfoget_depth深度…...

单片机学习笔记---AT24C02(I2C总线)
目录 有关储存器的介绍 存储器的简介 存储器简化模型 AT24C02介绍 AT24C02引脚及应用电路 I2C总线介绍 I2C电路规范 开漏输出模式和弱上拉模式 其中一个设备的内部结构 I2C通信是怎么实现的 I2C时序结构 起始条件和终止条件 发送一个字节 接收一个字节 发送应答…...

c++恶魔轮盘制造第1期输赢
小常识,恶魔叫DEALER。 赢了很简单 void sheng() { cout<<"你获胜了!";MessageBox(NULL,TEXT("你的钱~~~~~~给你"),TEXT("DEALER"),MB_OK);system("pause");system("cls"); } 输了我用了个选…...

60-JS-Ajax
ajax取数据的一种手段,局部刷新,例如弹幕 1.ajax的使用,创建ajax对象,发起对服务器请求 2.核心对象XMLHttpRequest对象(简称XHR) CSS:Cascading Style Sheets(层叠样式表) HTML:Hypertext Markup Language(超文本标记语言) 3.发起对服务器的请求 浏览器方式请求:打…...