视觉SLAM理论入门——(4)相机模型

双目视觉SLAM讲解1 视觉SLAM漫谈 1.    前言   开始做SLAM(机器人同时定位与建图)研究已经近一年了。从一年级开始对这个方向产生兴趣,到现在为止,也算是对这个领域有了大致的了解。然而越了解,越觉得这个方向难度很大。总体来讲有以下几个原因: 入门资料很少。虽然国内也有不少人在做,但这方面现在没有太好的入门教程。《SLAM for dummies》可以算是一篇。中文资料几乎没有。SLAM研 阅读详情

单目相机模型

相机将三维世界中的坐标点映射到二维图像平面的过程能够用一个针孔模型进行描述。另外,由于相机中透镜的存在,会使得光线投影到成像平面的过程中会产生畸变。因此,使用针孔和畸变两个模型来描述整个投影过程。

针孔模型

设O - x - y - z为相机坐标系,习惯上让z轴指向相机前方,x向右,y向下。O为摄像机的光心,也是针孔模型中的针孔。现实世界的空间点P,经过小孔O投影之后,落在物理成像平面O' - x' - y' - z'上,成像点为P' 。设P的坐标为[X,Y,Z] ^T,P'为[X',Y',Z'] ^T,并且设物理成像平面到小孔的距离为f(焦距)。根据三角形相似关系

\frac{Z}{f} = - \frac{X}{X'} = - \frac{Y}{Y'}

把可以成像平面对称到相机前方,和三维空间点一起放在摄像机坐标系的同一侧(如下图中的对称的成像平面),这样做可以把公式中的负号去掉

\frac{Z}{f} = \frac{X}{X'} = \frac{Y}{Y'}

将成像平面的X ′ 、Y ′ 表示出来

X' = f\frac{X}{Z}  , Y' = f\frac{Y}{Z}

上面的式子描述了P点与它的像之间的空间关系,在相机中最终获得的是一个个像素,因此需要在成像平面上采样和量化

设在物理成像平面上固定着一个像素平面 o−u−v。在像素平面得到了 P ′ 的像素坐标:[u,v] T 。其中像素坐标系 x 的定义方式是:原点 o ′ 位于图像的左上角,u 轴向右与 x 轴平行,v轴向下与 y 轴平行。像素坐标系与成像平面之间,相差了一个缩放和一个原点的平移。设像素坐标在 u 轴上缩放了 α 倍,在 v 上缩放了 β 倍。同时,原点平移了 [c x ,c y ] T 。那么,P ′ 的坐标与像素坐标 [u,v] T 的关系为

u = \alpha X' + c_x,v = \beta Y' + c_y

将上面两个式子合并

u = \alpha f\frac{X}{Z} + c_x = f_x\frac{X}{Z} + c_x,v = \beta f\frac{Y}{Z} + c_y = f_y\frac{Y}{Z} + c_y,其中,f 的单位为米,α,β 的单位为像素每米,所以 f x ,f y 的单位为像素

利用齐次坐标,将上式写成简洁的矩阵形式

或

其中,中间的量组成的矩阵称为相机的内参数矩阵K,内参在出厂之后是固定的,一般由厂家告知。有时需要自己确定相机的内参,这也就是所谓的标定

由于相机在运动,P的相机坐标是它的世界坐标P_w根据相机当前位姿变换到相机坐标系下的结果。位姿由旋转矩阵和平移向量(或变换矩阵)描述,上式可变换为

相机的位姿就是指相机的外参数,它随相机运动而变化,也是SLAM中的待估计目标,代表机器人轨迹

回过头来分析上面的式子,可以将投影过程看成:把一个空间点P,从世界坐标系转换到相机坐标系中,再除以最后一维的数值(对最后一维进行归一化),得到P在归一化平面(z=1平面)中的坐标,最后通过内参矩阵对应到像素坐标。对相机坐标同乘以任意非0常数后,归一化坐标都是一样的,说明点的深度在投影过程中丢失了,这也是单目视觉无法得到像素点深度的原因。

畸变模型

径向畸变

径向畸变是指由透镜形状引起的畸变,它可以分为桶形畸变和枕形畸变。桶形畸变的图像放大率随着与光轴之间的距离增加而减小,枕形畸变反之。径向畸变会引起投影点在归一化坐标上沿长度方向的变化(极坐标下,点与原点之间的距离)。畸变多项式一般可以写作

x_{distorted1} = x(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 )

y_{distorted1} = y(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 )

切向畸变

切向畸变是指由于透镜和成像平面不完全平行引起的畸变。切向畸变会引起投影点在归一化坐标上沿切线方向的变化(极坐标下,点与横轴的水平夹角)

x_{distorted2} = x+2p_1xy+p_2(r^2+2x^2)

y_{distorted2} = y + p_1(r^2+2y^2)+2p_2xy

综上,设三维空间点投影到归一化平面上,坐标为[x,y]^T,畸变后坐标[x_{distorted}, y_{distorted}]^T

x_{distorted} =x(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) +2p_1xy+p_2(r^2+2x^2)

y_{distorted} = y(1 + k 1 r 2 + k 2 r 4 + k 3 r 6 ) + p_1(r^2+2y^2)+2p_2xy

通过内参矩阵投影到图像上的正确位置[u,v]^T

u = f_xx_{distorted} + c_x

v = f_yy_{distorted} + c_y

总结

单目相机的成像过程总结如下

1、三维空间点P的世界坐标系为P_w

2、由于相机在运动,它的运动由R,t或者T描述,P的相机坐标为\widetilde{P_c} = RP_W + t = TP_w = [X,Y,Z]^T 

3、将其投影到归一化平面上,归一化坐标P_c = [X/Z,Y/Z,1]^T

4、如果有畸变,对其进行畸变处理(处理后坐标也记为P_c )

5、通过内参矩阵投影到图像中,得到像素坐标P_{uv} = KP_c

双目相机模型

针孔模型描述单个相机的成像,但是只通过一个像素无法确定一个空间点的位置。这是因为投影过程丢失了像素深度,从相机光心到归一化平面连线上所有点都投影到这一像素。

双目相机可以测量像素深度,原理是同步采集两个相机的图像,计算图像间的视差,估计每个像素的深度。这两个相机一般是水平放置的,意味两个相机的光圈中心都位于 x 轴上。它们的距离称为双目相机的基线b

考虑一个空间点 P,它在左右相机各成一像,记作P_L,P_R 。由于相机基线的存在,这两个成像位置是不同的。理想情况下,由于左右相机只有在 x 轴上有位移,因此P的像也只在 x 轴(对应图像的 u 轴)上有差异。我们记它在左侧的坐标为u_L,右侧坐标为u_R,根据相似三角形可以得到

\frac{z-f}{z} = \frac{b-u_L+u_R}{b},即

z=\frac{fb}{d},d=u_L-u_R, 其中d是左右图的横坐标之差,称为视差

从上式看出,视差越大,距离越近;双目深度存在一个由fb确定的理论最大值,这说明基线越长,双目相机可测量的距离越远

RGB-D相机模型

RGB-D相机测量深度的方法有大类:通过红外结构光测量、通过飞行时间法(ToF)测量。无论哪种方法,都需要相机向探测目标发射一束光线(通常是红外光)。

在结构光原理中,相机根据返回的结构光图案,计算物体离自身的距离。

而在 ToF中,相机向目标发射脉冲光,然后根据发送到返回之间的光束飞行时间,确定物体离自身的距离。ToF 原理和激光传感器十分相似,不过激光是通过逐点扫描来获取距离,而 ToF相机则可以获得整个图像的像素深度。

在测量深度之后,RGB-D 相机通常按照生产时的各个相机摆放位置,自己完成深度与彩色图像素之间的配对,输出一一对应的彩色图和深度图。我们可以在同一个图像位置,读取到色彩信息和距离信息,计算像素的 3D 相机坐标,生成点云。

对RGB-D 数据,既可以在图像层面进行处理,亦可在点云层面处理。

RGB-D 相机能够实时地测量每个像素点的距离。但是,由于这种发射-接受的测量方式,使得它使用范围比较受限。用红外进行深度值测量的 RGB-D 相机,容易受到日光或其他传感器发射的红外光干扰,因此不能在室外使用,同时使用多个时也会相互干扰。对于透射材质的物体,因为接受不到反射光,所以无法测量这些点的位置。此外,RGB-D 相机在成本、功耗方面,都有一些劣势。

初识视觉SLAM 用相机解决定位和建图问题 阅读详情

相关推荐

激光SLAM与视觉SLAM的区别

目前,SLAM技术被广泛运用于机器人、无人机、无人驾驶、AR、VR等领域,依靠传感器可实现机器的自主定位、建图、路径规划等功能。由于传感器不同,SLAM的实现方式也有所不同,按传感器来分,SLAM主要包括激光SLAM和视觉SLAM两大类。 其中,激光SLAM比视觉SLAM起...

chuigua5164的博客 6492

单目相机模型

针孔相机模型与畸变模型及内参标定方法

Shilong的博客 1309

视觉SLAM综述

其它机器学习、深度学习算法的全面系统讲解可以阅读《机器学习-原理、算法与应用》,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造。 书的购买链接 书的勘误,优化,源代码资源 什么是视觉SLAM SLAM是“Simultaneous Localization And Mapping”的缩写,可译为同步定位与建图。概率 SLAM 问题 (the probabilistic SLAM ...

SIGAI_优快云的博客 4370

Slam 14讲学习笔记 —— 第五讲 —— 相机与图像

本讲主要搞清楚相机的针孔模型、透镜的畸变模型。从而弄清成像(外部的三维点投影到相机内部成像平面)及相机的内外参。 一. 相机模型:针孔(小孔)成像模型: 上图的几何模型如下: O—x—y—z为相机坐标系(z指向相机的前方,x指向相机的右方,y指向下,O为相机的光心)。成像平面O’—x’—y’,现实世界的P点经过相机光心(小孔)投影后在成像平面上为像点P’。 设P点坐标为[X,Y,Z],P’坐标为...

muyizaozao的博客 1689

经典视觉SLAM框架

引言:通过前面的推送我们已经对SLAM有了个大体的认识。(初识视觉SLAM)下面来看经典的视觉SLAM框架,了解一下视觉SLAM究竟由哪几个模块组成。 本文选自《视觉SLAM十四讲:从理论到实践》。   整体视觉SLAM流程图。                 整个视觉SLAM流程包括以下步骤。 传感器信息读取。在视觉SLAM中主要为相机图像信息的读取和预处理。如果是在机器人中,还可...

博文视点(北京)官方博客 5298

视觉SLAM笔记(2) 相机

单目相机、双目相机和深度相机作为视觉SLAM的优缺点

氢键H-H 1万+

机器视觉——单目相机模型(坐标标定以及去畸变)

单目相机模型:   针孔相机模型的映射关系:   化为矩阵形式:   其中,中间的矩阵被称为相机的内参矩阵K。通常认为,相机的内参在出厂之后是固定的,不会在使用过程中发生变化。有点相机生产厂商会告诉你相机的内参,而有时需要你自己确定相机的内参,也就是所谓的标定。(目前标定算法已经比较成熟,如著名的单目棋盘格张友正标定法)   (后一个式子隐含了一次齐次坐标到非齐次坐标的转换:T为4X4的矩阵 Pw为3X1的向量)   其中,相机的位姿 R, t 又称为相机的外参..

m0_61238051的博客 3918

昇腾310B实战:FFmpeg硬件加速全流程解析与性能优化

本文详细解析了昇腾310B与FFmpeg硬件加速的全流程,包括环境配置、性能优化及常见问题排查。通过实战案例展示,昇腾310B在视频转码中性能提升可达6倍,同时降低功耗,特别适合多媒体处理和高性能计算场景。

m3n5b7v8c9x的博客 733

基于相机模型的单目测距--普通相机

文章目录相机模型原理一、图像坐标系(x,y)至像素坐标系(u,v)相机标定根据内参推导像素坐标(x, y)与图像坐标(u, v)的关系式根据内参和畸变系数测量外参根据内参和外参推导图像坐标与世界坐标的关系式法一:根据外参和世界坐标点计算距离法二:根据焦距和世界坐标点计算距离 相机模型原理 在视觉测量中,需要进行的一个重要预备工作是定义四个坐标系的意义,即 像素坐标系 、 图像坐标系、 相机坐标系 ...

qq_32335687的博客 8081

Ghidra逆向分析实战:从安装JDK到解析STM32的bin文件(附SVD插件配置)

本文详细介绍了使用Ghidra进行STM32固件逆向分析的完整流程,从JDK安装配置到SVD插件的应用。通过实战案例展示如何解析bin文件、恢复符号信息以及利用SVD插件识别外设寄存器,帮助开发者高效完成嵌入式设备的逆向工程任务。

weixin_29309475的博客 643

人工智能学习之机器人路径规划优化

A* AStar 人工智能 机器人路径规划优化

RongLin02的博客 7073

机器视觉入门基础相关概念一 ——单目相机模型

引言介绍:如果只是希望获取图像上的一些信息(例如等),那么我们不会对三维空间中相机的位置有所要求。但如果希望通过二维的图像去理解三维空间中摄像机的信息,或者是图像中物体在三维空间中的信息,那么就不得不考虑成像过程中三维变化为二维时的具体过程。而摄像机模型就是三维到二维的一种映射。本文简要总结了单目相机的成像过程,以便于读者将相机模型作为一种基础的工具理解更深层次的内容。

xiaoxu的博客 1680

1014. 福尔摩斯的约会 (20)-PAT乙级真题

1014. 福尔摩斯的约会 (20) 大侦探福尔摩斯接到一张奇怪的字条:“我们约会吧!3485djDkxh4hhGE 2984akDfkkkkggEdsb s&hgsfdk d&Hyscvnm”。大侦探很快就明白了,字条上奇怪的乱码实际上就是约会的时间“星期四 14:04”,因为前面两字符串中第1对相同的大写英文字母(大小写有区分)是第4个字母’D’,代表星期四;第2对相同的字符是’

柳婼 の blog 2644

视觉SLAM理论到实践系列(四)——相机模型

相机模型

YangtseJin的博客 1117

WSOLA原理及matlab仿真

WSOLA原理 对于 OLA 算法来说,常常无法保持原信号中的周期性结构,在帧裁剪的过程中,不能保证每一个帧都能覆盖完整周期并保证其相位对齐,会产生相位跳跃失真。 为保证**基频不变**,就要使用 WSOLA 算法。 WSOLA 并不直接在 Ha 处找一帧进行直接拼接,而是在一个区间内寻找与理想帧最接近的一帧进行叠加。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/8a234f4fde104fc69a9f3ddb7bcf3014.png?x-oss-process=ima

ManiacLook的博客 3214

基于ESP32 蓝牙游戏手柄设计

介绍使用 ESP32 并通过 BLE 通信的 设计手持游戏手柄,包含原理图与代码

DT程序员的博客 2164

视觉SLAM学习路线

导师让我了解SLAM,SLAM原本是比较小众的方向,最近自动驾驶火起来,做这个SLAM的人也多了,反过来也会推动机器人感知的发展。希望未来学成的时候,能赶上机器人大规模普及,就业一片蓝海。关于视觉SLAM我感觉学习成本高、科研选题难和行业壁垒高,但是充满挑战不是很有意思嘛。 学SLAM方向跟motion planning科研都不好做,而且都很吃数学基础。学习难度的话,planning可能教程更多一点,SLAM相较于planning要小众一些,教程也相对较少,所以在学习《视觉SLAM十四讲》整理一些自己的理解

极客园地 6665

Vue3 - 详细实现调用浏览器摄像头拍照并生成图片预览,支持将抓拍的图像保存到用户本地或上传到服务器、调取前置摄像头和后置摄像头,开启摄像头并进行拍照,vue实现调用摄像头,电脑或手机调用摄像头拍照

vue3,nuxt3,摄像头,vue3网站打开摄像头拍照,vue3项目调用摄像头实现拍照功能,拍照后怎么保存,照相后上传到后端服务器,开启摄像头黑屏,如何默认后置摄像头,网页开启电脑摄像头并照相,前置拍照,vue3如何调用手机摄像头进行拍摄,拒绝权限后不再弹出了,微信公众号网页,摄像头报错,拍照左右镜像反了,浏览器不兼容怎么办,vue3调用电脑端摄像头实时拍照,解决调用摄像头权限无法弹出,打不开摄像头,Vue3如何调用手机的摄像头,调用本地摄像头实现拍照,浏览器不弹摄像头权限了,如何不使用https运行测试

🏆 前端领域优质创作者 8654

视觉SLAM学习打卡【4】-相机和图像

观测数据即相机成像的过程。计算机以二位矩阵的形式存储图像像素。(附:参考高翔-视觉slam14讲)

小幸运召唤师的博客 1333

EtherCAT从站EEPROM组成信息详解(2):字8-15产品标识区

以实际的从站EEPROM数据为例,参照EtherCAT的SII规范,详细分析了从站EEPROM字8-字15的产品标识区内容组成。

kevin1499的博客 718

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

视觉SLAM十四讲笔记

第二讲 初识SLAM 相机: 以二维投影形式记录三维世界的信息 丢掉了一个维度——距离 三种视觉SLAM中主要的相机: 单目相机:没有深度,必须通过移动相机产生深度(近处物体的像运动快,远处物体的像运动慢) 双目相机:通过两个眼睛的视差计算深度(近处物体差别大,远处物体差别小),计算量很大 RGBD相机:通过物理方法测量深度,知道每个点的深度 主动测量,功耗很大 结构光TOF 深度值比较准确 量程小,易受干扰(很多RGBD用的是红外光,会受太阳光干扰,因此室外还是要用单目和双目,RGBD不太行) 视

dada19980122的博客 4024

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

高翔《视觉SLAM十四讲》从理论到实践

目录 第1讲前言:本书讲什么;如何使用本书; 第2讲 初始SLAM:引子-小萝卜的例子;经典视觉SLAM框架;SLAM问题的数学表述;实践-编程基础; 第3讲 三维空间刚体运动:旋转矩阵;实践-Eigen;旋转向量和欧拉角;四元数;相似、仿射、射影变换;实践-Eigen几何模块;可视化演示; 第4讲 李群与李代数:李群李代数基础;指数与对数映射;李代数求导与扰动模型;实践-Sophu...

Night___Raid的博客 4421

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

视觉SLAM理论到实践系列(一)——SLAM概述与预备知识

高翔博士的《视觉SLAM14讲》学习笔记的系列记录——SLAM概述与预备知识

YangtseJin的博客 1341

SLAM快速入门

SLAM入门 SLAM是Simultaneous localization and mapping缩写,意为“同步定位与建图”. SLAM的典型应用领域: 机器人定位导航领域-地图建模, VR/AR方面-辅助增强视觉效果, 无人机领域-地图建模, 无人驾驶领域-视觉里程计 SLAM框架: 传感器数据:主要用于采集实际环境中的各类型原始数据。包括激光扫描数据、视频图像数据、点云数据等。 视觉里程计:主要用于不同时刻间移动目标相对位置的估算。包括特征匹配、直接配准等算法的应用。 后

Cai_deLong的博客 3860

视觉SLAM理论与实践4

视觉SLAM理论与实践4-相机模型 非线性优化-附代码链接一、单目相机模型二、图像畸变二、双目视差的使用三、矩阵运算微分四、高斯牛顿法拟合实验五、批量最大似然估计 一、单目相机模型 1)针孔相机模型简介: 针孔相机模型如上图所示,三维路标点(landmark)P,通过相机光心投射到像素平面P’。 小孔成像模型 成像平面到像素坐标 综上所述真实的相机投影过程一般需要经历3次变换:世界...

whut_chengjun的博客 1194

SLAM综述:激光雷达与视觉SLAM(2019.10.12)

本文基于https://arxiv.org/pdf/1909.05214v2.pdf进行阐述(其实差不多就是精简版翻译) **第一节概述 ** 第二节讲述激光SLAM:激光传感器,开源系统,深度学习的应用。 第三节讲述视觉SLAM:相机传感器,开源系统,视觉惯性里程计,深度学习的应用。 第四节讲述激光雷达与视觉的融合。 最后展望SLAM的发展前景。 第一节:概述 SLAM:同时定位和建图(Simu...

目睹闰土刺猹的瓜的博客 1万+
上一篇: 视觉SLAM实践入门——(7)利用高斯牛顿法进行曲线拟合
下一篇: 视觉SLAM理论入门——(5)非线性优化
floatinglong
博客等级 码龄9年 90粉丝 143原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值