自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(137)
  • 资源 (3)
  • 收藏
  • 关注

原创 立体匹配|SGM 代价聚合 论文解释

代价聚合部分,是SGM的核心理解之的最重要途径是读paper,然而,相信很多py和我一样,看到这个图的时候,不知所云。我来解释一下:首先,要理解这里表述的背景:聚合路径在视差空间上是直线【见右图】,但是,根据沿着聚合路径视差的改变,投影到对应的匹配图像上,就不是直线了【见左图】我们直接来从坐标轴开始(这也是最令人困惑的地方)左边的部分:横轴写的是x,yx,yx,y,疑惑:一个轴怎么能表示两个坐标?解答:这个轴,并不是传统意义上的笛卡尔直角坐标的表示,而是右图中,某一条聚合路径上 xy的有向滑

2021-12-03 21:53:40 856

原创 3D重建 | COLMAP 源码解析

–持续更新中CmakeLists 项目构建解读SourceCode 解读当我们运行MVS框架时,执行到一下pipelineAutomaticReconstructionController::Run主体框架如下:RunFeatureExtractionRunFeatureMatchingIf sparse:RunSparseMapperIf dense:RunDenseMapper...

2021-11-03 10:07:21 2270 2

原创 debug | pyechart可视化 浏览器显示空白

先是排除各种运行环境问题:运行官方的demo是没问题的由于各种原因,在添加nodes的时候,我重复添加了同名的node如图所示:这就导致题目所说的问题!解决方案:先用set操作去除重复的node!...

2021-08-14 18:03:03 516

原创 多视图几何 本质矩阵与基本矩阵

本文旨在明晰本质矩阵与基本矩阵的概念,以及具体的计算方法。预备知识:对极几何,可以参考多视图几何相关书籍。平面表示方式: 给定平面过一点aaa以及平面上的任一点xxx,以及其法向量nnn,平面可以写成(x−a)n=0(x-a){n}=0(x−a)n=0叉乘与反对称矩阵的关系,下式中,AAA代表向量aaa对应的反对称矩阵:a×b=Aba \times b = Aba×b=Ab一. 本质矩阵Essential Matrix用途:多视图系统中,用于描述不同相机之间位姿关系 (外参) 的矩

2021-05-09 14:18:15 345

翻译 几何基础 | 点与直线

将空间点和直线写成齐次坐标,有以下结论:直线的交点:设有两直线l1l_1l1​与l2l_2l2​,则两直线的交点p=l1p=l_1p=l1​ x l2l_2l2​两点连成的直线:设有两个点p1p_1p1​与p2p_2p2​, 则两点连成的直线l=p1l=p_1l=p1​ x p2p_2p2​注意,以上x为叉积证明:参考 求两直线交点(三维叉积)——求四边形面积(二维叉积)...

2021-05-05 19:05:23 166

原创 深度学习 PyTorch 一维卷积

所谓的一维卷积,也就是卷积核是一维的。原理和2D Conv类似,只不过1D Conv的卷积核移动方向只有一个。而且每组卷积核个数也等于输入人间的通道数。实际操作中,以点云文件为例:包含nx3的数据,进行卷积前首先要交换样本个数与通道。##代码备份##import torchimport torch.nn as nnfrom numpy import *# Args:# in_channels (int): Number of channels in t..

2021-04-07 18:47:20 5929 1

翻译 机器学习 分类器的性能度量标准

