DLT(Direct Linear Transform)算法

1、DLT定义

           DLT是一个 用于解决包含尺度问题的最小二乘问题 的算法。

          DLT解决问题的标准形式为:

                                     

         另一种表现形式为:

                            或者    

         这种模型在投影几何中会经常遇到。

         例如,针孔相机投影模型,3D点到图像平面的投影关系;

                 两视图几何中的单应性矩阵(Homography);

2、DLT求解

           因为尺度的存在,因为不能用线性齐次最小二乘法直接求解。

         由(1)(2)式子可知:的方向是相同的,即叉乘结果为0:

                                        

            对(3)用叉乘矩阵来表示:

                                

          对于(4)式,可参考:向量叉乘与叉乘矩阵

          对(4)式进行变型就可以得到一个线性齐次最小二乘求解问题。可以参考:最小二乘法

3、举例

                         

                                  

           由公式(4):

                      

           展开:

                      

           写成矩阵的形式:

                                

           其中:

                              

时间: 2024-10-16 20:25:33

DLT(Direct Linear Transform)算法的相关文章

[转]STL transform算法中使用toupper函数

原文转自 http://blog.csdn.net/justin12zhu/article/details/5649236 今天需要实现一个把小写字母转换为大写字母的函数,由于传入的参数是STL中的string类,所以第一想法就是用transform算法来实现这功能,但是报错了.回家之后写了下面一个测试代码来看看到底错在哪里和怎么解决. #include <iostream> #include <algorithm> #include <cctype> using na

transform算法

 transform()的第一版本以仿函数op作用于[first,last)中的每一个元素身上,并以其结果产生出一个新序列.第二版本以仿函数binary_op作用于一双元素身上(其中一个元素来自[first1,last1),另一个元素来自"从first2开始的序列"),并以其结果产生出一个新序列.如果第二序列的元素少于第一序列,执行结果未可预期. //版本一 template <class InputIterator,class OutputIterator,class Un

C++11 lambda表达式在for_each和transform算法下的使用

以前,在lambda表达式没有进入标准的时候,对容器的遍历等涉及到使用函数指针的情况,一般人会懒得使用std::for_each,或std::transform,也许只是一个短短的几句话,却要单独写个函数,或函数对象,写的代码反而不如自己用for循环来的快. 但是,C++11引入了lambda表达式后,一切都变的简单了! 1.lambda表达式 lambda表达式是一个匿名函数,用它可以非常方便的表示一个函数对象,先简单说一下lambda表达式,下面这张图表示了C++11中lambda表达式的写

C++探究transform算法

transform函数原型 1. template<class _InIt, class _OutIt, class _Fn1> inline _OutIt transform(_InIt _First, _InIt _Last, _OutIt _Dest, _Fn1 _Func) { // transform [_First, _Last) with _Func _DEPRECATE_UNCHECKED(transform, _Dest); return (_Transform_no_dep

在vs中跑动ransac

期间遇到很多问题. 记一个最主要的是: LINK2019 无法识别的外部符号,然后某一个函数的函数名 然后是 @@函数名 (@) 大概长成这样.或者还就根本就是 无法识别的外部符号. 解决方案: 我这里最主要的两个解决方案是: 2.你自己写的函数声明的头文件也写了函数定义的cpp文件,却依然出现LNK2019错误.可能原因:忘记将这两个文件加入工程了.一般出现于用Visual Studio和记事本(或UltraEdit)混合开发过程,你用记事本include了相应的头文件,却忘了在Visual

STL经常使用遍历算法for_each和transform的比較

for_each()和transform()算法比較 1)STL 算法 – 改动性算法 for_each() copy() copy_backward() transform() merge() swap_ranges() fill() fill_n() generate() generate_n() replace replace_if() replace_copy() replace_copy_if() 2) for_each() 速度快 不灵活 transform() 速度慢 很灵活 普通

STL常用遍历算法for_each和transform的比较

for_each()和transform()算法比较 1)STL 算法 – 修改性算法 for_each() copy() copy_backward() transform() merge() swap_ranges() fill() fill_n() generate() generate_n() replace replace_if() replace_copy() replace_copy_if() 2) for_each() 速度快 不灵活 transform() 速度慢 非常灵活 一

stl变易算法(二)

本篇接着前篇stl变易算法(一)继续讲述变易算法.主要介绍transform.replace.replace_if.replace_copy以及replace_copy_if的用法及实现代码,并给出测试用例. 元素变换transform transform算法用于实行容器元素的变换操作.如下两个使用原型,一个将迭代器区间[first,last)中元素,执行一元函数对象op操作,变换后的结果存放在[result,result+(last-first))区间中.另一个将迭代器区间[first1,la

计算机视觉目标跟踪的算法分类

摘自百度百科............. (1)基于区域的跟踪算法 基于区域的跟踪算法基本思想是:将目标初始所在区域的图像块作为目标模板,将目标模板与候选图像中所有可能的位置进行相关匹配,匹配度最高的地方即为目标所在的位置.最常用的相关匹配准则是差的平方和准则,(Sum of Square Difference,SSD). 起初,基于区域的跟踪算法中所用到的目标模板是固定的,如 Lucas 等人提出 Lucas-Kanade 方法,该方法利用灰度图像的空间梯度信息寻找最佳匹配区域,确定目标位置.之