Python光学仿真学习处理高斯光束分布图像
作者:微小冷 发布时间:2022-09-11 05:29:50
通过python处理光斑图像
1 相关包与图像读取
首先需要科学计算必备包numpy
和画图包matplotlib.pyplot
,我们通过后者进行图像数据的读取.
plt.imread
读取图片之后为数据格式为numpy数组,可以通过成员函数astype
将整型数据变成浮点型,有利于后期处理。
plt.imshow
将img
的数据加载到窗口,plt.show()
显示绘图窗口,默认显示为伪彩图。
python自动画出了伪彩图,可以通过在plt.imshow
的过程中输入cmap
参数使之得到灰度图
>>> plt.imshow(img,cmap=plt.cm.gray)
<matplotlib.image.AxesImage object at 0x000002E84F5B4788>
>>> plt.show()
2 图像截取
由于光斑只占据图片中很小一部分,大量的冗余信息等同于噪声,会对后期的数据处理造成影响,故需截取感兴趣的区域,plt.ginput
函数提供一种交互操作方法,可返回鼠标点击的位置,其输入参数为选取点数,输出为点击的点的坐标。
>>> plt.imshow(img)
<matplotlib.image.AxesImage object at 0x000002E857A21448>
>>> plt.ginput(2)
[(717.0757575757577, 299.8290043290042), (783.5692640692644, 233.33549783549768)]
在python中,通过方括号进行矩阵索引,图片的截取方法为
>>> roi = img[233:299,717:783]
>>> plt.imshow(roi)
<matplotlib.image.AxesImage object at 0x000002E84F5B4948>
>>> plt.show()
3显示强度
为了更加直观地反映光斑强度,以图片行列为坐标,可以绘制3d强度图。
绘制二维曲线,要求输入相应的自变量和因变量,通过点和点的一一对应,画出曲线。三维图像绘制亦然,通过np.meshgrid
生成网格坐标,作为其 x , y x,y x,y向的自变量,其输入参数为两个一维数组,返回两个二维数组,用以表示这两个数组方向的坐标。
>>> xNum,yNum = roi.shape#获取roi的维度
>>> xAxis,yAxis = np.meshgrid(range(yNum),range(xNum))#range创建长度为xNum的自然数列
>>> ax = plt.gca(projection='3d')#建立3D坐标轴
>>> ax.plot_surface(xAxis,yAxis,roi)#创建面元图
<mpl_toolkits.mplot3d.art3d.Poly3DCollection object at 0x0000019EAFF19D48>
>>> plt.show()
结果为
4数据拟合
光斑在空间中的分布形式呈中心对称的特征,故可抽取出其径向坐标进行降维操作,考虑到数据的稳定性,并排除非信号区的影响,可提取每一列的最大值
>>> arr = np.max(roi,0)
>>> x = np.arange(len(arr))
>>> plt.plot(x,arr)
[<matplotlib.lines.Line2D object at 0x0000019EB469EB48>]
>>> plt.show()
结果如图所示
在python中,需要通过引入科学计算库scipy
中的优化拟合包optimize
中的curve_fit
函数来进行数据的高斯拟合。curve_fit
的输入参数为拟合函数,自变量和因变量;输出参数为拟合函数中的其他参数以及拟合评价参数。
其中高斯函数的表达形式为
>>> from scipy.optimize import curve_fit
>>> def gauss(x, a, b, c):
... return a*np.exp(-(x-b)**2/c**2)
...
>>> abc, para = curve_fit(gauss,x,arr)
>>> abc#即上式中的a,b,c
array([89.72326971, 35.58522403, 20.86186403])
>>> fitValue = gauss(x,abc[0],abc[1],abc[2])#拟合值
>>> plt.scatter(x,arr)#绘制原始数据的散点图
<matplotlib.collections.PathCollection object at 0x0000019EB5438D88>
>>> plt.plot(x,fitValue)#绘制拟合数据的曲线图
[<matplotlib.lines.Line2D object at 0x0000019EB46D4048>]
>>> plt.show()
问题
如果包没有安装的话,可以在命令行中用pip
文件进行安装
> pip install numpy
> pip install matplotlib
> pip install scipy
来源:https://blog.csdn.net/m0_37816922/article/details/102943533


猜你喜欢
- 本文实例为大家分享了python自动化生成IOS的图标,供大家参考,具体内容如下每次上架之前都要生成十几个图片感觉无聊麻烦,考虑使用脚本处理
- 使用 os.open 打开文件无论是读文件还是写文件,都要先打开文件。说到打开文件,估计首先想到的就是内置函数 open(即 io.open
- random模块用于生成随机数,下面看看模块中一些常用函数的用法:from numpy import randomnumpy.random.
- 有时我们有很多文件(如图片),我们需要对每一个文件进行操作。 我们还需要一份文件的名字来进行遍历,这时我们首先需要建立一份文件名单,有时还会
- 运行效果:完整代码from tkinter import *import tkinter.messageboximport base64fr
- 我们在做表单的时候经常会使用到这样的结构:<fieldset> <lege
- 建议有js基础,了解jquery,thinkphp,废话不说多下面就上代码《————HTML————》//thinkphp循环显示把data
- 本篇介绍Python中的引用。首先想一想如图示例。在python中,值是靠引用来传递来的。用id()来判断两个变量是否为同一个值的引用。如图
- vue3 项目封装侧导航文字骨架效果组件-全局封装,供大家参考,具体内容如下目的当显示页面的时候,有些数据是需要从后台加载,网络不好的时候可
- 在这之前,你首先得了解Python中的PIL库。PIL是Python Imaging Library的简称,PIL是一个Python处理图片
- 一、isdigit()函数isdigit()函数是检测输入字符串是否只由数字组成。如果字符串只包含数字则返回 True 否则返回 False
- 在python中,用于数组拼接的主要来自numpy包,当然pandas包也可以完成。而,numpy中可以使用append和concatena
- 写在前面在开发微信小程序的时候,评论服务模块希望添加上emoji表情,但是emoji表情是4个字节长度的,所以需要进行设置当前项目是JAVA
- 一.前言众所周知:没有对象怎么办?那就new一个!那么在JS中,当我们new一个对象的时候,这个new关键字内部都干了什么呢?现在我们就来剖
- 【名称】Abs【类别】数学函数【原形】Abs(number)【参数】必选的。Number参数是一个任何有效的数值型表达式【返回值】同numb
- 在深度学习的数据训练过程中,虽然tensorflow和pytorch都会自带打乱数据进行训练的方法,但是当我们自己生成数据,或者某些情况下依
- 写了个多层感知器,用bp梯度下降更新,拟合正弦曲线,效果凑合。# -*- coding: utf-8 -*-import numpy as
- 网上有这样一道题目:一个字符串String=“adadfdfseffserfefsefseetsdg”,找出里面出现次数最多的字母和出现的次
- 一、YAML是什么YAML是专门用来写配置文件的语言,远比JSON格式方便。YAML语言的设计目标,就是方便人类读写。YAML是一种比XML
- Pytorch如何完成多分类多分类问题在最后的输出层采用的Softmax Layer,其具有两个特点:1.每个输出的值都是在(0,1);2.