三维扫描仪[4]——标定·Matlab单目标定

三维扫描仪[3]——标定·理论 张正友标定法原理详解 阅读详情

前半部分由孤旅人翻译,非常感谢。
原文链接相机校准:Toolbox for Matlab


这部分带你们完成一个基于20张平面棋盘图的完整的标定例程。
这个例程将让你们学会怎么使用关于这个工具箱所有的功能:加载标定图像(loading calibration images),提取角点(extracting image corners),运行主要的标定引擎(running the main calibration engine),显式标定结果(displaying the results),控制精度(controlling accuracies),添加和压缩图片(adding and suppressing images),未失真图片(undistorting images),将标定数据输出到其他格式文件(exporting calibration data to different formats)……这个例程特别适合那些刚开始使用工具箱的人。
下载标定图片calib_example.zip或者一张一张下,并将20个图像存储到名为calib_example的单独文件夹中 。
这里写图片描述

补充:MATLAB加载标定工具:将你放工具箱的路径为MATLAB设置为搜索路径,然后输入calib_gui就能运行工具箱
这里写图片描述
这里写图片描述
这里写图片描述

在Matlab里面,进入包含例程图片的目录calib_example
读入图片:
在标定工具箱窗口点击Image names 按键,输入标定图片的前缀名(Image)和图片格式(tif)。所有的图片就会被加载进内存(通过Read Images命令会自动执行)存在变量L_1,L2……L20中.Matlab窗口将会显示如下:
这里写图片描述
完成设置图片也会通过缩略图格式展示出来(这张图片能够通过运行mosaic再生)
这里写图片描述
如果在读取图片的时候弹出OUT OF MEMORY的错误窗口,这就意味着你的电脑没有足够的内存去支撑整个图片集合在本地内存。这个情况很容易出现,当你运行这个工具箱在128M内存或者更少的电脑。在这个案例中,你可以直接选择memory efficient版本的工具箱,在你运行calib_gui选择memory efficient的操作模式。剩余的标定步骤(网格角点提取和标定)都一样。

提取网格角点
在标定工具箱窗口点击Extract grid corners按键。
这里写图片描述
按“Enter”(就是输入空,就是敲一下回车)选择所有的图片,(不然,你可以输出一个图片索引的列表用来提取角点的,例如[2 5 8 10 12])。然后,询问wintx和winty尺寸时,按下“enter”键输入空参数,选择默认的角点搜索窗口大小:wintx=5,winty=5。这就产生了一个11*11像素的有效的窗口。
这里写图片描述
角点提取引擎包含了自动统计网格中方块数的机制,当处理图片数量很大的时候,这个工具特别方便,因为不需要输入手动x和y方向的方块数量,对于一些罕见的情况,这个工具可能不能预测正确的方块数,这一般会发生在标定非常扭曲的镜头时。对于这点在这个角点提取的流程中,程序有提供一个用户关闭自动统计方块数代码的选项。在这个特殊模式下,用户将要提供每张图片的方块数量。在当前例程下,能完美得运行在默认模式下(即自动统计方块数),所以,简单地按“enter”输入空参数就行。(注意:通常推荐第一选择默认模式提取角点代码,并且,如果需要,重新处理那些有问题的图片)
这里写图片描述
显示的第一张标定图片是图片序号为2的(因为我这边加载图片的选择的是[2 5 8 10 12]):
这里写图片描述
点击四个顶点。点击位置在下面四幅图中显示了(警告:尽量精确地点击四个角点,离角点最多5个像素,否则一些角点可能会被识别器错过)。
点击的顺序规则:被选择的第一个点关系到这个网格坐标系的起始点。矩阵框的其他三个点可以按任意的顺序点击。如果你标定外部的多个摄像头(即计算空间中几个摄像头的相对位置),那么第一次点击的顺序对于你非常重要。处理多个摄像头时,要从不同的摄像头图片中选择一样的网格坐标系。例如:一个需要运行立体视觉标定箱的例子——stereo_gui.m(请通过help stereo_gui和参考fifth calibration example page 获取更多信息)
这里写图片描述
标定网格的边界如下图所示:
这里写图片描述
输入网格中每个方格的dx和dy的大小(例如:dX=dY=30mm,默认值):

单目结构光三维扫描仪的标定与三维重建 标定 单目结构光三维扫描仪的标定,主要是将投影仪逆向成一个相机的过程,标定过程中投影仪投射横竖多频条纹,解相后得到在相机对应的投影感器的像素值,将相机纹理像素和投影仪传感像素对应后,识别两个相机的标定板(这里已经把投影仪看作一个相机)。 上图为相机识别标定板的输出结果,分辨率为12801024 上图为投影仪逆向相机后识别标定板的输出结果。分辨率为1280720 此时完全可以当成双目相机来标定。分别可以得出相应相机内参。 八参数标定 用单目八参数标定法的话,还需要根据竖条纹相位值做8个参数标定 八参数法三维 阅读详情

相关推荐

3D激光扫描三维重建——1.matlab相机标定

1.打印黑白格子棋盘图 (注意最好打印出来的每个小鸽子是正方形的,且边长为整数且已知,因为后面要用到)(这里我打印出来是2*2cm的单位格子,一共10*10个) 棋盘图.png格式:http://pan.baidu.com/s/1c2GJAQs2.用需要矫正的相机拍摄各个不同的角度和距离的棋盘图20~25张左右,这些就是标定用的图片。 3.下载maltab、matlab相机标定工具箱(tool

Lrisfish的博客 5361

