文章目录

  • 通过R语言处理高斯光束
    • 图片加载与显示
    • 图像截取
    • 显示强度
    • 高斯拟合

通过R语言处理高斯光束

图片加载与显示

R语言中也有不少图像处理包,著名的magick就提供了R语言的接口。但是magick包更像是一个代码版的PS,可以实现诸多高级功能,但过于完整的代码封装使得一些基础操作反而难以施展。所以我们使用imager包。

首先,安装并导入包。

然后,通过load.image读取图片赋值给变量,在R语言中推荐使用<-进行赋值,赋值之后可以在右侧Environment选项卡中查看数据区,可以看到我们赋值的img是一个Large cimg类型。

通过dim函数可以查看数据的维度,可以看到该数据类型有4个维度,前两个分别代表图片的长、宽;第三个代表帧数;第四个代表颜色通道,其值为3,表示这是一个rgb图片。

读取图片之后通过plot命令可以方便地查看图片数据。

> install.packages(imager)
> library(imager)
> img <- load.image("1.bmp")
> dim(img)
[1] 640 480   1   3
> plot(img)

在使用plot之后,可以在右侧的Plots选项卡中查看刚刚画出的数据,如下图所示。

图像截取

图片中大量的数据是无效的背景,所以需要对其进行截取。在R语言中,可以通过locator命令交互式选取坐标位置。其方法为,输入命令之后,将鼠标放在图像上,当鼠标光标变为十字时点击,R会记录下鼠标点击的位置。

然后通过[:,:]的索引方法,对矩阵进行截取。

> unlist(locator(2))x1       x2       y1       y2
356.8567 422.5432 186.0054 246.7325
> roi = img[356:422,186:246]
> image(roi)     #当不输入坐标时,其横纵坐标默认归一化

显示强度

伪彩图虽然也能反应出光斑的强度信息,但总体来说不够直观,而是依赖于人的主观感觉,所以我们需要绘制3d图。在R语言中,graphics包提供了3d图像绘制函数persp,其输入参数分别为x、y、z,所以我们需要将矩阵拆分成三个向量,分别代表x轴、y轴以及图片的像素点强度。

> x <- 1:dim(roi)[1]
> y <- 1:dim(roi)[2]
> persp(x,y,z)
> persp(x,y,roi,theta=30,phi=50,axes=TRUE,shade=0.2,col="#00AAFF")

其中,theta,phi这两个参数的作用是调整视角,shade为阴影,col为颜色,其输入的值为16进制的rgb。

然而,R语言自带的绘图包无法手动调节视角,我们可以选择安装rgl包来绘制三维图形

> library(rgl)
> persp3d(x,y,roi,col="red")

高斯拟合

由于矩阵是二维数据,所以我们首先通过每列选取最大值的方式得到一个数组。R语言中不直接提供计算矩阵每一行最大值的函数,但是提供了apply,可以指定矩阵的行操作或者列操作。其输入变量位待处理矩阵,行列标识以及处理函数。行列标识中,1代表行处理,2代表列处理。

> arr = apply(roi,1,max) #对每一行执行max操作,max即选取最大值
> plot(arr)                  #画图

最后,就是最重要的数据拟合。在R语言中,通过nlm函数进行非线性拟合,其输入参数分别为拟合函数表达式以及拟合参数的初始值。其中,拟合函数表达式中的变量需要预先定义好。

高斯函数的表达式为

y=a⋅exp⁡(−(x−bc)2​)y=a⋅\exp{(−(\frac{x−b}{c})^2​)}y=a⋅exp(−(cx−b​)2​)

其中,y即我们之前求取最大值得到的arr,x则为与arr等长的自然数列。a的值表示该函数的最大值;b表示其中心值,c表示当y值降到1e\frac{1}{e}e1​分之一处时x距离中心的位置。初始值可根据此选取。

> x <- 1:length(arr)       #建立x
> a0 <- max(arr)          #a的初始值
> b0 <- length(arr)/2 #b的初始值,根据图像可知,b的初始值在数据的中心位置
> c0 <- length(arr)/4 #c的初始值
> fit <- nls(arr ~ a*exp(-((x-b)/c)^2),start=list(a=a0,b=b0,c=c0))
> fit
Nonlinear regression modelmodel: arr ~ a * exp(-((x - b)/c)^2)data: parent.frame()a       b       c 0.2285 35.7438 19.7131              #此即为拟合参数residual sum-of-squares: 0.005557Number of iterations to convergence: 5
Achieved convergence tolerance: 5.998e-06

通过predict函数可以提取fit中的模型,并根据输入的x得出拟合之后的y值。我们可以据此画出原始数据与拟合函数的图像。

> y = predict(fit,list(x=x))
> plot(x,arr)
> lines(x,y,col='red')

