Python光学仿真学习处理高斯光束分布图像

 更新时间:2021年10月20日 09:56:29   作者:微小冷  
这篇文章主要为大家介绍了Python光学仿真学习之如何处理高斯光束的分布图像,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步

通过python处理光斑图像

1 相关包与图像读取

首先需要科学计算必备包numpy和画图包matplotlib.pyplot,我们通过后者进行图像数据的读取.

plt.imread读取图片之后为数据格式为numpy数组,可以通过成员函数astype将整型数据变成浮点型,有利于后期处理。

plt.imshowimg的数据加载到窗口,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()

img/py2.png

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()

结果为

img/py3.png

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

以上就是Python光学仿真学习处理高斯光束分布图像的详细内容,更多关于Python处理高斯光束分布图像的资料请关注脚本之家其它相关文章!

相关文章

  • 解决python存数据库速度太慢的问题

    解决python存数据库速度太慢的问题

    这篇文章主要介绍了解决python存数据库速度太慢的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • 教你如何在Pygame 中移动你的游戏角色

    教你如何在Pygame 中移动你的游戏角色

    Pygame是一组跨平台的 Python 模块,专为编写视频游戏而设计,您可以使用 pygame 创建不同类型的游戏,包括街机游戏、平台游戏等等,今天通过本文给大家介绍Pygame移动游戏角色的实现过程,一起看看吧
    2021-09-09
  • 详解TensorFlow2实现线性回归

    详解TensorFlow2实现线性回归

    这篇文章主要介绍了TensorFlow2实现线性回归的详细解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • NoSql数据库介绍及使用Python连接MongoDB

    NoSql数据库介绍及使用Python连接MongoDB

    MongoDB是一个非常流行的NoSQL数据库,常用于大规模数据存储应用,下面这篇文章主要给大家介绍了关于NoSql数据库及使用Python连接MongoDB的相关资料,需要的朋友可以参考下
    2023-06-06
  • python如何通过pyqt5实现进度条

    python如何通过pyqt5实现进度条

    这篇文章主要介绍了python如何通过pyqt5实现进度条,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • Python数据分析matplotlib设置多个子图的间距方法

    Python数据分析matplotlib设置多个子图的间距方法

    今天小编就为大家分享一篇Python数据分析matplotlib设置多个子图的间距方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-08-08
  • 基于Python+Tkinter实现音乐播放器

    基于Python+Tkinter实现音乐播放器

    Tkinter 是 Python 中用于创建图形用户界面 (GUI) 的标准库之一,它是一个简单而强大的工具,适用于创建各种类型的窗口应用程序,本文给大家介绍了如何基于Python+Tkinter实现音乐播放器,需要的朋友可以参考下
    2025-03-03
  • Python help()函数用法详解

    Python help()函数用法详解

    这篇文章主要介绍了Python help()函数的作用,并举例说明它的详细用法,需要的朋友可以参考下
    2014-03-03
  • python 魔法函数实例及解析

    python 魔法函数实例及解析

    这篇文章主要介绍了python 魔法函数实例及解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-09-09
  • Python多线程与多进程相关知识总结

    Python多线程与多进程相关知识总结

    进程(process)和线程(thread)是操作系统的基本概念,是操作系统程序运行的基本单元,本文简要介绍进程和线程的概念以及Python中的多进程和多线程.需要的朋友可以参考下
    2021-05-05

最新评论