图像处理 计算机视觉
文章平均质量分 66
cheng.li@3D_Vision
B站讲解摄影测量和三维重建
欢迎交流摄影测量与slam!
B站:橙子的RGB空间
展开
-
VPS 和GPS 、SLAM 之间的爱恨情仇
空间即入口,入口即计算。谈到AR,我们往往会想起slam技术,而会忽略里面最重要的VPS技术,我坚信在未来VPS将会成为通用的定位系统,借用最近WWDC 2023 Apple Vision Pro 发布会上的一句话“The era of spatial computing is here”。原创 2023-06-09 09:04:22 · 695 阅读 · 0 评论 -
关于视觉三维重建colmap 一期课程,我想说点什么
colmap 一期课程已经结束有半年了,但是总觉得少了点什么,所以这篇文章亦是复盘原创 2022-05-19 18:35:11 · 2976 阅读 · 14 评论 -
视觉三维重建:计算机视觉的核心任务
一、前言视觉三位重建一直是计算机视觉和摄影测量领域讨论的话题,且在近几年更是大家关注的热点、如数字孪生、AR、自动驾驶的高精度地图等。视觉三维重建相比激光三维重建,虽然精度上处于劣势,但是视觉具备更丰富的信息且成本低廉,故是数字化场景的首选方案,到目前为止,视觉三维重建框架层出不穷,其开源代表有colmap(2016)、openmvg(2012)、openmvs、alicevison、opensfm 等,商业代表有ContextCapture、photoscan、pix4D、realicature 等。商原创 2021-08-04 19:02:18 · 1191 阅读 · 0 评论 -
ceres 求slam 或者 SfM的协方差及ceres 四元数求导
ceres 如何进行后验估计ceres 求landmark的协方差矩阵以下代码是自己在colmap 中实现的/// 计算每个3D points的协方差 for (const image_t image_id :config_.Images()) { Image& image = reconstruction->Image(image_id); for (const Point2D& point2D : image.Points2D()) { if (!po原创 2021-05-17 13:07:40 · 1472 阅读 · 3 评论 -
ceres UnitQuaternionRotatePoint 利用单位四元数旋转向量的函数算法原理推导
背景算法效率的提升需要扣细节,每个函数,每个过程都需知道其流程算法原理推导改进原算法template <typename T> inlinevoid UnitQuaternionRotatePoint(const T q[4], const T pt[3], T result[3]) { const T t2 = q[0] * q[1]; const T t3 = q[0] * q[2]; const T t4 = q[0] * q[3]; const T原创 2021-05-15 17:02:26 · 906 阅读 · 0 评论 -
彻底搞透视觉三维重建:原理剖析、代码讲解、及优化改进
课程特点:1、没有太多的乏味的公式推导,有也是讲物理意义(因为大家大多数都是非数学专业)2、教你学会吸"新"大法,即是学会把其他优秀的开源框架算法在colmap中实现3、思路得以实际应用i 、对于学生党,能快速实现一个新的idea,完成paper的撰写ii、对于算法从业人员,对于一篇paper看完,不止是停留在一句"卧槽"就没下文的尴尬场景,能快速做出东西representation 给老板课程详细link 如下一定要点击!!!!!!!!!!!!!!!!!!!课程详细介绍和购买链接...原创 2021-05-09 18:07:31 · 809 阅读 · 0 评论 -
colmap融合 gps
图像数量 556帧图1 是纯colmap 跑的结果,可以看到明显的drift图2 是基于colmap fusion gps的结果修改后的colmap,精度明显提升,可用于AR,过隧道,高精度建图等环节,打算写一篇paper后开源算法!!!原创 2021-03-31 17:16:14 · 1851 阅读 · 4 评论 -
openmvg、colmap windows10编译经验文档
openmvg、colmap windows 10编译经验文档因为公司业务发展需要,需要从linux转windows,这就意味着大概4年没有用过windows人需要把linux上的代码移植到windows,下面是在windows上编译colmap 和openmvg的一些workflow.colmap 跨平台移植(vcpkg 和cmake 结合的方式)1、需要手动安装的库安装cmake ,https://cmake.org/download/ 下载安装即可添加环境变量(cmake 安装位置),原创 2021-02-03 17:18:04 · 1658 阅读 · 1 评论 -
bundle adjustment 详解
bundle adjustment 的历史发展bundle adjustment,中文名称是光束法平差,经典的BA目的是优化相机的pose和landmark,其在SfM和SLAM 领域中扮演者重要角色.目前大多数书籍或者参老文献将其翻译成"捆绑调整"是不太严谨的做法.bundle adjustment 最早是19世纪由搞大地测量学(测绘学科)的人提出来的,19世纪中期的时候,geodetics的学者就开始研究large scale triangulations(大型三角剖分)。20世纪中期,随着came.原创 2020-12-07 11:01:22 · 7533 阅读 · 0 评论 -
摄影测量(计算机视觉)中的三角化方法
摄影测量(计算机视觉)中的三角化方法 提到三角化大家都十分熟悉,在CV 领域中,由像点计算物点的过程称为三角化,但在摄影测量领域,其称作为前方交会。值得注意的是单张影像是无法恢复像点的三维坐标,至少需要两张影像才能得到像素点的真实坐标(这里已知两张影像的pose信息) 三角化有很多方法,这里介绍两帧三角化、多帧三角化、迭代三角化、选权迭代多帧三角化(并附上本人代码)。1、两帧三角化在opencv 中函数triangulatePoints就可根据两帧的pose 和内参恢复三原创 2020-12-05 13:45:28 · 2454 阅读 · 0 评论 -
三维重建的定位定姿算法
前言3D视觉的核心问题是恢复场景结构、相机位姿、和相机参数,而解决方式有两种,一种是off-line的sfm(structure from motion),一种on-line的slam(simultaneous localization and mapping)。Slam 与sfm的区别在于,大多数slam系统是需要提前标定相机,而sfm 则不需要提前标定(通常所说的三维重建和slam的区别,严格意义上应该是sfm 和slam的区别)。Sfm 可以分为以下几类:Global SfM、Increment原创 2020-10-19 19:34:04 · 2215 阅读 · 1 评论 -
三维重建开源和商业软件对比
目前:自己的pipeline是:colmap+openmvs原创 2020-08-12 20:42:59 · 1568 阅读 · 2 评论 -
如何完成一个算法方案的流水线
最近发生了一些事情,觉得做任何事情必须有一个计划或者做完事情有一个总结。入职一年载,感觉学到的东西并不多,只是在自己的一亩三分田耕耘,进步甚小,无比惭愧。列下一些要求,约束自己:1、做项目之前,把整个逻辑的流水线写通(如画简单的流程图),然后再去写代码2、做完一个项目,要总结自己,自己的不足,项目哪些地方需要迭代优化3、学习力的持续,前沿论文和书籍的阅读,其他相关代码的阅读4、保重身体...原创 2020-07-19 14:27:15 · 645 阅读 · 0 评论 -
vslam 和三维重建可以修改的地方
关于vslam : 目前很多策略都是在想如何提高鲁棒性,其实主要的还是保证匹配的正确性即可,比如用superpoint 、d2net 之类替换前端部分,其实vslam后端部分已经没有什么可以改的了,像BA-net 这种深度学习框架只能发论文,实用性较差。vslam 目前的问题:1、long term 就是夏天建的图冬天要能用,2、动态物体对定位的影响,3、弱纹理匹配问题。关于三维重建: 其实可以分为定位 AND 建图,定位的话全局sfm ,如果有其他传感器的的测量值,如rtk,其实这里的定位我指的是定位姿原创 2020-07-05 13:43:13 · 539 阅读 · 0 评论 -
纯旋转情况下相机标定,f焦距确定
```python#include “opencv2/core/core.hpp”#include “highgui.h”#include “opencv2/imgproc/imgproc.hpp”#include “opencv2/features2d/features2d.hpp”#include “opencv2/xfeatures2d.hpp”#include “opencv2...原创 2019-03-09 17:36:44 · 1491 阅读 · 3 评论 -
相机标定+极线矫正+elas生成视差图
一、相机标定标定的资料很多,就是确定其相机的内参矩阵fx,fy,x0,y0,k1,k2,k3,p1,p2;目前来看可分为online 和offline两种方式,前者在cv领域较多,后者在摄影测量中较多。摄影测量中标定分为平面场标定和三维场标定。平面场的标定多采用张正友的方法,而三维场标定即是2D-3D的变换。二、极线矫正极线矫正的目的是使得立体相对具有相同的y坐标,可分为两种:1、标定相...原创 2019-03-08 15:17:07 · 3588 阅读 · 1 评论 -
脸部68个特征生成三角网和泰森多边形
动态效果图效果图1、2、视频转为gif命令:ffmpeg -i ****.avi ***.gif代码如下:#!/usr/bin/pythonimport cv2import numpy as npimport randomimport sysimport dlib# 检查点是否在rect内def rect_contains(rect, point) : if...原创 2018-12-10 14:41:56 · 1117 阅读 · 0 评论 -
车位状态检测
一、分割图像得到样本(这一步至关重要)给定若干副图像,如何得到样本点?----传统图像的经验如下一副图像1)颜色提取,得到白色黄色的RGB图像效果如下:2)灰度化(技巧利用map函数,map(func,iter))3)利用canny边缘检测4)提取感兴趣区域效果图如下:5)霍夫直线检测(给予边缘检测后的图像)6)得到每个车位的块(一列)(1)对霍夫直线过滤(2)对起...原创 2018-11-17 15:08:09 · 4947 阅读 · 1 评论 -
有用的URL,大量的干货!!!!!!!!!!!!
这篇不算提供技术,笔者之前收藏了很多有用的学习资料URL,拿出来供大家共享!!!!!!!!! PythonTab:Python中文开发者社区门户 http://www.pythontab.com/ Python 零基础入门资料整理(更新版)Web开发酷勤网 http://www.kuqin.com/shuoit/20150415/345732.html?url_type=39&object_原创 2017-10-22 15:47:27 · 1410 阅读 · 0 评论 -
图像分类---余弦相似度--svm---softmax
本次主要对比三种分类算法的效果1、 基于余弦相似度2、 基于线性svm3、 基于softmaxregression因为目前还没有学习deep learning 之类,如cnn可以直接处理行图像(如200*200的image ->1*40000),但是深度学习要求大量的数据才能成功。本次实验数据从该网址:http://www.robots.ox.ac.uk/~vgg/data/flowe...原创 2018-04-18 20:30:41 · 7437 阅读 · 1 评论 -
计算blob的方向
计算blob 方向有两种方法:一种是利用PCA;一种是利用图像矩。本次主要介绍基于PCA算法的计算:1、 点矩阵我们将处理的二维点大小为2*m,第一行为x,第二行为y2、 每个点减去均值计算x坐标的行数。对于每个x点,减去它的均值。对y坐标做同样的处理。平均减法最小化了近似数据和中心数据的均方误差。3、 计算协方差 2*24、 特征值与特征向量计算5、 特征向量重排序,特征值大的对应的特...原创 2018-04-19 09:37:24 · 627 阅读 · 0 评论 -
从摄影测量到计算机视觉----以SFM算法为例,用python+opencv 实现
因为这篇公式和图比较多,所以笔者以贴图像的形式来,附上最终的结果图。如果你需要笔者的代码,可以发邮件或者去github,笔者后续会贴上github链接。 1、 两者之间的关系 摄影测量是研究被摄物体的形状、大小、和相对位置关系的一门学科;计算机视觉可以看作是图像处理的升华(image—knowledge)。两者之间有太多的相似之处,如bundle adjustment,摄影测量中称之为光...原创 2018-05-08 21:33:50 · 10113 阅读 · 18 评论 -
使用ChARUco 板子进行相机标定
一、 ChARUco 板子以前标定过程中,都是用棋盘板子(张正友),棋盘图案的每个角都被两个黑色方块围绕着,可以更精确地细化,但是棋盘板子有个问题,就是不能被遮挡,必须是完全可见的。ArUco板子具有快速检测和多功能性,然而,ArUco标记的一个问题是,即使经过亚像素细化,它们的角点位置的准确性也不是很高。所以综上, ChARUco 板子结合两者,如图: 二、 标定过程代码#...原创 2018-06-12 15:46:51 · 9697 阅读 · 2 评论 -
未标定相机的极线矫正
极线矫正的目的是其两张像对具有相同的y坐标,作用是:比如计算深度图/视差图,计算南极海冰漂移量等。如图: Matlab 中语法为下[T1,T2] = estimateUncalibratedRectification(F,inlierPoints1,inlierPoints2,imagesize)T1,T2是投影变换矩阵,用来变换两张影像。 通过未标定相机来实现极线矫正的步骤如下:...原创 2018-06-19 11:23:28 · 3477 阅读 · 9 评论 -
20行实现行人检测HOG+SVM
opencv作为开源的视觉库,其早已集成hog+svm算法。所以只需要调用api就可以简单的实现行人检测。# -*- coding: utf-8 -*-# 行人检测import cv2import numpy as npdef svmdetectperson(img): hog=cv2.HOGDescriptor() hog.setSVMDetector(cv2.H...原创 2018-06-19 12:19:08 · 2103 阅读 · 0 评论 -
直方图反向投影
其实质是图像分割,即是寻找一副图像的感兴趣物体算法如下: 1、 分别计算原图和roi图的H,S 通道的直方图 2、 计算比率 R=roiHist/Hist 3、 反向投影 B(X,Y)=R(h(x,y),s(x,y)) B(x,y)=min[B(x,y),1] h,s 是原图的h和s 通道 4、 对B 均值滤波 5、 用得到的B(mask) 与原图与操作得到感兴趣物...原创 2018-06-19 14:36:46 · 1102 阅读 · 0 评论 -
传统方法眼角定位和dilb 进行疲劳检测(眨眼检测)
安装第三方库文件opencv Dlib,安装方法见https://www.learnopencv.com/install-opencv-3-and-dlib-on-windows-python-only/ Numpy Imutils (一系列使得opencv 便利的功能,包括图像旋转、缩放、平移,骨架化、边缘检测、显示matplotlib 图像(imutils.opencv2matpl...原创 2018-08-14 09:57:50 · 4382 阅读 · 1 评论 -
物体交叉检测---IoU评价指标的计算
对于物体检测的结果不管是HOG+SVM,还是deep learnning 检测到的结果,我们如何去评价我们检测的好坏?一、Jason 提出了IoU---Intersection over Union 来评估物体检测的好坏,IoU算法很简单,其计算条件如下:1、物体的ground truth bounding box2 、预测的bounding box如图:计算公式如下:...原创 2018-08-14 11:56:47 · 2594 阅读 · 0 评论 -
python +opencv 自动消除红眼
红眼形成?由于相机曝光,进光量太大造成,红眼毫无疑问红色通道的值要大于绿色和蓝色,那么就要想办法用绿色和蓝色组合如何消除红眼?1、眼睛检测--利用opencv 自带的xml,笔者以前的博客很多这种2、构造maskmask=r>150&r>(b+g)笔者在加上r>150的时候,有问题,所以只保留了如r>(b+g)这个3、对于mask 进行填洞,因为得到mask可能存...原创 2018-08-14 15:31:45 · 1948 阅读 · 3 评论 -
ransac 算法python源码实现
ransac算法最早是出现统计学中的,后面逐渐应用到image 领域。其对噪声有很好的鲁棒性。算法如下:#!/usr/bin/env python3# -*- coding: utf-8 -*-from sklearn.linear_model import LinearRegressionfrom sklearn.preprocessing import PolynomialFeatu...原创 2018-10-23 11:55:28 · 5251 阅读 · 0 评论 -
物体检测(一)---selective search
一、大格局上方法可分为两种1、“先有鸡,后有蛋”,即是物体识别-------物体检测物体识别的方法很多,可以自己训练model,如基于深度学习的CNN,基于机器学习的svm,通常来讲都是基于DL,这样不会丢失图像的结构信息。对于物体检测,我们这种情况会采用++滑动窗口++的方法,遍历不同尺度下的整副图像,看那个图像块是目标图像。是训练物体识别模型滑动窗口判断是不是目标物体记录窗口的x,y,...原创 2018-11-06 11:41:07 · 1341 阅读 · 0 评论 -
多目标追踪
代码如下:#include <iostream>#include<opencv2/opencv.hpp>#include<string>#include<boost/format.hpp>#include<opencv2/tracking.hpp>#include<opencv2/highgui/highgui.hpp&...原创 2018-11-14 13:33:55 · 875 阅读 · 0 评论 -
提取图像岛屿算法
利用传统图像算法提取岛屿1、建立掩模(B&gt;R+G)2、利用mask将其分割3、阈值化(自己根据经验)4、填洞5、膨胀6、寻找最大面积轮廓7、最终的mask和原图逻辑与运算效果图如下:# -*- coding: utf-8 -*-import gdalimport numpy as npimport cv2def maxminImg(im): im=(im...原创 2018-11-12 19:33:22 · 742 阅读 · 1 评论 -
基本矩阵和单应矩阵的介绍及其适用场景分析
笔者第三篇文章,接前一篇最后所提,这一篇文章介绍自己刚发不久的论文,论文内容主要研究基本矩阵和单应矩阵。虽然论文层次不高,仅仅是一篇中文核心而已,但是笔者从原来的搬砖专业的(测绘工程)转到半个计算机,自学一年研究计算机视觉,实属不易,且保障了自己研究生能毕业,不易不易。 本打算这篇文章前几天写,但是电脑出了故障,自己折腾了好几天,我更加坚定要时常写博客,不管有没有人看,主要是对自己的原创 2017-10-22 15:07:33 · 6220 阅读 · 2 评论