实际的工作中,度量方式的选择不当可能会造成巨大的损失。如医疗领域、人机协作中的风险预测等。为了尽量减小决策风险,有必要选择正确的度量方式。而一些我们中文意义上看着比较像的不易区别,这里记录一下。明确几个表示TPTPTP 真正例 , 识别为正,实际为正FPFPFP 假正例 , 识别为正,实际为负TNTNTN 真负例 , 识别为正,实际为负FNFNFN 假负例 , 识别为负,实际为正准确率Accuracy=TP+TNTP+TN+FP+FNAccuracy=\frac{

2021-02-19 15:45:59 163

原创 位姿估计 - PoseCNN中的 Implicit Shape Models (ISM)

文章提到了Imolicit Shape Models(ISM),直观上来看,就是用同一个模型的不同部位,投票出物体的中心坐标。

2021-02-17 14:03:01 241

原创 Python Matlab mat文件IO

用到的包 scipy想用Matlab里面的一部分算法性能测试代码,懒得重新造轮子。直接适配文件格式最便捷。主想在python加载和保存mat文件,直接给出例子:mat文件加载import scipy.io as scioimport os# sourcedata_root = 'D:/MODEL_DATASET/ant.mat'# 以字典类型加载进来data = scio.loadmat(data_root )# print(data['F'])# print(data['V

2021-02-04 11:06:49 145

转载 什么是凸集?

https://developers.google.com/machine-learning/crash-course/glossary?hl=zh-cn#confusion_matrix

2021-01-31 21:50:34 858

原创 可视化 plt绘制空间平面

从一堆点里面拟合出顶点切平面,绘制出这个切平面问题是绘制圆面,其他的原理相同,只是要找到对应的空间方程。先介绍空间圆面:条件:已知圆心、圆上一点和法向量思路:前文有介绍轴角,这里正好用上。将圆上的点移动到圆心坐标后,绕法向量旋转,生成一圈点列。然后再将点列移动到圆心所在位置。使用完成绘制ax.plot_trisurf(v_buff[0], v_buff[1], v_buff[2], linewidth=0.2, antialiased=True, alpha=0.5)上面函数会帮我们完成.

2021-01-20 14:48:40 715

翻译 open3d 点云上交互选点

有时候我想选定点云上的特定点,但一般来讲点云是无序的。下面的教程可以使用鼠标点选。链接http://www.open3d.org/docs/release/tutorial/visualization/interactive_visualization.html

2021-01-19 17:01:52 1776

转载 几何基础 叉乘与反对称矩阵

参考:Rotation About an Arbitrary Axis Chapter 9

2021-01-17 19:41:01 1324 4

原创 几何基础 罗德里格公式

一开始没太搞明白,为什么其中的向量投影是v⋅k⋅kv\cdot k \cdot kv⋅k⋅k 也就是点成了两次kkk,看完才明白标量投影和向量投影之区别。不管怎样,搞明白了就是在进步,也不再感叹自己才疏学浅。向量投影时,我们要考虑大小和方向。大小好说,vvv的模乘以cosθcos \thetacosθ集可得到。另外就是要考虑方向,和kkk同向,也就是要乘以k∣k∣\frac{k}{|k|}∣k∣k​。又cosθ=v⋅k∣v∣⋅∣k∣cos \theta=\frac{v \cdot k}{|v| .

2021-01-16 15:47:35 661 1

原创 点云处理 法向量估计

说一下思路估计每个顶点的法向量,单独从一点来看是无法做到的,一般是找到邻域,以邻域拟合平面近似估计顶点法向量。从计算的角度来看,计算法向量首先连接邻域到顶点,得到一系列向量ViViVi,然后假设一个法向量n⃗\vec{n}n,将法向量与每一个连接向量点乘,并最后求和,优化目标就是fff取得最小值。f=∑i=1n(Vi∗a⃗)f=\sum_{i=1}^{n} (Vi*\vec{a})f=i=1∑n​(Vi∗a)具体做法:基于近邻搜索找到近邻点近邻点减掉顶点求协方差矩阵最小特征值对应的特..

2021-01-07 00:10:50 1239

原创 STM32串口接收策略

最近不做嵌入式,这是一个以前做过产品的技术备份。但是之前请教大神得到一些很好的思路,在此记录。如果我们需要接收一个序列协议,怎么做呢?先放到缓冲区然后再检查标志位是一种思路。道理简单,关键要看怎么设计。这里介绍的方法是巧妙利用定时器,与串口中断进行耦合,得到一种鲁棒的接收方法。具体:打开定时器与串口中断首先用示波器查看完整帧所需要的时间,并且设置为timMax。定时器以适当的中断频率开启(例如1ms),每次中断都使临时变量+1。如果定时器中断时间超过timMax,则令接收数组的指针为0。.

2021-01-06 09:28:28 301

原创 open3d 构建mesh

方法一使用顶点坐标以及三角形索引。这有点像OpenGL了。# 输入是顶点以及每个三角形的索引def get_non_manifold_vertex_mesh(verts, triangles): # verts = np.array( # [ # [-1, 0, -1], # [1, 0, -1], # [0, 1, -1], # [0, 0, 0], # .

2021-01-05 16:42:20 1983

原创 几何基础 将空间平面变换到确定的坐标系

思路:首先估计平面所在的坐标系,得到平面坐标系原点以及三轴的向量表示。这一步可以通过执行SVD实现。减掉坐标中心点的偏移量T根据第一步得到的三个(单位向量表示的)坐标轴,这个就是平面旋转变换的正交基。逆变换后作用于平面,就可以把平面旋转到基坐标系。如果是对平面形式的点云变换,只需要用求出来的变换作用于点云即可。结果给定平面p=[1,0,1,0]p=[1,0,1,0]p=[1,0,1,0]变换前:变换后:![在这里插入图片描述](https://img-blog..

2021-01-05 14:54:47 914 1

原创 几何基础 点投影到直线

思路:设被投影点:xpx_pxp​投影点:x0x_0x0​直线:lt∗x=0l^t*x=0lt∗x=0直线法向量:lnl_nln​xo=t∗ln+xpx_o=t*l_n + x_pxo​=t∗ln​+xp​lt∗x0=0l^t*x_0=0lt∗x0​=0通过以上约束求得t,即可求得投影点坐标...

2021-01-05 09:57:59 1086

转载 几何基础 笛沙格定理

射影几何中的概念:在射影空间中,如果对应边的交点共线,则对应顶点的连线共点。

2021-01-04 10:54:10 1117

原创 模型参数拟合之 RANSAC

一种鲁棒的参数估计方法

2020-12-26 08:57:52 600

原创 FLANN 快速特征匹配

名词含义:des1:第一组特征向量des2:第二组特征向量基于opencv,该方法得到des1在des2中前k个最近的特征输入:相同维度的两个特征描述n行 m列,n是关键点个数,m是每个关键点特征描述的维度输出:前k个最相近的特征向量import cv2from numpy import *# While using ORB, you can pass the following.FLANN_INDEX_LSH = 6index_params = dict(algo..

2020-12-23 22:26:27 1096

原创 opencv报错 (-215:Assertion failed) query.type() == type && indices.type() == CV_32S && dists.type()

一开始一筹莫展,不知道从何处下手。不买关子:既然看到是type什么玩意,那何不试试把输入的数据类型打印出来?首先映入眼帘的是np.array类型。这个和正确的数据类型一样(注意,我有正确的数据类型参照)。还有没有其他可能呢?于是刨根问底:将矩阵的元素类型打印出来: type_1: <class 'numpy.float64'> type_2: <class 'numpy.uint8'>终于真相了。是里面的元素类型不一样。将type1的类型修改后,问题解决。des_.

2020-12-23 20:48:45 414

原创 模型拟合之 幂&指数函数拟合

给定了一组[x,y],让我们去拟合一个指数函数,要如何做?不卖关子:设待拟合函数为y=k∗xay=k*x^{a}y=k∗xa需要求出kkk和aaa.思路是两边取对数,将指数函数拟合问题转换成线性函数变换后:log(y)=log(k)+a∗log(x)log(y) = log(k) + a*log(x)log(y)=log(k)+a∗log(x)绘制log−loglog-loglog−log坐标,则自变量与因变量是线性关系。具体的拟合方法可以使用最小二承,如果数据有噪声,想获得..

2020-12-22 22:36:07 11866 8

转载 opencv python ORB特征提取

简单的摘抄,不做翻译了。Theory:As an OpenCV enthusiast, the most important thing about the ORB is that it came from “OpenCV Labs”. This algorithm was brought up by Ethan Rublee, Vincent Rabaud, Kurt Konolige and Gary R. Bradski in their paper ORB: An efficient alter

2020-12-11 11:07:55 2270 2

翻译 点云可视化 获得与显示bbox

开篇点题,使用open3dimport open3d as o3dimport numpy as npimport timefile_path = '/home/xxx/models/obj_01.ply'pcd = o3d.io.read_point_cloud(file_path)print(pcd)# bboxaabb = pcd.get_axis_aligned_bounding_box()aabb.color = (0, 1, 0)print(np.asarray(aa.

2020-11-28 21:47:14 1061

原创 git 添加所有格式相同的文件

git add 指令单个添加效率很低,还得输入(即使可以自动补全)给出添加所有.py文件的指令,其他同理git add *.py

2020-11-25 13:09:36 551

原创 位姿估计 -- PPF算法的OpenCV实现

给出cpp代码1.pose.cpp//// Created by yaohua on 2020/7/3.//// 3.2.0// https://docs.opencv.org/3.0-beta/modules/surface_matching/doc/surface_matching.html#include "opencv2/core.hpp"#include "opencv2/imgproc.hpp"#include "opencv2/highgui.hpp"#includ.

2020-11-23 16:09:54 3101 19

原创 可视化 -- 绘制热图

如果要表示一个x,yx,yx,y坐标处的一些特征,直观会想到用灰度图以及由灰度转换出来的彩图。但是这样实际操作起来是不太方便的。解决方法:from pyheatmap.heatmap import HeatMapimport numpy as npimport numpy as npimport pandas as pdimport cv2import matplotlib.pyplot as pltimport seaborn as snsimport numpy as np..

2020-11-20 09:55:23 1117 1

原创 优化方法 - 牛顿法 以及Python实现

几行代码实现牛顿法求解方程最小值,这里举例一维最简单的情况# find the minimum of y# y = x^2 + x + 1# y' = 2x + 1# y'' = 2x0 = 91.91g = 2*x0 + 1 # f'(x0)gg = 2 # f''(x0)while abs(g) > 0.001: # update x0 x0 = -g/gg + x0 # update one order partial g = 2*.

2020-11-14 20:04:50 1281

原创 优化方法 - 梯度下降 Python实现

优化是很有趣的事情,在机器学习等应用里面起着重大作用。本节就用最简单的几行代码,用梯度下降实现一个一元二次方程的最小值求解。# TODO:# find the minimum of y described below# y = x^2 + x + 1x0 = 1 # start with x0lama = 0.1 # lamadag = 2*x0 + 1# kernel functionwhile g > 0.001: # partial x > a very .

2020-11-14 18:15:57 309

原创 相机标定 -- 2 从单应矩阵H分解出初始内参A

具体的计算还是看论文o,原理是利用了外参矩阵中旋转矩阵部分的单位正交性。具体实施:对单位正交构造的方程进行变形,利用所有的单应矩阵H的数值构建好V矩阵,构造出关于未知内参数的线性方程组。利用svd求解Vb=0Vb=0Vb=0超定方程,最小特征值对应的特征向量就是我们要求的bbb。根据Appendix_BAppendix \_BAppendix_B,bbb中的数值可以变形出所有的内参数,作为初始值。踩坑:在使用Python求解的时候还有一些细节需要注意,np等函数库求出svd之后,要对..

2020-11-08 10:09:13 1041 1

原创 6DoF位姿估计的度量标准

ADD --Average Distance提出于PoseCNN。已知Ground turthR、TR、TR、T 以及预测结Rp,TpR_p,T_pRp​,Tp​,用这两个数据对模型点云进行投影,然后求出每个对应点距离的平均值。ADD=1m∑x∈model∣∣(Rx+T)−(Rpx+Tp)∣∣ADD=\frac{1}{m}\sum_{x\in{model}}||(Rx+T) - (R_px+T_p) ||ADD=m1​x∈model∑​∣∣(Rx+T)−(Rp​x+Tp​)∣∣如果计算出来的A.

2020-11-06 15:44:24 3225 6

原创 点云补全网络 PF-Net小笔记

介绍一下我认为的亮点:使用了多尺度点云特征提取。借鉴了IFPS 进行点云下采样(当然,并非首次出现于此工作,来源于PointNet++),下采样效果好于随机选取。多尺度特征解码器,作者声称可以更好地考虑局部几何特征在重建策略方面,不同于以往关注全部的点云,这项工作重点关注丢失的部分,好处是没有丢失的点云的还可以保持原始的形状。借鉴GAN形成adv损失。...

2020-11-05 15:04:45 1120

原创 相机标定--1.单应矩阵求解

根据张正友相机标定原理(具体请看论文),首先需要求得单应矩阵,目的是为了得到世界坐标到像素点的映射关系。其中包含了内参和当前标定板下的外参,在后面的标定过程中通过分解单应矩阵得到内外参的初始值。因为论文写的详细,求解方法就是使用最小二乘拟合求解超定方程。在此给出Python程序。import osimport numpy as npimport cv2from scipy import linalgif __name__ == '__main__': print('求..

2020-11-04 19:28:53 1227 2

原创 PyTorch RuntimeError: size mismatch, m1:

nn.Linear使用的时候需要给定(in_channels, num_classes),在查看torch的FastRCNNPredictor官方实现时,想弄清楚一些细节。随便打一点测试代码,报错如下RuntimeError: size mismatch, m1: [3 x 4], m2: [3 x 2] at /pytorch/aten/src/TH/generic/THTensorMath.cpp:41其实很明显,说明维度不对。于是我们就明白,FastRCNNPredictor的to..

2020-10-31 09:55:29 3874

原创 opencv[坑] TypeError: an integer is required (got type tuple)

想用用opencv是真的不容易,总会给你带来惊喜如果在画框、画线的时候你的报错如下:cv2.rectangle(src, (20, 20), (100, 100), (200, 0, 0), 1)TypeError: an integer is required (got type tuple)检查颜色空间是不是BGR比如我之前的通道顺序是RGB,一开始没太在意,因为我只想先把框框画出来玩玩,于是一直会有报错!万万没想到,在我使用cvtColor之后,问题解决!# 颜色空间转换..

2020-10-30 14:45:35 2027

原创 ubuntu 硬盘开机挂载

1.创建挂载点,就是新建一个文件夹sudo mkdir HDD_12.使用命令查看硬盘sudo fdisk -l3.使用命令挂载硬盘sudo mount /dev/sda1 HDD_1以上已经将硬盘挂载上去4.实现自动挂载参考[1] https://www.jianshu.com/p/ec5579ef15a6...

2020-10-28 15:16:41 166

原创 OpenGL加载纹理

运行环境我是直接跟着learn opengl里面的教程搞了,cmake编译一下,用VS2019(2017之类的同理)。在绘制三角形教程的基础上,主要注意修改一下顶点渲染器和片段渲染器里面的变量。shader.cpp等不用动,这一部分是用来编译渲染器代码的。给出需要修改的代码,在代码中给出注释进行对应学习也不错哈哈1.主程序main.cpp// Include standard headers#include <stdio.h>#include <stdlib...

2020-10-05 23:05:17 856 1

转载 PyTorch 通道/空间注意力机制

哈哈哈,这是我摘抄出来的…通道注意力机制就是学习一个不同通道的加权系数,同时考虑到了所有区域空间注意力机制就是学习整个画面不同区域的系数,同时考虑到了所有通道class ChannelAttention(nn.Module): def __init__(self, in_planes, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d

2020-09-22 22:12:46 10225 10

相机内参标定 Python实现 根据单应矩阵求出内参

相机内参标定 Python实现 根据单应矩阵求出内参,包含单应矩阵文件加载,内参求解。算法是张正友相机标定方法的部分复现

2020-11-08

python_spectral_clustering.zip

模式识别作业,这个做出来之后效果很炫,所以和大家分享一下,共同学习!使用说明详见我的博客--模式识别专栏 内容包含谱聚类所有代码,以及一个月亮形的数据集!

2020-06-24

static.zip 解决visdom 浏览器蓝屏

如果蓝屏,那是因为无法,从而无法下载必要的文件。 在ubuntu系统下 文件位于/home/用户名/.local/lib/python3.7/site-packages/visdom,直接解压后替换就可以。 如果是mac、windows,请在anaconda虚拟环境的envs找到python3.x/site-packages/visdom,替换调同样可用

2020-06-01

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除