Mathematica处理高斯光束的分布图像
发布日期:2021-10-06 15:05:24 浏览次数:7 分类:技术文章

本文共 2042 字,大约阅读时间需要 6 分钟。

文章目录

通过Mathematica处理光斑图像

1 读图并转为灰度格式

在Mathematica中,通过Import来打开文件,在记事本(.nb)文件中输入命令后,摁下Shift+Enter可以实现命令的输出。

通过Import命令打开的图片为rgb格式,为了便于处理,我们通过ColorConvert将RGB图片转换为灰度图。

In[1]:= img = Import["E:\\Documents\\00\\1124\\1.bmp"]In[2]:= ImageType[img](*返回img的数据类型,Mathematica中的注释格式为括号与型号*)Out[2]=ByteIn[3]:= ImageValue[img,{
1,1}](*输出{
1,1}点的像素值*)Out[3]= {
0.0117647, 0.0117647, 0.0117647}In[4]:= ImageValue[img, {
1, 1}, "Byte"](*以Byte格式输出{
1,1}点的像素值*)Out[4]= {
3, 3, 3}In[5]:= grey = ColorConvert[img, "Grayscale"](*将图片转为灰度格式*)In[6]:= ImageValue[grey, {
1, 1}]Out[6]= 0.0117647

在这里插入图片描述

2 数据获取与显示

Mathematica读取的图像并不仅仅是图像的数据,同时也包括图像的其他信息,在Mathematica中,可以通过ImageData函数获取图像的数据。

对于已经转为灰度的图像来说,其数据便是一个矩阵,在Mathematica中,可以通过ListPlot3D来绘制矩阵的三维图。

In[7]:= imgData = ImageData[grey]In[8]:= ListPlot3d[imgData]

其输出图像为

在这里插入图片描述

3 数据截取

由于光斑只占据整个图像的一小部分,即对于我们来说,大部分的数据信息是不必要的,所以我们可以对图像进行截取。在Mathematica中,可以直接通过MatrixPlot绘制伪彩色的矩阵图。右键点击矩阵图,选择获取坐标选项,即可实时反馈鼠标所在位置的矩阵坐标。

In[9]:= MatrixPlot[imgData]

在这里插入图片描述

得到光斑左下角和右上角分别为{350,229}和{426,300},在Mathematica中,通过[;;,;;]的格式来完成子矩阵的获取。需要注意的是,邮件反馈的纵坐标与坐标轴标识的方向正好相反,所以在矩阵截取时需要注意坐标的变换。

In[10]:= roi = imgData[[480 - 300 ;; 480 - 229, 350 ;; 426]];(*结尾加分号取消输出*)In[11]:= MatrixQ[roi](*判断roi是否为矩阵*)Out[11]= TrueIn[12]:= MatrixPlot[roi]In[13]:= ListPlot3d[roi]

在这里插入图片描述在这里插入图片描述

4 数据拟合

光斑在空间中呈e的负指数幂的形式从中间向两边衰减,我们可以通过选取光斑矩阵中每一列的最大值作为有效值,对其进行高斯函数的拟合。

In[14]:= arr=Table[Max[roi[[i]], {i,Length[roi]}];In[15]:= ListPlot[arr]

其中,Table[f(i),{i,N}]表示i从1循环至N这个过程中所对应的f(i)所组成的一个数组,Max为选取数组中的最大值,Length为返回数组长度;ListPlot为绘制点集命令。其输出图像为

在这里插入图片描述
在Mathematica中,数据拟合输入的数据格式为由{x,y}数对所组成的数组,所以需要建立拟合数据。最后,拟合函数为NonLinearModelFit,其输入参数分别为拟合数据,函数表达式,函数参数以及自变量。

In[16]:= fitData = Table[{
i,arr[[i]]},{
i,Length[arr]}];In[17]:= NonlinearModelFit[fitData, a Exp[-((x - b)/c)^2], {
a, b, c}, x];In[18]:= gauss["BestFitParameters"]Out[18]= {
a -> 0.231113, b -> 36.8372, c -> 19.1083}In[19]:= gauss["ParameterTable"]

在输入拟合函数之后,Mathematica的输出形式为

在这里插入图片描述
在输入参数表之后,Mathematica的输出为:
在这里插入图片描述
最后,将所得函数与原数据画在同一张图上

In[20]:=p1 = Plot[gaussFunc, {
x, 0, 100}]; p2 = ListPlot[arr]; Show[p1, p2]

最终得到

在这里插入图片描述

转载地址:https://blog.csdn.net/m0_37816922/article/details/103227695 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Julia处理高斯光束的光斑图像
下一篇:通过python处理高斯光束的分布图像

发表评论

最新留言

第一次来,支持一个
[***.219.124.196]2024年04月17日 20时28分31秒