EPnP
EPnP
参考链接:深入EPnP算法
针对以上链接,提取个人可以看懂的部分
PnP问题的定义
Perspective-n-Point问题(PnP)的已知条件:
n个世界坐标系中的3D参考点(3D reference points)坐标;
与这n个3D点对应的、投影在图像上的2D参考点(2D reference
points)坐标;
摄像头的内参K; 求解PnP问题可以得到摄像头的位姿。
大多数非迭代的PnP算法会首先求解特征点的深度,以获得特征点在相机坐标系中的3D坐标,而EPnP算法将世界坐标系中的3D坐标表示为一组虚拟的控制点的加权和。对于一般情形,EPnP算法要求控制点的数目为4,且这4个控制点不能共面。因为摄像头的外参未知,这四个控制点在摄像头参考坐标系下的坐标是未知的。而如果能求解出这四个控制点在摄像头参考坐标系下的坐标,我们就可以计算出摄像头的位姿。
Control Points &
Barycentric Coordinates
控制点和重心坐标
4个控制点在世界坐标系中的坐标为 \(c_j^w , j =...
Java多线程笔记-1
Java多线程-1
线程创建
继承Thread类
实现Runnable接口
实现Callable接口 (了解)
一、继承Thread类
自定义线程类继承Thread类
重写run() 方法, 编写线程执行体
创建线程对象, 调用start() 方法启动线程
123456789101112131415161718192021// 创建线程方式一: 继承Thread类, 重写run() 方法, 调用start开启线程public class TestThread1 extends Thread { @Override public void run() { // run 方法线程体 for (int i = 0; i < 20; i++) { System.out.println("我在看代码" + i); } } // main 线程 主线程 public...
自编小程序PDF转图片
PDF转图片
完整源码:https://github.com/JiaZhengJingXianSheng/PDF2Image
x86-64 可执行文件:
链接:https://pan.baidu.com/s/1Qk_SCLNtnYLSxfu0ArF5-Q
提取码:at0c
执行源码须自己配置依赖,需配置traits,请自行搜索解决。打包后的可执行程序链接如上。
注意:
程序因未作错误判定,请选择PDF文件夹时,保证文件夹下仅有pdf文件。
程序核心
1234567891011for file in os.listdir(self.path): pdf = fitz.open(self.path + "/" + file) # 逐页读取PDF for pg in range(0, pdf.page_count): page = pdf[pg] pm = page.get_pixmap() # 开始写图像 pm.save(self.path + "/../Image/" + str(file) +...
听徐宗本院士SLM所记
听徐宗本院士SLM所记
起初是在大湾区科学论坛听到徐宗本院士所讲迁移学习,故作笔记如下
新的学习任务是否和过去的任务有关联,或关联程度如何
学习机器模型搭建是否好
原训练集和现在的训练集是否在一个阈值内。
数据自动化
数据自选择
数据自校正
数据自生成
数据建模
网络自调节
特征自调节
网络剪枝
自适应降维
信息单元参数化设计
结构组装
度量自构建
样本相关损失函数确定
自适应损失函数确定
模型选择
算法自动化
学习率自适应
Learning to optimize
Linux下模拟实现简单的Shell
Linux下模拟实现简单的Shell
完整代码:https://github.com/JiaZhengJingXianSheng/Linux_Shell
一、 fork
fork系统调用用于创建一个新进程,称为子进程,它与进程(称为系统调用fork的进程)同时运行,此进程称为父进程。创建新的子进程后,两个进程将执行fork()系统调用之后的下一条指令。子进程使用相同的程序计数器,相同的CPU寄存器,在父进程中使用的相同打开文件。
特点
1)在父进程中,fork返回新创建子进程的进程ID;
2)在子进程中,fork返回0;
3)如果出现错误,fork返回一个负值;
如果创建新进程成功,则出现两个进程,一个是子进程,一个是父进程。在子进程中,fork函数返回0,在父进程中,fork返回新创建子进程的进程ID。因此我们可以通过判断fork返回值来确定进程是子进程还是父进程。
二、 execvp
execvp() 会从PATH所指的目录中查找符合参数file
的文件名,找到后便执行该文件,然后将第二个参数...
朴素贝叶斯分类器
朴素贝叶斯分类器
完整代码:https://github.com/JiaZhengJingXianSheng/Naive-Bayes-Classify
基础
贝叶斯分类的基础是概率推理,就是在各种条件的存在不确定,仅知其出现概率的情况下,如何完成推理和决策任务。
而朴素贝叶斯分类器是基于独立假设的,即假设样本每个特
征与其他特征都不相关。
朴素贝叶斯分类器依靠精确的自然概率模型,在有监督学习
的样本集中能获取得非常好的分类效果。
条件概率
假设A,B是两个随机变量,它们的联合概率 P(A=x,B=y)
是指 A=x和B=y同时 发生的概率。
如果A和B是两个随机变量,且 P(B)≠0 。那么B条件下,A
的条件概率为 \[
P(A|B)=\frac{P(A,B)}{P(B)}
\]
我们用Ω代表总样本空间,P(A|B)的隐含假设是,B确定要发生。当确定B发生时,
样本空间不再是Ω,而是缩小成B。我们在B样本空间中 寻找A发生的概率。
贝叶斯定理
贝叶斯定理 (Bayes theorem)...
视觉SLAM十四讲 Chapter4
李群与李代数
参考书目 《视觉SLAM十四讲》 高翔 张涛 等著
参考链接: https://zhuanlan.zhihu.com/p/33156814
一、 李群与李代数基础
1. 李群
三维旋转矩阵构成了 特殊正交群 \(SO(3)\) ,变换矩阵构成了
特殊欧式群 \(SE(3)\)
\[
SO(3)=\{R \in R^{3 \times 3} |RR^T=I,det(R)=1\}
\]
\[
SE(3)=\{ T = \begin{bmatrix} R & t \\ 0^T & 1 \end{bmatrix} \in
R^{4\times4} | R \in SO(3),t \in R^3\}
\]
它们对于加法是不封闭的,换句话说两个变换矩阵相加后得到的矩阵并不是一个变换矩阵。
定义:李群就是具有
连续(光滑)...
视觉SLAM十四讲 Chapter3
三维空间刚体运动
参考书目 《视觉SLAM十四讲》 高翔 张涛 等著
参考链接 https://zhuanlan.zhihu.com/p/32937868
一、 旋转矩阵
1. 点、向量和坐标系
我们一般用三维空间中的点来表示我们的物体,向量来表示点在空间中的移动,简单定义在这边不再赘述。
假定我们现在有向量 \(a和b\) 用
\(<a,b>\)
表示向量之间夹角,那么对外积而言我们定义 a与b的外积 =
a^b
,外积的结果是一个向量,根据右手定则方向垂直于这两向量形成的平面,大小为
\(|a||b|sin<a,b>\) ,我们把
a^ 称为 反对称矩阵 。
2. 坐标系间的欧式变换
对于两个坐标系之间的变化,我们可以用
一个旋转和一个平移 表示,这种运动称为
刚体运动 。
我们的 欧式变换 就是由 旋转和平移
组成。假定我们某点在 \([e_1,e_2,e_3]^T\) 坐标系下坐标为 \([a_1,a_2,a_3]^T\) , 在...
Linux下模仿实现readelf部分功能
模仿实现Linux下 \(readelf\) 工具部分功能
完整实现:
https://github.com/JiaZhengJingXianSheng/ReadELF
ELF 目标文件格式的最前部是 ELF文件头 (ELF
Header) ,它包含了描述整个文件的基本属性,比如 ELF
文件版本、目标机器型号、程序入口地址等。紧接是 ELF 文件各个段。其中ELF
文件中与段有关的重要结构就是 段表 (Section Header
Table) ,该表描述了ELF
文件包含的所有段的信息,比如每个段的段名、段的长度、在文件中的偏移、读写权限及段的其他属性。
在 linux 下elf的定义存放在 \(/usr/include\) 下, 我们可以用 \(readelf -h\)
命令加上文件来查看ELF头文件。
1vim /usr/include/elf.h
ELF 的文件头中定义了...
Java简单策略模式
Java策略模式
参考书目 《大话设计模式》 程杰 清华大学出版社
代码链接
https://github.com/JiaZhengJingXianSheng/Calculate_By_Java_Version2
本文是对上篇 Java简单工厂模式
的重写,以达到代码更易于维护的目的。
一、 定义接口
与上篇不同,这篇我们选择定义接口,并在后续功能实现中, \(implement\) 我们的接口。
接口定义加上参数,方便后期调用,定义如下
123public interface OperationInterface { double getResult(double A, double B) throws Exception;}
二、 定义运算
接下来定义各种方法,来实现我们的接口。
123456public class OperationAdd implements OperationInterface { @Override public double getResult(double A,...