R语言处理高斯光束的光场分布图像相关推荐

  1. R语言使用rnorm函数生成正太分布数据、使用plot函数可视化折线图、使用text函数在可视化图像的指定位置添加自定义文本

    R语言使用rnorm函数生成正太分布数据.使用plot函数可视化折线图.使用text函数在可视化图像的指定位置添加自定义文本 目录 R语言使用rnorm函数生成正太分布数据.使用plot函数可视化折线 ...

  2. R语言使用rnorm函数生成正太分布数据、使用plot函数生成画布、设定轴标签、设定轴范围、轴标题、使用locator函数将图像进入定位模式、在画布内手动绘制一个多边形

    R语言使用rnorm函数生成正太分布数据.使用plot函数生成画布.设定轴标签.设定轴范围.轴标题.使用locator函数将图像进入定位模式.在画布内手动绘制一个多边形 目录 R语言使用rnorm函数 ...

  3. R语言使用rnorm函数生成正太分布数据、使用plot函数可视化折线图、使用arrows函数在可视化图像中绘制箭头曲线、绘制带箭头线段,可以设置箭头角度,有几个箭头(1起点箭头、2终点箭头,3双箭头)

    R语言使用rnorm函数生成正太分布数据.使用plot函数可视化折线图.使用arrows函数在可视化图像中绘制箭头曲线.绘制带箭头线段,可以设置箭头角度,有几个箭头(1起点箭头.2终点箭头,3双箭头) ...

  4. R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

    R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line) 目录 R语言ggplot2可视化:在可视化图像中添加对角线(diagonal line)

  5. R语言可视化斜率图、扩充图像纵横比为数据标签显示更整齐、ggrepel包来帮忙

    R语言可视化斜率图.扩充图像纵横比为数据标签显示更整齐.ggrepel包来帮忙 目录

  6. R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置、图例标题、键值、文本字体大小(title、text、key)、颜色标识的大小、点形状pch的大小

    R语言编写自定义函数自定义ggplot图像中的图例(legend)的位置.图例标题.键值.文本字体大小(title.text.key).颜色标识的大小.点形状pch的大小 目录

  7. R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据、单的黑白主题theme_bw主题(theme)、默认的主题(theme)可视化数据

    R语言ggplot2可视化设置不同的图像主题(theme):使用各种不同的主题(theme)可视化数据.单的黑白主题theme_bw主题(theme).默认的主题(theme)可视化数据 目录

  8. R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align)

    R语言ggplot2可视化:为可视化图像添加多行标题(multi line title)并将多行标题居中对齐(center align) 目录

  9. R语言ggplot2可视化图例放置在图像底部(bottom)并分两行显示实战

    R语言ggplot2可视化图例放置在图像底部(bottom)并分两行显示实战 目录 R语言ggplot2可视化图例放置在图像底部(bottom)并分两行显示实战

最新文章

  1. 全方位,多角度理解ThreadLocal
  2. 【深入浅出MyBatis系列八】SQL自动生成插件
  3. php代码执行相关函数,关于当前PHP脚本运行时系统信息相关函数
  4. open表和closed表_excel工作表合并,多文件数据一键合成
  5. 金山云服务器内网带宽,金山云-文档中心-配置弹性网卡
  6. phpMyFAQ 3.0.3 中文版
  7. 微软、谷歌和 BAT 等巨头成立机密计算联盟,联手保护数据安全
  8. 修改外部时间服务器地址,修改外部时间服务器地址
  9. asp.net ashx导出excel到前台
  10. 如何做软件需求分析(个人工作经验总结)
  11. Knockout应用开发指南 第二章:监控属性(Observables)
  12. matlab 2017a安装教程
  13. python美女源代码_python程序员爬取百套美女写真集,同样是爬虫,他为何如此突出...
  14. c51单片机矩阵键盘1602计算器_单片机做简易计算器源码(矩阵键盘输入+1602显示)...
  15. 计算机多媒体教学一体机包括,学校使用多媒体教学触摸一体机应用效果的介绍...
  16. 转java通过身份证号码获取出生日期、性别、年龄
  17. 树莓派4B简单使用内容(以移植QT应用为例)
  18. 分布式理论之Raft 算法
  19. 对我影响最大的三位老师
  20. win10计算机查看用户组,Win10怎么查询用户组及组中用户

热门文章

  1. IEEE专家展示AR黑科技:随手涂鸦秒变3D图案
  2. An Efficient Representation for Irradiance Environment Maps
  3. 军犬舆情每日热点:广西自治区成立60周年;首批5G手机价格8000元
  4. K-Touch/天语W808 root教程_方法
  5. proteus用C语言实现LED闪烁,使用PROTEUS实现一个闪烁的LED基础教程
  6. 10 架构设计文档-致远OA
  7. 寒假算法学习 I (9). 宇宙总统 (重载运算赋 >)
  8. uC/OS-II系统学习笔记(4)—— uC/OS-II概述上篇
  9. 【AI视野·今日CV 计算机视觉论文速览 第234期】Fri, 24 Sep 2021
  10. FreeBSD安装时的参考文章