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

作者:微小冷 时间:2022-09-11 05:29:50 

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

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

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

结果为

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

4数据拟合

光斑在空间中的分布形式呈中心对称的特征,故可抽取出其径向坐标进行降维操作,考虑到数据的稳定性,并排除非信号区的影响,可提取每一列的最大值


>>> arr = np.max(roi,0)
>>> x = np.arange(len(arr))
>>> plt.plot(x,arr)
[<matplotlib.lines.Line2D object at 0x0000019EB469EB48>]
>>> plt.show()

结果如图所示

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

在python中,需要通过引入科学计算库scipy中的优化拟合包optimize中的curve_fit函数来进行数据的高斯拟合。curve_fit的输入参数为拟合函数,自变量和因变量;输出参数为拟合函数中的其他参数以及拟合评价参数。

其中高斯函数的表达形式为

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


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

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

问题

如果包没有安装的话,可以在命令行中用pip文件进行安装


> pip install numpy
> pip install matplotlib
> pip install scipy

来源:https://blog.csdn.net/m0_37816922/article/details/102943533

标签:光学仿真,高斯光束,图像处理
0
投稿

猜你喜欢

  • sqlserver 多表查询不同数据库服务器上的表

    2012-04-13 11:41:51
  • js全选/全不选/反选 checkbox代码

    2008-03-18 13:00:00
  • Flume监听oracle表增量的步骤详解

    2023-07-20 00:39:32
  • python matplotlib.pyplot.plot()参数用法

    2023-07-13 17:39:48
  • MSSQL数据加密解密代码

    2023-07-08 18:45:30
  • 基于Go语言实现分金币游戏

    2023-06-22 06:49:28
  • xmlHttp msxml3.dll 错误 '800c0008' 解决办法

    2008-08-31 20:44:00
  • Python实现Tracert追踪TTL值的方法详解

    2023-06-24 13:08:14
  • python 时间戳与格式化时间的转化实现代码

    2021-07-06 10:14:47
  • Python input()函数案例教程

    2021-12-21 15:45:02
  • ASP中如何判断一个字符是不是汉字

    2008-05-04 12:47:00
  • 给zblog加上运行代码功能

    2007-12-19 13:07:00
  • HTML与CSS在Flash中的应用

    2008-01-23 19:13:00
  • Python实现基于KNN算法的笔迹识别功能详解

    2021-06-18 13:15:08
  • CSS隐藏文字的方法

    2008-10-03 12:08:00
  • Python探索之修改Python搜索路径

    2021-06-26 20:47:09
  • Python cookbook(数据结构与算法)将名称映射到序列元素中的方法

    2021-06-06 01:26:54
  • 一文详解Python中复合语句的用法

    2021-08-11 23:15:40
  • Python常用模块之requests模块用法分析

    2023-12-30 15:11:49
  • python利用线程生成不同尺寸的缩略图实例详解

    2023-07-07 08:47:55
  • asp之家 网络编程 m.aspxhome.com