3D激光扫描三维重建——3.matlab和arduino通信

关于matlab和arduino的通信,matlab有一个专门可以支持arduino的工具包。 https://cn.mathworks.com/hardware-support/arduino-matlab.html 获取工具包 下载后是arduinoio.mlpkginstall文件。 该文件不能直接打开。使用需按以下步骤。 1, 2, 3, 4, 5, 但

Lrisfish的博客 3459

3.2、matlab单目相机标定原理、流程及实验

选取合适的标定板,如Checkerboard或Dot grid,确保标定板图案清晰可识别。使用单目相机拍摄多张标定板图像,并确保角度和位置变化。导入图像:将拍摄的标定板图像导入MATLAB环境中,使用imread函数加载图像。运行函数打开相机标定工具窗口。在相机标定工具窗口中,通过“Add Images”按钮添加标定板图像,然后点击“Calibrate”按钮进行相机标定。在标定完成后,可以查看相机的内部参数(如焦距、主点位置)和外部参数(如相机位置和姿态信息)。

XU157303764的博客 2627

基于matlab的三维重构

同学的报告,比较详细和完整 请勿转载他用,仅供参考学习

结构力学程序算法理论基础(一)————虚功原理

1.约束 定义约束:限制质点或者质点系运动的条件称为约束,表示这些限制条件的数学方程称为约束方程。 (1)几何约束 限制质点或者质点系在空间的几何位置的条件称为几何约束.如单摆,其中质点M可绕固定点O在平面Oxy内摆动,摆长为l.这时摆杆对质点的限制条件是:质点M必须在以点O为圆心,以l为半径的圆周上运动.其约束方程为: 又质点M在固定的曲面上运动,那么曲面方程就是质点M的约束方程,即 上...

l93919861的博客 4511

把STM32MP135当单片机玩:实战SD卡脱机运行LED程序(基于MP135DK开发板)

本文详细介绍了如何在STM32MP135开发板上实现SD卡脱机运行LED程序,通过裸机开发方式(Bare Metal)利用HAL库完成GPIO控制,并解析了SD卡启动流程。内容涵盖工程创建、代码编写、SD卡烧录及常见问题排查,为开发者提供了一种高性能单片机开发方案。

weixin_33734785的博客 242

SAP S4 MM模块自动记账全流程解析:从评估范围到科目分组的实战配置

本文深入解析SAP S4 MM模块自动记账的全流程,从核心概念评估范围与评估控制入手,详细阐述了评估类、科目分组等关键配置的逻辑关系。通过实战配置步骤,指导如何建立从物料移动(如收货、发料)到自动生成准确财务凭证的完整体系,确保库存价值与总账实时同步,为企业构建可靠的财务业务一体化基石。

weixin_29313547的博客 423

Keil MDK编译错误#541解决方案与ARM_Compiler包解析

在嵌入式开发中,编译器工具链的依赖管理是确保项目顺利构建的关键环节。以Keil MDK为例,其软件包依赖机制通过组件化设计实现功能解耦,其中ARM_Compiler包专门处理系统IO重定向等编译器扩展功能。这种架构既提升了模块复用性,也带来了版本兼容性挑战。当出现'Error #541: component missing'报错时,通常是由于中间件组件(如文件系统)在新版本中显式依赖了ARM_Compiler包。开发者需要通过Pack Installer安装该包,并在Run-Time Environment

weixin_32129187的博客 367

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

20、七鳃鳗繁殖与早期生活史:从水质到养殖的全面解析

本文全面解析了七鳃鳗的繁殖与早期生活史,重点探讨了水质对幼体生存的影响、养殖密度与生长关系、变态过程的时间与大小特征,以及人工繁殖在濒危物种恢复和入侵物种控制中的应用。同时,文章分析了大规模养殖面临的挖掘基质需求、空间限制、清洁管理、疾病防控及微生物环境等挑战,并强调实验室养殖对科学研究和种群管理的重要意义。随着技术进步,未来有望扩展更多物种的繁殖研究,揭示七鳃鳗生物学的进化奥秘,实现资源的可持续利用。

l6m7n8的博客 116

Claude Code 错误解决方案: Request Timed Out 超时 原因、配置与解决方案

Claude Code 抛出 Request Timed Out 不仅可 能是网络问题,更大概率是 API 高负载或超大响应导致。本文从 默认超时机制出发,拆解三种根因场景,给出 API_TIMEOUT_MS 环境变量调优与任务拆分策略,帮助开发者在保证稳定性的同时 避免误判网络故障。

多媒体编程、网络编程、系统编程、网络安全编程、驱动编程 899

YOLO项目部署:从Python脚本到Docker容器的企业级交付全流程

YOLO模型企业级Docker部署方案 核心挑战 环境一致性:解决"本地能跑,服务器崩掉"问题 可扩展性:支持单实例到多实例扩展 稳定性:确保99.9%可用性 部署流程 项目改造:模块化代码,分离配置 Docker镜像:支持CPU/GPU环境 API服务:封装推理逻辑 监控告警:实现自动化运维 技术方案 需求 解决方案 环境一致性 Docker镜像+依赖冻结 可扩展性 K8s+负载均衡 稳定性 健康检查+自动重启 项目结构 模块化代码组织 外部化配置管理 精确依赖版本控制 摘要重点:通过

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1230

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

深度学习工具包 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")

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

上一篇: 三维扫描仪[3]——标定·理论
下一篇: 三维扫描仪[5]——标定·Matlab双目标定
我不想好好敲代码
博客等级 码龄10年 50粉丝 13原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值