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=aexp((cxb)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=lnac2(xb)2=c2x2+c22bx+lnac2b2

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=lnac2b2,则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=A 1,b=2AB,a=exp4A4ACB2

从而就可以进行多项式拟合了。

所以,首先在【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=A 1,b=2AB,a=exp4A4ACB2,可新开一个sheet,并在其中输入公式

AB
1-0.0021=1/SQRT(-A1)
20.1567=-A2/A1/2
31.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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序算法---归并排序

原创不易&#xff0c;转载请注明出处。欢迎点赞收藏~ 归并排序是一种常见的排序算法&#xff0c;它采用了分治的思想。它将一个待排序的数组递归地分成两个子数组&#xff0c;分别对两个子数组进行排序&#xff0c;然后将排好序的子数组合并成一个有序数组。 具体的归并排序过…

MQTT 服务器(emqx)搭建及使用

推荐阅读&#xff1a; MQTT 服务器(emqx)搭建及使用 - 哔哩哔哩 (bilibili.com) 一、EMQX 服务器搭建 1、下载EMQX https://www.emqx.com/zh/try?productbroker 官方中文手册&#xff1a; EMQX Docs 2、安装使用 1、该软件为绿色免安装版本&#xff0c;解压缩后即安装完…

【精选】java继承进阶,子类继承父类(内存图、内存分析工具)

&#x1f36c; 博主介绍&#x1f468;‍&#x1f393; 博主介绍&#xff1a;大家好&#xff0c;我是 hacker-routing &#xff0c;很高兴认识大家~ ✨主攻领域&#xff1a;【渗透领域】【应急响应】 【python】 【VulnHub靶场复现】【面试分析】 &#x1f389;点赞➕评论➕收藏…

hexo 博客搭建以及踩雷总结

搭建时的坑 文章置顶 安装一下这个依赖 npm install hexo-generator-topindex --save然后再文章的上面设置 top: number&#xff0c;数字越大&#xff0c;权重越大&#xff0c;也就是越靠顶部 hexo 每次推送 nginx 都访问不到 宝塔自带的 nginx 的 config 里默认的角色是 …

详细关于如何解决mfc140.dll丢失的步骤,有效修复mfc140.dll文件丢失的问题。

mfc140.dll文件是Microsoft Visual Studio 2015程序集之一&#xff0c;它包含用于支持多种功能的代码和库。当这个mfc140.dll文件丢失时&#xff0c;可能会导致相关程序运行出错甚至无法运行。很多用户可能会遇到mfc140.dll丢失的问题&#xff0c;但是这并不是不可解决的困难。…

【微机原理与单片机接口技术】MCS-51单片机的引脚功能介绍

前言 MCS-51是指由美国Intel公司生产的一系列单片机的总称。MCS-51系列单片机型号有很多&#xff0c;按功能分位基本型和增强型两大类&#xff0c;分别称为8051系列单片机和8052系列单片机&#xff0c;两者以芯片型号中的末位数字区分&#xff0c;1为基本型&#xff0c;2为增强…

[职场] 如何通过运营面试_1 #笔记#媒体#经验分享

如何通过运营面试 盈利是公司的事情&#xff0c;而用户就是你运营的事情。你需要彻底建立一个庞大而有效的用户群&#xff0c;这样才能让你们的公司想盈利就盈利&#xff0c;想战略就战略&#xff0c;想融资就融资。 一般从事运营的人有着强大的自信心&#xff0c;后台数据分析…

PlantUML绘制UML图教程

UML&#xff08;Unified Modeling Language&#xff09;是一种通用的建模语言&#xff0c;广泛用于软件开发中对系统进行可视化建模。PlantUML是一款强大的工具&#xff0c;通过简单的文本描述&#xff0c;能够生成UML图&#xff0c;包括类图、时序图、用例图等。PlantUML是一款…

C++ 贪心 区间问题 最大不相交区间数

给定 N 个闭区间 [ai,bi] &#xff0c;请你在数轴上选择若干区间&#xff0c;使得选中的区间之间互不相交&#xff08;包括端点&#xff09;。 输出可选取区间的最大数量。 输入格式 第一行包含整数 N &#xff0c;表示区间数。 接下来 N 行&#xff0c;每行包含两个整数 ai…

Transformer的PyTorch实现之若干问题探讨(二)

在《Transformer的PyTorch实现之若干问题探讨&#xff08;一&#xff09;》中探讨了Transformer的训练整体流程&#xff0c;本文进一步探讨Transformer训练过程中teacher forcing的实现原理。 1.Transformer中decoder的流程 在论文《Attention is all you need》中&#xff0…

阿里云游戏服务器多少钱一个月?

阿里云游戏服务器租用价格表&#xff1a;4核16G服务器26元1个月、146元半年&#xff0c;游戏专业服务器8核32G配置90元一个月、271元3个月&#xff0c;阿里云服务器网aliyunfuwuqi.com分享阿里云游戏专用服务器详细配置和精准报价&#xff1a; 阿里云游戏服务器租用价格表 阿…

【QT+QGIS跨平台编译】之三十一:【FreeXL+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

文章目录 一、FreeXL介绍二、文件下载三、文件分析四、pro文件五、编译实践一、FreeXL介绍 【FreeXL跨平台编译】:Windows环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台编译】:Linux环境下编译成果(支撑QGIS跨平台编译,以及二次研发) 【FreeXL跨平台…

Linux基础-配置网络

Linux配置网络的方式 1.图形界面 右上角-wired-配置 点加号-新建网络配置文件2.NetworkManager工具 2.1用图形终端nmtui 1.新建网络配置文件add 1.指定网络设备的类型Ethernet 2.配置网络配置文件的名称&#xff0c;名称可以有空格 3.配置网络配置文件对应的物理网络设备的…

清平乐-春风丽日

今天&#xff0c;是2024年农历除夕日&#xff0c;远方家人已于昨夜风尘扑扑地倦鸟归巢&#xff0c;团聚过龙年&#xff0c;今晨酣睡未起。老龄笔者心情极佳&#xff0c;一夜好梦醒来&#xff0c;推窗仰头展望苍穹&#xff0c;喜上心头&#xff1a;啊&#xff01;接连几天的小雨…

如何在 Mac 上恢复永久删除的文件:有效方法

您是否错误地从 Mac 中删除了某个文件&#xff0c;并且确信它已经永远消失了&#xff1f;好吧&#xff0c;你可能错了。即使您认为已永久删除计算机上的数据&#xff0c;仍有可能将其恢复。 在本文中&#xff0c;您将了解如何在 Mac 上恢复永久删除的文件&#xff0c;并了解增…

vim常用命令以及配置文件

layout: article title: “vim文本编译器” vim文本编辑器 有三种模式: 命令模式 文本模式, 末行模式 vim命令大全 - 知乎 (zhihu.com) 命令模式 插入 i: 切换到输入模式&#xff0c;在光标当前位置开始输入文本。 a: 进入插入模式&#xff0c;在光标下一个位置开始输入文…

C++多线程:this_thread 命名空间

std::this_thread 是 C 标准库中提供的一个命名空间&#xff0c;它包含了与当前线程相关的功能。这个命名空间提供了许多与线程操作相关的工具&#xff0c;使得在多线程环境中更容易进行编程。 源码类似于如下&#xff1a; namespace std{namespace this_thread{//...........…

Swift Combine 管道 从入门到精通三

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二 1. 用弹珠图描述管道 函数响应式编程的管道可能难以理解。 发布者生成和发送数据&#xff0c;操作符对该数据做出响应并有可能更改它&#xff0c;订阅者请求并接收这些数据。 这…

《学成在线》微服务实战项目实操笔记系列(P1~P83)【上】

史上最详细《学成在线》项目实操笔记系列【上】&#xff0c;跟视频的每一P对应&#xff0c;全系列12万字&#xff0c;涵盖详细步骤与问题的解决方案。如果你操作到某一步卡壳&#xff0c;参考这篇&#xff0c;相信会带给你极大启发。 一、前期准备 1.1 项目介绍 P2 To C面向…

vue3 之 商城项目—详情页

整体认识 路由配置 准备组件模版 <script setup></script><template><div class"xtx-goods-page"><div class"container"><div class"bread-container"><el-breadcrumb separator">">&…