Octave处理高斯光束

文章目录

    • 读取图像
    • 截取感兴趣区域
    • 强度图
    • 拟合

Octave是一种开源的数值计算软件,主要用于科学计算、数据分析和数值模拟等领域。既提供了一个用户友好的命令行界面,使用户能够通过输入简单的命令来进行各种数学运算和数据操作。也提供了功能完备的GUI窗口,可以时刻监控变量。因其与Matlab相似的语法和功能,因此也被视为Matlab的开源替代品。

用不同的语言和工具处理高斯光束:
Python✨R语言✨Julia✨Mathemetica✨C#✨Excel+VBA✨ImageJ✨Octave

读取图像

Octave与Matlab有着几乎完全相同的语法,堪称Matlab的最佳开源替代。其图像处理方法也与Matlab如出一辙,首先,通过imread打开图像。

Octave界面上方会显示当前目录,若图像在当前目录中,可使用相对路径;否则需要使用绝对路径。

img = imread('test.bmp');%通过相对路径读取图片
img = imread('D:\Code\optics\img\test.bmp');%通过绝对路径读取图片
size(img)
%ans =
%        1024        1280
imshow(img)

下图是Octave的绘图窗口。

在这里插入图片描述

截取感兴趣区域

上图中存在大量的无用信息,目标光斑仅占据很小的一片区域,故需对图像进行截取,首先通过函数ginput选择截取区域。ginput操作的是最后被打开而未被关闭的窗口对象,其输入参数为将要选取的点的个数,在这里我们选择两个点将目标区域框起来,其返回值为选取点的横纵坐标。

和Matlab不同,如果不明确其输出变量X,Y,Btn,那么返回值将只显示第一项,即X。

imshow(img)
[X,Y,Btn] = ginput(2)
%X =
%   353.24
%   434.34
%Y =
%   178.93
%   265.93
%Btn =
%   1
%   1

接下来通过矩阵选取的方式,选择感兴趣的区域,需要注意的是,截取图像时行在前,列在后,而x代表列数,y代表行数。截取之后的图片如下图所示

roi = img(178:265, 353:434);
imshow(roi)

在这里插入图片描述

强度图

灰度图并不直观,相比之下,3D网格图可以更加直观地表现光斑的强度信息,mesh函数可以做到这一点

mesh(roi)

通过view函数,可调整网格图的视角,例如,[0 0 1]表示俯视图

view([0 0 1])

二者效果如下

默认视图view([0 0 1])
在这里插入图片描述在这里插入图片描述

拟合

高斯光束之所以被冠以高斯之名,乃因其在空间中强度呈现出高斯分布,所以接下来就要通过高斯函数对齐进行拟合。然而作为二维数据的图像,在拟合时并不直观,故此可从每一行选出最大值作为单一坐标下的强度,然后再行数据拟合。

arr = max(roi);
arr = double(arr);      %将其转为浮点型
x = 1:length(arr)*1.0;	%创建x坐标
plot(arr)

效果如下

在这里插入图片描述

Octave中并没有内置可视化的数据拟合工具,但开源软件的优势就是,有着无数开发者为其提供新的功能,比如一位瑞士老哥就开发了一款非线性

进入他的主页andreasstahel,点击Octave/Matlab,找到FitToolNL.m并下载。然后在当前Octave窗口,点击文件->打开,以打开FitToolNL.m文件,然后点击绿色三角号运行。输入参数即运行结果如下图所示

在这里插入图片描述

其中, x , y x,y x,y是待拟合变量,右侧function为拟合函数类型, p 0 p_0 p0为初始参数,60差不多是下面曲线的最大值,40差不多是其峰值所在位置。

左下角为拟合结果,得到高斯函数为

57.9767 exp ⁡ − ( x − 38.7699 14.1044 ) 2 57.9767\exp -(\frac{x-38.7699}{14.1044})^2 57.9767exp(14.1044x38.7699)2

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

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

相关文章

方案:智能分析网关V4在高校实验室安全管理中的应用

