Python光学仿真学习处理高斯光束分布图像
目录
- 通过python处理光斑图像
- 1 相关包与图像读取
- 2 图像截取
- 3显示强度
- 4数据拟合
- 问题
通过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)>>> plt.show()
2 图像截取
由于光斑只占据图片中很小一部分,大量的冗余信息等同于噪声,会对后期的数据处理造成影响,故需截取感兴趣的区域,
plt.ginput
函数提供一种交互操作方法,可返回鼠标点击的位置,其输入参数为选取点数,输出为点击的点的坐标。>>> plt.imshow(img)>>> plt.ginput(2)[(717.0757575757577, 299.8290043290042), (783.5692640692644, 233.33549783549768)]
在python中,通过方括号进行矩阵索引,图片的截取方法为
>>> roi = img[233:299,717:783]>>> plt.imshow(roi)>>> 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)#创建面元图>>> plt.show()
【Python光学仿真学习处理高斯光束分布图像】结果为
文章图片
4数据拟合
光斑在空间中的分布形式呈中心对称的特征,故可抽取出其径向坐标进行降维操作,考虑到数据的稳定性,并排除非信号区的影响,可提取每一列的最大值
>>> arr = np.max(roi,0)>>> x = np.arange(len(arr))>>> plt.plot(x,arr)[]>>> 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,carray([89.72326971, 35.58522403, 20.86186403]) >>> fitValue = https://www.it610.com/article/gauss(x,abc[0],abc[1],abc[2]) #拟合值>>> plt.scatter(x,arr)#绘制原始数据的散点图>>> plt.plot(x,fitValue)#绘制拟合数据的曲线图[ ]>>> plt.show()
文章图片
问题 如果包没有安装的话,可以在命令行中用
pip
文件进行安装> pip install numpy> pip install matplotlib> pip install scipy
以上就是Python光学仿真学习处理高斯光束分布图像的详细内容,更多关于Python处理高斯光束分布图像的资料请关注脚本之家其它相关文章!
推荐阅读
- python学习之|python学习之 实现QQ自动发送消息
- 逻辑回归的理解与python示例
- python自定义封装带颜色的logging模块
- 【Leetcode/Python】001-Two|【Leetcode/Python】001-Two Sum
- Python基础|Python基础 - 练习1
- Python爬虫|Python爬虫 --- 1.4 正则表达式(re库)
- Python(pathlib模块)
- python青少年编程比赛_第十一届蓝桥杯大赛青少年创意编程组比赛细则
- Python数据分析(一)(Matplotlib使用)
- Python|Python 9.20