AX=0的最小二乘解

结论:当$||x||=1$时,$Ax=0$的最小二乘解是$A^TA$的最小特征值对应的特征向量。

上个命题等同于:$A^TA$的最小特征值所对应的特征向量可使得$||Ax||$最小。证明如下:

阅读全文 »

矩阵分解理论

本节主要记录常用的矩阵分解,知识主要来源于上学期所学的矩阵分析课程。不同于大多数的博客,我这里主要在复线性空间和酉空间中讨论。没有矩阵分析基础的同学,文章前边的一些内容看起来会比较晦涩,但是学过线代看明白矩阵分解部分的内容是不成问题的。

阅读全文 »

这篇文章记录一下平时我使用到的一些比较好用的工具,平时一些指令记不住每次有需求总是面向百度解决,这里开一篇博客,用来记录常用的一些指令。

阅读全文 »

多视图三角化

在介绍三角化之前,我们先引入一个符号“^”。通常我们通过下面的公式计算两个向量的叉乘(外积):

$$
\boldsymbol{a} \times \boldsymbol{b}=\left[\begin{array}{ccc}
\boldsymbol{i} & \boldsymbol{j} & \boldsymbol{k} \\
a_{1} & a_{2} & a_{3} \\
b_{1} & b_{2} & b_{3}
\end{array}\right]=\left[\begin{array}{c}
a_{2} b_{3}-a_{3} b_{2} \\
a_{3} b_{1}-a_{1} b_{3} \\
a_{1} b_{2}-a_{2} b_{1}
\end{array}\right]=\left[\begin{array}{ccc}
0 & -a_{3} & a_{2} \\
a_{3} & 0 & -a_{1} \\
-a_{2} & a_{1} & 0
\end{array}\right] \boldsymbol{b} \triangleq \boldsymbol{a}^{\wedge} \boldsymbol{b}
$$

引入“^”符号后,把$a$写成矩阵,实际上是一个反对称矩阵,如此就把外积$a \times b$写成了矩阵与向量的乘法$a^{\wedge}b$。

阅读全文 »

九、获取线程函数返回值

本节主要记录std::async函数模板、std::future类模板、std::packaged_task类模板、std::promise类模板的使用。

1、std::async、std::future创建后台任务并返回值

阅读全文 »

1、Lucas-Kanade光流

特征跟踪是指对于第一帧图像I中的像素$u = [u_x,u_y]^T$,在第二帧J中找到与其对应的像素$v=u+d=[u_x+d_x,u_y+d_y]$,我们的目标就是计算出$[d_x,d_y]$。

阅读全文 »

八、条件变量std::condition_variable类

本节主要记录std::condition_variable类,以及wait()成员函数。

1、条件变量使用场景

条件变量类:std::condition_variable,是一个和条件相关的类,这个类需要和互斥量来配合工作,用的时候需要生成这个类的对象。一个适用的场景如下:

线程A中:等待一个条件满足,之后执行;

线程B中:线程B满足条件之后触发线程A。

阅读全文 »

七、单例设计模式

1、单例类的设计

在众多的设计模式中,单例设计模式使用的频率比较高,这里做一个总结。所谓单例:是整个项目中,有某个或者某些特殊的类,只能创建一个该类的对象。这个类可以通过特殊的写法构建:

阅读全文 »

六、unique_lock详解

本节详细记录std::unique_lock类模板。

std::unique_lock是一个类模板,工作中一般使用lock_guardlock_guard取代了mutexlock()unlock(),unique_lock也是实现自动加锁的,相比于lock_guard它更加灵活,但是也更消耗资源。默认构造的情况下,unique_lock可以完全取代lock_guard

阅读全文 »