一、方案背景 实验室作为科研与教学的核心场所,其重要性不言而喻。高校实验室由于其开放性与多样性,安全管理尤为重要。高校实验室的安全管理,不仅是保障科研与教学质量的基础,更是校园安全的重要组成部分。一旦发生安全事故&…

普中STM32-PZ6806L开发板(HAL库函数实现-按键扫描)

简介 实现按键扫描, 实现四个按键按下控制灯的亮灭 电路原理图 按键电路原理图 按键与主芯片引脚原理图 其他知识 原理图分析 Key_UP按下会有高电平输入, 所以电路设置应该是默认低电平, 初始化为下拉输入 Key_Left/Right/Down按下会有低电平, 初始化为下拉输…

今年努力输出的嵌入式Linux视频

今年努力了一波,几个月周六日无休,自己在嵌入式linux工作有些年头,结合自己也是一直和SLAM工程师对接,所以输出了一波面向SLAM算法工程师Linux课程,当然嵌入式入门的同学也可以学习。下面是合作的官方前面发的宣传文章…

浅学lombok

Lombok(Project Lombok)是一个用于 Java 编程语言的开源库,旨在减少 Java 代码中的冗余和样板代码,提高开发人员的生产力。它通过使用注解来自动生成 Java 类的常见方法和代码,从而使开发人员能够编写更简洁、更具可读…

DrGraph原理示教 - OpenCV 4 功能 - 单通道图

通道 OpenCV的核心处理对象是Mat,大体是一个二维数组,加上了各种功能函数。 很多的图像处理,会在单通道或二值化的基础上进行,比如连通域、目标识别等。这里的通道就是channels。 不同的图像处理算法可能对通道数有特定的要求。例…

第5课 使用openCV捕获摄像头并实现预览功能

这节课我们开始利用ffmpeg和opencv来实现一个rtmp推流端。推流端的最基本功能其实就两个:预览画面并将画面和声音合并后推送到rtmp服务器。 一、FFmpeg API 推流的一般过程 1.引入ffmpeg库:在代码中引入ffmpeg库,以便使用其提供的功能。 2.捕获摄像头…

MySQL所有常见问题

一、事务 定义:一组操作要么全部成功,要么全部失败,目的是为了保证数据最终的一致性 在MySQL中,提供了一系列事务相关的命令: start transaction | begin | begin work:开启一个事务commit:提交一个事务rollback:回滚一个事务事务的ACID 原子性(Atomicity):当前事…

【ONE·MySQL || 数据类型 表的约束】

总言 主要内容:介绍MySQL中的常见数据类型(数值类型、文本二进制类型、时间日期、字符串类型),以及对表的约束(非空约束、默认约束、列描述、零填充约束、自增长约束、主键约束、唯一键约束、外键约束)。  …

Delphi6函数大全4-SysUtils.pas

Delphi6函数大全4-SysUtils.pas首部 function FormatFloat(const Format: string; Value: Extended): string; $[SysUtils.pas功能 返回浮点数类型以指定格式字符串Format转换成字符串说明 FormatFloat(,.00, 1234567890) 1,234,567,890.00参考 function …

CodeWave赋能创新的全功能技术平台

目录 前言1 应用中心2 资产中心:汇聚创新能量,提供开发加速3 集成中心3.1 API管理3.2 报表管理 4 运维中心4.1 资源监控4.2 用户管理4.3 权限管理4.4 日志与监控 5 配置中心5.1 源码配置5.2 镜像仓库配置5.3 数据库配置5.4 报表配置5.5 资产配置5.6 品牌…

R_handbook_作图专题

ggplot基本作图 1 条形图 library(ggplot2) ggplot(biopics) geom_histogram(aes(x year_release),binwidth1,fill"gray") 2 堆砌柱状图 ggplot(biopics, aes(xyear_release)) geom_bar(aes(fillsubject_sex)) 3 堆砌比例柱状图 ggplot(biopics, aes(xyear_rele…

fastApi 项目部署

方式一,Uvicorn部署 Run a Server Manually - Uvicorn - FastAPI 1,linux服务器安装 python>3.8 2,安装 uvicorn : pip install "uvicorn[standard]" 3,上传项目到服务器 main.py from typing imp…