相机标定(三) —— 畸变校正

一、前言

根据针孔模型,物体和成像之间参数会满足相似三角形的关系。但现实中会存在装配误差和透视失真等原因,导致这种关系无法成立,使理想成像与实际成像存在误差,这种误差即称为畸变。
畸变分为径向畸变,切向畸变和薄棱镜畸变。

二、畸变

2.1 径向畸变

径向畸变字面意思是图像坐标产生径向位置的误差,是由镜头形状缺陷造成的。
径向畸变效果可以分为枕型畸变、桶形畸变,示意图如下所示。

根据opencv给出的r=0处的泰勒展开公式:
在这里插入图片描述
其中,Xdr,Ydr为畸变后像素坐标,x,y为理想坐标,k1,k2,k3为径向畸变参数。

2.2 切向畸变

切向畸变一般是由透镜和芯片的安装位置误差引起的,导致透镜和成像平面不平行。
在这里插入图片描述
公式如下:
在这里插入图片描述
其中Xdt,Ydt为畸变后像素坐标,x,y为理想坐标,p1,p2为切向畸变参数。

2.3 薄棱镜畸变

是由镜头设计缺陷和加工误差导致的,高价位镜头可以忽略。
在这里插入图片描述
其中s1,s2为畸变参数

三、校正

上述公式均为由理想位置求畸变坐标,但实际情况是我们已知畸变位置,需要通过以上公式进行反推,求解k1,k2,k3,p1,p2。
将以上公式相加得到最终公式,其中在实际应用中只需考虑前两阶参数。

参考文章:
相机标定的来龙去脉(详解标定原理、畸变矫正原理、使用经验)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/256360.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SVG技术入门:线条动画实现原理

相信大家都见到过这样神奇的技术:一副线条构成的画能自动画出自己。非常的酷。Jake Archibald是这种SVG技术的首创者,并且写了一篇非常好的文章来描述它是如何实现的。Brian Suda也在24 Ways网站上讨论过它。 Polygon使用它在一篇设计方面的文章里创造出…

机器学习——人工神经网络之BP算法编程(python二分类数据集:马疝病数据集)

目录 一、理论知识回顾 1、神经网络模型 2、明确任务以及参数 1)待估参数: 2)超参数: 3)任务 3、神经网络数学模型定义 1)激活函数 ​ 2)各层权重、阈值定义 3)各层输入输…

Halcon例程(基于多个标定图的单目相机标定)详解—— Camera_calibration_multi_image.hdev

一、前言 在我的工业相机专栏里已经将相机标定涉及到的理论部分讲解完毕,为什么要标定以及标定要求出什么参数呢,用一个Halcon 例程来帮助理解。 这个例程是比较经典的标定程序,基本将标定过程讲的比较清楚,用的标定图像是系统自…

SkipList 跳表

为什么选择跳表 目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树…

Redis failover过程

在Leader触发failover之前,首先wait数秒(随即0~5),以便让其他sentinel实例准备和调整。如果一切正常,那么leader就需要开始将一个salve提升为master,此slave必须为状态良好(不能处于SDOWN/ODOWN状态)且权重值最低(redis.conf中)的…

机器学习——深度学习之卷积神经网络(CNN)——LeNet卷积神经网络结构

目录 一、卷积神经网络 1、卷积神经的作用 2、LeNet 1)数据库准备——minst 2)模型 二、关于卷积神经网络结构的一些术语定义 1、特征图(Feature map) 2、height(长度)、width(宽度&…

工业相机(3D)主要参数详述

一、前言 准确的完成相机选型是一个视觉工程师必备的技能,而选型前必须对其内部参数了如指掌。工业相机是一种比较复杂的产品,其参数很多,每个参数可能会有不同的标准,下面对主要的参数会做比较详细的阐述。 二、参数详述 2.1 …

JAVA8永久代

在Java虚拟机(以下简称JVM)中,类包含其对应的元数据,比如类的层级信息,方法数据和方法信息(如字节码,栈和变量大小),运行时常量池,已确定的符号引用和虚方法表…

Struts 2初体验

Struts2简介: Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。 Struts 2 目录结构:     apps目录:Struts2示例…

机器学习——深度学习之数据库和自编码器

目录 一、数据库——数据获取 1、Mnist 2、ImageNet 二、自编码器(Auto-encoder)——参数初始化 1、功能 2、基本思想 1)训练第一层 2)训练第二层及以后的神经网络 ​ 3)利用BP对整个神经网络的参数初始值进…

