- 博客(41)
- 收藏
- 关注
原创 网格(mesh)生成算法
基于 3D视觉的新兴应用场景蓬勃发展,3D点云越来越受到人们的广泛关注。点云有着广泛的应用领域包括机器人技术、3D图形、自动驾驶、虚拟现实(AR/VR/MR)等。为了跟上不断增长的应用需要,研究和开发有效存储、处理的相关算法来处理点云的意义正显著上升。点云(Point cloud):由N个D维的点组成,当这个D=3的时候一般代表着(x,y,z)的坐标,当然也可以包括一些法向量、强度等别的特征。与网格、体素等数据形式类似,点云也常用作描述三维模型,其表现非常直观,且具有无序性和不规则性。
2024-04-14 11:52:56 717
原创 常见点云文件解析
最后一行是结束标志。我们在做2D视觉时,处理的就是类似一系列类似的二维数组,数组以图片的形式进行保存,处理的图片也有甚多的格式,比如png,jpg,bmp等。那我们在做3D视觉的时候,处理的主要是点云,点云就是由一些点的集合。一般由深度图还原的点云,有序点云按照图方阵一行一行的,从左上角到右下角排列,当然其中有一些无效点。有序点云在某些处理的时候还是很便利的,但是很多情况下是无法获取有序点云的。无序点云就是其中的点的集合,点排列之间没有任何顺序,点的顺序交换后没有任何影响,是比较普遍的点云形式。
2024-04-13 22:47:10 722
原创 3D视觉技术
3D视觉是一个多学科相融合的技术,可以总结为:计算图形学+计算机视觉+人工智能=3D视觉。3D视觉技术是通过3D摄像头采集视野空间内每个点位的三维座标信息,通过算法复原获取三维立体成像,不会轻易受到外界环境、复杂光线的影响,与2D成像技术相比更稳定,体验感更强,安全性更高。3D视觉是一个范围较广的概念,涉及到硬件选型、离散数学、非线性优化、最优化理论、矩阵论、多视图几何、空间变换、点云处理、计算机视觉、SLAM、深度学习等相关知识点,
2024-04-13 22:10:07 183
原创 人体姿态估计算法
人体姿态估计(Human Pose Estimation, HPE)是一种识别和分类人体关节的方法。本质上,它是一种捕获每个关节(手臂、头部、躯干等)的一组坐标的方法,该坐标被称为可以描述人的姿势的关键点(keypoint)。这三种类型是随着应用逐步发展出来的,先检测关键点,类似于火柴人,进一步的检测出人的轮廓,再根据轮廓进一步的把人体进行3D重建。也称为运动学模型,该模型包括一组关键点(关节),例如脚踝、膝盖、肩膀、肘部、手腕和肢体方向,主要用于 3D 和 2D 姿势估计。
2023-12-03 15:21:44 1581
原创 深入浅出OpenGL三维渲染管线
OpenGL渲染实际上就是将3D坐标进行系列转换变为2D坐标,整个流程如下:除此之外,为了让最终结果和实际物体更接近, 会进行打光和贴纹理等操作。
2023-04-16 11:49:46 683 1
原创 目标检测算法的评价指标
对于一个目标检测模型的好坏,总的来说可以从以下三个方面来评估:严格说某些场合也会很在意模型的大小,这也是一个研究方向,比如 , , 等。所以除了上面三个维度,模型的大小也可以是一个评价维度。PASCAL VOC 挑战赛:该挑战赛目标检测评价指标官方文档,当前 PASCAL VOC 目标检测挑战赛使用的指标是曲线和.COCO 检测挑战赛:该挑战赛使用不同的指标来评估不同算法的目标检测准确性。 这里可以找到 COCO 上的目标检测性能的 12 个指标的文档。Google Open Images Dataset
2022-06-12 18:07:09 2188 1
原创 批量读取路径下的文件名并保存在txt文件里
import osdef ListFilesToTxt(dir, file, wildcard, recursion): exts = wildcard.split(" ") files = os.listdir(dir) for name in files: fullname = os.path.join(dir, name) if (os.path.isdir(fullname) & recursion): Li
2022-04-23 12:42:22 623
原创 目标检测算法基础
人脸检测算法综述0 前言1 人脸检测算法难点2 人脸检测算法流程2.1 选择检测窗口2.2 提取图像特征2 人脸检测算法2.1 早期算法2.2 AdaBoost框架2.3 深度学习0 前言人脸检测是目标检测的其中一个方向,它在安防监控、人证比对、人机交互、社交和娱乐等方面有很强的应用价值,也是人脸识别算法、人脸关键点检测算法、人脸位姿估计算法等的第一步。人脸检测任务关注的是图像中人脸的位置,包含了两个子任务:其一是输出这一目标的类别信息,属于分类任务;其二是输出目标的具体位置信息,属于定位任务。1
2022-04-23 12:35:51 3878
原创 函数参数传递机制
函数参数传递机制1 函数参数传递机制2 值传递、址传递和引用传递的区别2.1 功能上2.2 传递效率上2.3 执行效率上2.4 类型安全上2.5 参数检查上2.6 灵活性上3 函数传递该用指针还是引用1 函数参数传递机制函数参数传递机制问题本质上是调用函数和被调用函数在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。在值传递过程中, 被调用的函数(简称被调函数)的形式参数(简称为形参)作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由调用其他函数的函数(简称为主调函
2022-03-23 22:39:41 1596 1
原创 避免使用宏#define定义常量
避免使用宏#define定义常量1 前言2 使用const而不是#define定义常量3 总结1 前言C/C++预处理器提供了一系列的编译指令,通常,C++惯例是使用这些编译指令来惯例编译过程。例如,#include编译指令是管理程序文件的重要组件其他编译指令(#ifndef和#endif)使得能够控制是否对特定的代码块进行编译#pragma编译指令使得能够控制编译器特定的编译选项这些都是非常有帮助的工具,但使用#define编译指令时要谨慎。2 使用const而不是#define定义常
2022-03-20 09:12:47 1341
原创 size_t数据类型的意义
size_t数据类型的意义1 `int`的各种类型和`size_t`类型2 size_t类型的意义3 总结4 参考1 int的各种类型和size_t类型数据类型特别是int相关的类型(int,long, long long)在不同位数系统下长度不同,如下所示,特别是long数据类型,在不同平台下字节数就不一样,为了保证平台的通用性,程序中尽量不要使用long数据类型。//32位系统char 1个字节8位short 2个字节16位int 4个字节32位long 4个字节long long 8个
2022-03-19 20:15:18 2314
原创 static关键字用法
static关键字用法1 static关键字2 为什么要引入static3 C/C++中static的作用4 C++中static的用法4.1 面向过程设计中的static4.1.1 静态全局变量4.1.2 静态局部变量4.1.3 静态函数4.2 面向对象程序设计中的`static`(类中的`static`关键字)4.2.1 静态数据成员4.2.2 静态成员函数1 static关键字2 为什么要引入static我们知道在函数内部定义的变量,当程序执行到它的定义处时,编译器为它在栈上分配空间,函数在栈上
2022-03-16 23:16:26 596
原创 C++内存分配
C++内存分配和static关键字用法1 内存分配方式2 堆和栈的区别3 尽量少使用全局变量4 static关键字4.1 为什么要引入static4.2 C/C++中static的作用4.3 C++中static的用法4.3.1 面向过程设计中的static4.3.1.1 静态全局变量4.3.1.2 静态局部变量4.3.1.3 静态函数4.3.2 面向对象程序设计中的`static`(类中的`static`关键字)4.3.2.1 静态数据成员4.3.2.2 静态成员函数1 内存分配方式在C++中,内存分
2022-03-16 23:08:38 1959
原创 `LINK : fatal error LNK1104: 无法打开文件“***.dll”`的问题解决
问题描述: 我在编译动态链接库的项目时候,就报了如下的错误:LINK : fatal error LNK1104: 无法打开文件“..\bin\InitProject.dll”而InitProject.dll就是我目前需要输出的,但是却报无法打开该动态链接库错误。问题分析: ..\bin路径下已经有了InitProject.dll,如果重新进行编译,则会把之前的InitProject.dll删掉,再重新生成一个InitProject.dll。如果无法打开该动态链接库,会不会是因为其他程序占用了该动态
2022-03-15 21:10:11 7719 1
原创 指针变量未初始化导致程序崩溃
问题描述: 在功能自测的时候发生程序崩溃,在调试的过程将问题定位到崩溃是在操作指针的地方。代码示例如下:if (ptr != nullptr){ delete ptr; ptr = nullptr;}崩溃在ptr = nullptr;这一行代码上,而我前面定义了该指针int* ptr;并未对其进行new相关的操作和初始化,那既然ptr并不是nullptr,那为何delete该指针后会导致程序崩溃呢?原因分析: delete指针操作只是释放指针原本所指的内存,并没有删除该指针,如果该指针没有进
2022-03-15 21:07:40 1556
原创 C++文件操作和文件流
C++文件操作和文件流1文件的概念2 文件流的分类2 打开文件2.1 通过类对象调用`open`函数打开一个文件2.2 通过类对象构造函数打开文件3 关闭文件4 读写文件4.1 文本文件的读写4.2 二进制文件的读写1文件的概念根据文件中数据的组织方式,可以将文件分为文本文件和二进制文件。文本文件:又称字符文件或ASCII文件,它的每一个字节放一个ASCII代码,代表一个字符。二进制文件:又称内部格式文件或字节文件,是把内存中的数据按其在内存中的存储形式原样输出到磁盘中存放。比如:数字 64
2022-03-10 20:47:16 2528
原创 DLL导出函数和类
1 基本概念1.1 动态链接库库是写好的现有的,并且可以复用的代码。现实开发中每个程序都要依赖很多基础的底层库,不可能每个功能都从零开始开发,因此库是必须存在的。库的本质是一种可执行的二进制文件,可以被操作系统加载到内存中执行,库有两种:静态链接库(简称为静态库)和动态链接库(简称为动态库),所谓静态、动态是指链接,一个程序编译成可执行文件步骤如下图所示:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FgwmgSGt-1646739553600)(img\编译过程.PN
2022-03-08 19:39:49 5297
原创 智能指针shared_ptr的原理、用法和注意事项
智能指针shared_ptr的原理、用法和注意事项1 前言2 shared_ptr原理3 share_ptr的基本用法3.1 初始化3.2 获取原始指针3.3 指定删除器4 使用share_ptr需要注意的问题1 前言在实际的C++开发过程中,我们经常会遇到诸如程序运行中突然崩溃、程序运行所用的内存越来越多最终不得不重启等问题,这些问题往往都是内存管理资源不当造成的。比如:①有些内存资源已经释放,但指向它的指针并没有改变指向,最终称为了野指针,并且后续还在使用;②有些内存资源已经被释放,后期又试图再
2022-03-05 19:52:25 7941
原创 【c++】如何让一个对象只在栈(堆)上分配内存
在c++中,类的对象建立分为两种,一种是静态建立,比如A a;另一种是动态建立,比如A* ptr = new A;这两种方式是有区别的。静态建立类对象: 是由编译器为对象在栈空间中分配内存,通过移动栈顶指针挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。这种方式是直接调用类的构造函数。动态建立类对象: 是用new关键字将对象建立在堆空间上,这个过程分两步走。首先是执行 operator new() 函数,在堆空间上搜索合适的内存并分配;第二步是调用构造函数构造对象,初始化这片
2022-02-24 20:47:33 2589 3
原创 C++ delete指针需置空
delete指针之后,一定要给指针赋值为空,不然会引起程序崩溃。T* p = new T();delete p;// ...p->func(); // crashif (p) { p->func(); // crash too}以上代码,因为指向的内存已经被释放,导致后面的调用失效,这种情况导致程序崩溃的原因会非常难找,而且出错的位置很难定位,开发时往往还容易遇到很多这种情况。那么delete到底做了什么动作呢?delete指针只是释放了那个指针原本所指的内存而已,并没
2022-02-23 23:42:16 6706 3
原创 深入浅出梯度下降算法背后的数学原理
深入浅出梯度下降算法背后的数学原理0 前言1 什么是梯度?2 梯度下降是如何工作的?2.1 从生活中的一个小例子讲起2.2 什么是成本函数2.3 如何最小化成本函数2.4 什么是梯度下降2.5 成本函数的数学解释3 学习率4 如何确保梯度下降能够正常工作5 梯度下降算法的python实现6 梯度下降的类型6.1 批量梯度下降6.2 随机梯度下降6.3 小批量梯度下降0 前言梯度下降是一种在训练机器学习模型时使用的优化算法,它基于凸函数并迭代调整其参数以将给定函数最小化到其局部最小值。什么是梯度下降?
2022-02-09 21:35:01 1649
原创 如何选择优化算法
如何选择优化算法0 前言1 优化算法2 可微的目标函数2.1 Bracketing Algorithms2.2 Local Descent Algorithms2.3 First-Order Algorithms2.4 Second-Order Algorithms3 不可微的目标函数3.1 Direct Algorithms3.2 Stochastic Algorithms3.3 Population Algorithms4 summary0 前言优化是找到目标函数一组输入的问题,这是机器学习算
2022-02-08 11:49:06 3787
原创 [机器学习] 梯度下降优化算法
[机器学习] 梯度下降优化算法前言常见的梯度下降优化算法Gradient DescentStochastic Gradient Descent (SGD)SGD with momentumAdaptive Gradient (AdaGrad)RMSpropAdam什么是机器学习中最佳优化算法前言为什么需要更好的优化算法?在训练神经网络模型中,通常需要定义一个损失函数来衡量我们模型的预测结果和标签之间的差异。θi←θi−η▽θiL(θ)\theta _{i}\gets \theta _{i} - \
2022-02-07 14:23:08 1876
原创 奇异值分解(SVD)
奇异值分解SVD什么是奇异值分解SVD的特征向量SVD定义应用什么是奇异值分解SVD是一种矩阵分解算法,在某些情况下,矩阵具有特定的结构,如果矩阵中有规则或简单的结构,那么分解矩阵将是有意义的。先看以下几个例子:例子1.以下是一个所有元素值都相等的矩阵A=(111111111111111111111111111111111111)A=\begin{pmatrix}1 &1 &1 &1 &1 &1 \\ 1 &1 &1 &
2021-08-29 20:16:41 7904 3
原创 机器学习中的线性代数基础
文章目录机器学习基础的线性代数举个栗子统计领域的线性代数矩阵和图像机器学习基础的线性代数在机器学习中,大多数数据通常表示为向量、矩阵或张量,因此机器学习在很大程度上依赖于线性代数。先了解下向量、矩阵和张量:向量是一维数组,具有大小和方向矩阵是二维数组,具有固定的行和列,一般用方括号[ ]表示张量是向量和矩阵的推广,比如一维张量是一个向量,二维张量是一个矩阵,RGB图像是三维张量,当然还可以扩展到四维张量以及更高维等描述矩阵的一些基本术语有:(如下图所示)方阵:nxn,即行数等于列数对角
2021-08-29 15:19:06 481
原创 批量测试结果保存txt文件
有的时候做完批量测试后,想将编译器控制台输出的结果保存为txt文件,通常可以这么做:在windows环境下,找到编译后生成的exe文件,在该目录下,输入cmd,再回车,如下所示:然后再把exe文件拖到cmd下,如下图所示,我的是在D盘,在exe后面加上“> result.txt”,这样就会把控制台输出的内容都保存在result.txt文件里。...
2021-07-30 23:17:49 415
原创 医学图像NIFTI(.nii)转换为mhd、raw文件格式
文章目录NIFTI(.nii)文件格式mhd、raw文件格式python代码实现NIFTI(.nii)文件格式Nifti 格式最初是为神经影像学发明的。神经影像信息学技术计划(NIFTI)将 NIfTI 格式预设为 ANALYZE7.5 格式的替代品。它最初的应用领域是神经影像,但是也被用在其他领域。这种格式的主要特点就是它包含两个能够将每个体素的索引(i,j,k)和它的空间位置(x,y,z)关联起来的仿射坐标。NIFTI文件更加易用于机器学习,因为NIfTI 是三维图像,处理一个单独的NIfTI 文
2021-07-30 23:01:25 2129 1
原创 PCA (Principal Component Analysis)主成分分析
文章目录简介PCA原理基础概念PCA思想summary简介通常来说,数据是机器学习PCA原理基础概念PCA思想summary
2021-07-25 16:59:09 1145
原创 深入浅出极大似然估计
首先,举个生活中的一个小栗子,假设现在有一个盒子,里面有黑白两种颜色的球,数目未知且颜色的比例未知,现从盒子里随机抽取一个球,并记录它的颜色,然后再把球放回盒子里,再取。总共取了20次,通过统计发现有6个白球,14个黑球。你通过直觉认为这个盒子里白球占的比例为6/20,黑色球所占的比例为14/20。而这仅仅是直觉,是你的猜想,但是在数学这门学科,它是严谨的,是需要理论支撑的,因此我们希望用一些理论去支撑我们的猜想和直觉,用这些理论去估计概率,然后分析其偏差和方差。而这里我们经常用的理论就是极大似然估计。
2021-07-12 23:06:35 206
原创 浅谈欧拉公式
文章目录欧拉公式的推导欧拉公式的意义欧拉公式是数学里最令人着迷的公式之一,它将指数函数的定义域扩大到复数域,建立了指数函数和三角函数的关系。欧拉公式的表达式为:eiθ=cosθ+isinθe^{i\theta }=cos\theta+isin\thetaeiθ=cosθ+isinθ欧拉公式的推导在推导之前,首先了解级数的概念级数,指将数列的项依次用加号连接起来的函数一般形式为:∑i=1∞ai=a1+a2+...\sum_{i=1}^{\infty }a_{i}=a_{1}+a_{2}+
2021-07-11 21:33:32 1189
原创 高斯分布&正态分布
文章目录高斯分布定义高斯分布意义高斯分布的证明多元高斯分布高斯分布又叫正态分布,是统计学中最重要的连续概率分布。研究表明,在物理科学和经济学中,大量数据的分布通常是服从高斯分布,所以当我们对数据潜在分布模式不清楚时,可以优先用高斯分布近似或精确描述。遵循高斯分布的随机变量是假设在给定范围内的任何值,比如某小学学校学生的身高,它可以取任何值,但是会限制在0到2米范围内,这个限制是根据实际生活中强加的,但是在高斯分布中,没有随机变量这个范围限制,可以扩展到整个实数范围内,最终会得到一个很好的平滑曲线,这样的
2021-07-11 19:05:57 34110 1
原创 图像归一化处理
文章目录前言1.min-max归一化2.Z-score归一化前言在医学图像领域,由于不同设备的采集、成像因素等原因造成相同的组织在图像灰度信息上的不一致,图像归一化就是在保留具有诊断价值的灰度差异的同时,减小甚至消除图像中灰度不一致而进行的图像转换方法,图像的归一化更有利于计算机自动分析处理。因此,图像归一化就是通过一系列的变换,将待处理的原始图像转换成相应的标准形式。下面将介绍两种常见的归一化方法,并展示相应的python代码。1.min-max归一化通过遍历图像矩阵中的每一个像素,设定max和
2021-07-07 21:40:19 9867 3
原创 统计学习方法学习笔记(一)
文章目录1 统计学习及监督学习1.1 统计学习1.2 统计学习的分类1.3 统计学习方法的三要素1.4 模型估计与模型选择1.5 正则化与交叉验证1.6 泛化能力1.7 生成模型与判别模型1.8 监督学习应用1 统计学习及监督学习1.1 统计学习定义:是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。通俗易懂地说,统计学习是运用一系列工具对数据进行分析建模,因此它研究的对象是数据,研究目的是预测与分析。即从数据出发,提取数据的特征,抽象出数据模型,发现数据中的知识,又回到
2021-07-06 22:15:13 429 1
原创 数字图像处理(二)
文章目录2 灰度变换与空间滤波2.1 基本概念2.2 一些基本的灰度变换函数2.3 直方图处理2.3.1 直方图均衡化2.3.2 直方图匹配(规定化)2.3.3 局部直方图处理2.4 空间滤波器2 灰度变换与空间滤波2.1 基本概念空间域处理基于表达式:g(x,y)=T(f(x,y))g(x,y)=T(f(x,y))g(x,y)=T(f(x,y))其中,f(x,y)是输入图像,g(x,y)是输出图像,T是在点(x,y)的一个邻域上定义的针对f的算子。上图是图像中点(x,y)的一个3x3邻域
2021-07-01 21:49:04 858
原创 数字图像处理(一)
文章目录1 数字图像与数字图像处理1.1基本概念1.2图像处理技术划分1.3图像取样和量化1.3.1取样和量化的基本概念1.3.2数字图像表示1.3.3线性索引和坐标索引1.3.4空间分辨率和灰度分辨率1.3.5图像内插1.4像素间的基本关系1.5基本数学工具1 数字图像与数字图像处理1.1基本概念图:是物体反射或者透射电磁波的分布像:是人的视觉系统对接收的图信息在大脑中形成的印象图像:是“图”和“像”的结合,具体来说,就是用各种观测系统以不同的形式和手段观测客观世界而获得的、可以直接或间接作用于
2021-06-27 22:03:48 939
原创 医学图像Dicom(.dcm)转换为NIFTI(.nii)格式
文章目录前言医学图像格式DICOMNIFTIpython代码前言NIfTI 中的图像原始数据一般被存储成了三维图像,而dicom存储为二维图层,所以相对于DICOM文件,NIFTI文件更加易用于机器学习,因为NIfTI 是三维图像,处理一个单独的NIfTI 文件要比处理成百上千个DICOM文件更加容易一些。医学图像格式DICOM 和 NIFTI 是最常用的格式,下面对其进行简单介绍。DICOMDICOM 代表的是医疗数字成像和通信。DICOM 是由美国国家电气制造商协会(NEMA)制定的标准。它
2021-06-27 15:32:23 13351 8
原创 H5文件简介以及python对h5文件的操作
文章目录前言HDF与h5简介数据组织方式HDFView下载与安装在WIN10系统安装后打开出现黑框闪退的解决方法python对h5文件的操作批量制作h5文件h5文件的提取,另存为nii文件前言一般来说,深度学习的训练数据和训练后的参数都会保存为h5格式文件,对于训练数据来说,深度学习中当训练大量数据时,如果从硬盘中加载再预处理,再传递进网络,这是一个非常耗时的过程。其中从硬盘中读取图片会花费大量时间,更可行在方法是将其存在单个文件中,如h5文件。那么h5文件对于深度学习训练具有什么优势呢?可以支持
2021-06-27 14:29:14 30763 15
原创 SimpleITK图像基础(二)——三维图像resize到固定尺寸
文章目录前言python代码前言Resize是图像处理中经常使用的一个操作,就是将图像缩放到一个固定尺寸,比如分类神经网络的输入大小必须保持一致,就要用到resize;比如有的网络训练学习需要整个图像,但计算机显卡资源不足,不能将整幅图像输入网络,这时也可用到resize。python代码SimpleITK中一般采用ResampleImageFilter过滤器,需要注意的是resize前后的图像应遵循以下公式,即:originsize * originspacing = newsize * news
2021-06-25 22:20:47 3289
原创 SimpleITK图像基础(一)——3D Resampling
文章目录前言基于SimpleITK进行实现前言进入深度学习网络之前需要进行统一数据集,这个时候需要对这些数据集进行重新采样,即假设各向同性体素并重新定向它们,以便可以读取所有图像的像素矩阵。在将方位变换成一致时,可以用DICOMOrientImageFilter过滤器,可以将 DesiredCoordinateOrientation设置为你想要变换的方位,它将计算出所需的置换顺序并根据需要执行翻转以接近所需方向。基于SimpleITK进行实现workflow如下:step 1:首先运行DICOM
2021-06-25 22:07:15 1365
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人