Halcon例程详解 (深度图转换为3D图像)—— xyz_attrib_to_object_model_3d

一、前言 深度图向点云图进行转换是进行3D检测项目时会遇到的问题,halcon里也有针对此问题的相关例程,下面对此例程进行分析。通过学习此例程,我们可以掌握如何将一张深度图像和一张正常二维图像转换为3D点云。 二、分析 * 初始化界面 dev…

动态代理之Cglib浅析

什么是Cglib Cglib是一个强大的,高性能,高质量的代码生成类库。它可以在运行期扩展JAVA类与实现JAVA接口。其底层实现是通过ASM字节码处理框架来转换字节码并生成新的类。大部分功能实际上是ASM所提供的,Cglib只是封装了ASM,简化了…

机器学习——深度学习之卷积神经网络(CNN)——AlexNet卷积神经网络结构

目录 一、AlexNet卷积神经网络结构模型 1、数据库ImageNet 2、AlexNet第一层卷积层 二、AlexNet卷积神经网络的改进 1、非线性变化函数的改变——ReLU 2、最大池化(Max Pooling)概念的提出——卷积神经网络通用 1)池化层 2&#xff0…

POJ - 3470 Walls

小鸟往四个方向飞都枚举一下,数据范围没给,离散以后按在其中一个轴线排序,在线段树上更新墙的id,然后就是点查询在在哪个墙上了。 这题有个trick,因为数据范围没给我老以为是inf设置小了,WA了很多发。&…

C# —— 深入理解委托类型

一. 委托定义 1. 委托与多播委托 委托类型表示对具有特定参数列表和返回类型的方法的引用,定义了委托实例可以调用的某类方法。 通过委托,我们可以动态的通过委托变量来调用委托方法。一般用delegate来命名委托类型,但Action和Func也可以达到同样的效果…

【VS开发】【C++语言】reshuffle的容器实现算法random_shuffle()的使用

假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。首先,做格式化时,结果常常是扭曲的,所以得不到正确的随机数&…

C#委托——基础2

在上一篇随笔中,简要说明了怎样定义委托,定义事件,订阅事件,最后也实现了效果,就是当员工类的某个对象,执行某个事件时,委托事件被触发,后面也得到了结果,但是想象一下实…

机器学习——深度学习之编程工具、流行网络结构、卷积神经网络结构的应用

目录 一、编程工具 caffe实现LENET-5 二、流行的网络结构 1、VGGNET 2、Googlenet ​ 3、ResNet​ ​ 三、卷积神经网络的应用 1、人脸识别 ​ 2、人脸验证 3、人脸特征点检测 4、卷积神经网络压缩 一、编程工具 caffe的优点:模型标准化,源代码…

Halcon例程详解(激光三角系统标定)—— calibrate_sheet_of_light_calplate.hdev

前言 1 激光三角测距 激光三角测距法原理很简单,是通过一束激光以一定的入射角度照射被测目标,激光在目标表面会产生漫反射,在另一角度利用透镜对反射激光汇聚成像,光斑成像在CCD(Charge-coupled Device,感光耦合组件)位置传感器上。当被测物体沿激光方向发生移动时,…

【转】如何实现一个文件系统

如何实现一个文件系统 摘要 本章目的是分析在Linux系统中如何实现新的文件系统。在介绍文件系统具体实现前先介绍文件系统的概念和作用,抽象出文件系统概念模型。熟悉文件系统的内涵后,我们再进一步讨论Linux系统中文件系统的特殊风格和具体文件系统在Li…