当前位置: 首页 > article >正文

三维算法基础知识

前言

学研机器人四载春秋,遂作。

作于2025年启元之始,心系未来,笔耕不辍。

星辰大海,志在千里。

后面慢慢充实

人工智能、机器学习、深度学习

《人工智能、机器学习、深度学习、CNN知识点整理》_人工智能和机器学习深度学习与目标检测分割等关系-CSDN博客

 **人工智能(AI)、机器学习(ML)、深度学习(DL)、计算机视觉(CV)、自然语言(NLP)**之间到底是什么关系?

机器学习是实现人工智能的一种方法;

深度学习是实现机器学习的一种方法;

计算机视觉和自然语言处理是应用,

人工智能、机器学习、深度学习都可以用来做计算机视觉和自然语言处理


文章目录

  • 1 Artificial Intelligence (AI,人工智能)
  • 2 Machine Learning(ML,机器学习)
    • 2.1 监督学习和无监督学习
    • 2.2 监督学习的线性回归学习算法
    • 2.3 机器学习的常见算法
    • 2.4 人工神经网络
  • 3 Deep Learning(DL,深度学习)
  • 4 Convolutional Neural Networks(CNN,卷积神经网络)
  • 5 CNN在CV(计算机视觉)上的应用
    • 5.1 图像分类
    • 5.2 图像分割
    • 5.2 目标检测
  • 6 Conclusion
  • 自言自语编程、大模型、


一、相机

1.1 相机成像

结构光成像与双目匹配

1.改善透明物体表面结构光成像效果的实验,并且得出了在特定条件下不需要复杂编码技术也可以实现一定程度上的图像区分的结论。描述了一次实验测试的过程及其初步结论,主要涉及以下几个方面:
1实验目的:再次测试多线(可能是指多条激光线或结构光)在透明物体上的成像效果。这表明之前可能已经有相关测试,这次是为了进一步验证或改进。
2实验条件:提到透明物体距离光源(可能是激光器或投影仪)非常近,目的是提高投影到物体上的光强度。同时指出,光源的亮度和相机的曝光已经调至最大,暗示这是在尽可能理想的条件下进行的测试。
3处理方法:对拍摄到的多线图像进行了拉普拉斯变换处理。拉普拉斯变换是一种常用的边缘检测方法,可以用来突出图像中的细节部分,这里用其来去除透过透明物体的多线条纹。
4观察结果:虽然经过处理后,能够有效地区分透过透明物体的多线和停留在物体表面的线条,但透明物体表面的多线成像质量还有很大的提升空间。这表明虽然可以区分透过的光线,但是表面的成像效果并不理想。
5结论:实验结果证明,在这种情况下,区分透过透明物体的光线和表面反射的光线,不需要使用格雷码技术。格雷码通常用于编码结构光系统中,以帮助解决相位解缠问题,但在本实验条件下似乎没有必要。

1.2 相机标定

1.1 简介

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵 P 的过程。其标定的目的就是为了相机内参、外参、畸变参数

基本的坐标系

  • 世界坐标系(world coordinate system);
  • 相机坐标系(camera coordinate system);
  • 图像坐标系(image coordinate system);
1.2 基本的坐标系

世界坐标系:用户定义的三维世界的坐标系,为了描述目标物在真实世界里的位置而被引入。

相机坐标系:在相机上建立的坐标系,为了从相机的角度描述物体位置而定义,作为沟通世界坐标系和图像/像素坐标系的中间一环。

图像坐标系:为了描述成像过程中物体从相机坐标系到图像坐标系的投影透射关系而引入,方便进一步得到像素坐标系下的坐标。

  • 一般来说,标定的过程分为两个部分:

【世界坐标系】->【相机坐标系】->【图像坐标系】

第一步是从世界坐标系转换为相机坐标系,这一步是三维点到三维点的转换,包括 R ,t (相机外参)等参数;

第二步是从相机坐标系转为图像坐标系,这一步是三维点到二维点的转换,包括 K(相机内参)等参数;

  • 同步标定内部参数和外部参数,一般包括两种策略s:
    光学标定: 利用已知的几何信息(如定长棋盘格)实现参数求解。
    自标定: 在静态场景中利用 structure from motion估算参数
1. 3 畸变参数

理想的小孔成像模型,满足相似三角形的关系。实际上由于相机光学系统制造工艺的误差,实际成像与理想成像存在几何失真,称为畸变。畸变主要分为径向畸变和切向畸变。

(1)径向畸变(枕形、桶形):
①透镜质量原因
②光线在远离透镜中心的地方比靠近中心的地方更加弯曲。


径向畸变可以用如下公式修正:

略...

(2)切向畸变(薄透镜畸变和离心畸变):
切向畸变是由于透镜制造上的缺陷使得透镜本身与图像平面不平行而产生的。
切向畸变可以用如下公式修正:


最详细、最完整的相机标定讲解-CSDN博客

相机标定(Camera calibration)_也就是求投影矩阵p的过程-CSDN博客

2.4.1.2 张正友相机标定法_张正友标定法-CSDN博客

计算机视觉-相机标定(Camera Calibration)_相机标定坐标系-CSDN博客


1.3 三维相机标定用例

三维标定

双目标定

立体视觉入门指南(7):立体匹配_立体视觉学习-CSDN博客

原理 视差原理,

基于视差原理并利用成像设备从不同的位置获取被测物体的两幅图像,

,通过计算图像对应点间的位置偏差,来获取物体三维几何信息的方法。

由视差而产生高度就是双目的基本原理。

标定步骤

1、选择合适的标定板,作为标定物。

2、通过调整标定物或摄像机的方向,为标定物拍摄一些不同方向的图像。

3、从图像中提取棋盘格角点或者圆心坐标。

4、估算理想无畸变的情况下,五个内参和六个外参。

5、应用最小二乘法估算实际存在径向畸变下的畸变系数。

6、极大似然法,优化估计,提升估计精度

双目标定

第一步:左右相机完全平行

第二步:左右相机行对齐

第三步:根据视差代入标定参数Q矩阵,求解XYZ

对极几何原理,极线矫正

本质矩阵:用于描述空间中同一个点在不同坐标系下的坐标之间的对应关系,代入内参进一步推导出

基础矩阵:描述空间中的点在两个像平面中的坐标对应关系

多相机标定

手眼标定

2D图像做3D手眼标定流程

手眼标定原理(眼在手上和眼在手外)-CSDN博客

3D视觉工坊-手眼标定(附opencv实现代码)_3d手眼标定-CSDN博客

3D点云标定

六轴机械手
Scara机械手首演标定

乒乓球标定

上下相机对扫测厚

旋转中心标定

运动平台畸变标定

圆盘畸变标定

圆柱畸变标定

运动平台坐标系转换

_________________

 标定

相机标定

机器视觉——相机标定_相机标定方法-CSDN博客

相机标定常用方法

根据标定过程的数学模型,相机标定可以分为:
(1) 线性标定法:运算速度快,标定精度相对不高

(2) 非线性优化标定法:标定精度高,模型复杂,计算量大;
(3) 两步法:以上两者的结合,综合了两者的优缺点,如Tsai两步法、张氏标定法等。
下表给出了几类常用标定方法的对比。

结构光相机标定

编码结构光(标定系列)

结构光相移法中相机投影仪的标定信息如何与相位差联系_参考平面和物体的相位差-CSDN博客

编码结构光(标定系列)-CSDN博客

光平面标定

线结构光三维重建(二)相机标定、光平面标定-CSDN博客

多传感器融合标定

相机和IMU标定

相机和单线雷达标定

相机和3D雷达标定

双目标定
手眼标定
单目散斑结构光标定

【单目散斑结构光标定】_单目结构光相机有几部分组成的-CSDN博客

结构光相机标定

结构光三维重建Projector-Camera Calibration投影仪相机标定_投影仪标定-CSDN博客

++++++++++++++++++++++++++++++++++++++++++

二、坐标系转换

3D基础

3D基础概念_三维网格-CSDN博客

一文入门 3D 视觉算法基础_3d视觉算法-CSDN博客

开发人员必备3D建模基础_3d建模学习知识-CSDN博客

3D数学基础学习笔记_3d数学基础:图形与游戏开发 笔记-CSDN博客

3D数学基础 图形和游戏开发 学习笔记第一、二、三章:笛卡尔、矢量和坐标系_3d数学基础图形与游戏开发-CSDN博客

坐标系

欧拉角与旋转矩阵的转换关系_欧拉角转旋转矩阵-CSDN博客

transform

在计算机图形学、机器人技术、数据处理以及其他相关领域中,“变换”(Transformation)通常指的是改变几何对象的位置、方向或大小的过程。变换是图形编程、计算机视觉和机器学习等领域的基础概念之一。在不同的上下文中,“变换”可能指的是不同的操作,但基本上可以归结为以下几种基本类型:

  1. 平移变换(Translation): 平移是指在二维或三维空间中,将一个物体沿某个方向移动特定距离的操作。平移不会改变物体的大小或方向,只是改变其位置。
  2. 旋转变换(Rotation): 旋转是指围绕一个轴线转动一个物体。在二维空间中,旋转通常是围绕一个点;在三维空间中,则是围绕一个轴。
  3. 缩放变换(Scaling): 缩放是指改变物体的大小。可以均匀缩放(等比例地增大或减小所有维度),也可以非均匀缩放(不同维度有不同的缩放比例)。
  4. 镜像变换(Reflection): 镜像是指相对于一个轴或平面翻转一个物体。二维空间中的镜像是相对于一条直线,三维空间中则是相对于一个平面。
  5. 剪切变换(Shear): 剪切是指沿一个方向推挤一个物体,使其形状发生改变,但不改变其体积。
  6. 仿射变换(Affine Transformation): 仿射变换是一种特殊的线性变换,它包括上述的所有变换组合,并保持“平行性”,即变换前平行的线变换后仍然平行。
  7. 投影变换(Projection): 投影是指将三维空间中的点映射到二维平面上,常用于从三维模型生成二维图像的过程中。

在计算机图形学中,这些变换通常通过矩阵运算来实现。一个变换可以用一个矩阵来表示,多个变换可以通过矩阵乘法来组合。例如,在OpenGL这样的图形库中,可以使用glTranslatef, glRotatef, glScalef等函数来进行相应的变换操作。

在游戏开发、3D建模软件、CAD程序以及其他需要处理几何数据的应用中,变换是处理和操作几何对象的核心技术之一。

三、传感器感知

四、位姿估计


五、机器人与机械手

5.1 机械手

三维机械臂感知定位检测算法

三维相机成像与标定:例如结构光相机

三维相机透视模型和弱透视模型,网格化,点云归一化,

三维重建

数据结构——学习笔记——入门必看【建议收藏】_#数据结构学习-CSDN博客

手把手带你了解时间复杂度和空间复杂度 【超详细】-CSDN博客

5.2 机器人

《机器人学》、ROS机器人、SLAM、多传感器融合等


六、三维算法基础

       3D三维相关的基础涉及多学科交叉,包含但不限于三维坐标系统、深度信息、视锥体、摄像机标定、传感器、点云处理、特征提取与匹配、三维重建、物体检测和跟踪、三维场景渲染、3D 视觉应用等等......

这里仅作部分说明,入门3D需要逐渐积累。

6.1 点云图类型

        点云数据通常使用特定的文件格式来存储,这些格式通常包含了三维空间中的点集合,每个点具有至少三个坐标(X, Y, Z),并且可能还包括颜色信息、强度值、法线等附加属性。以下是一些常见的点云文件格式及其后缀:

1. PLY (Polygon File Format 或 Stanford PLY Format):

    • 后缀名:.ply
    • 这种格式不仅可以存储点云数据,还可以存储多边形网格数据。它支持ASCII和二进制编码,可以存储颜色信息和法线。

2. PCD (Point Cloud Data):

    • 后缀名:.pcd
    • 这是PCL(Point Cloud Library)库常用的格式。它可以存储点云数据,包括颜色和法线信息。

3. OBJ (Wavefront OBJ):

    • 后缀名:.obj
    • 尽管.obj格式主要用于存储多边形网格,但在某些情况下也可以用于存储点云数据。它可以包含顶点位置、纹理坐标和法线信息。

4. XYZ/XYZRGB:

    • 后缀名:.xyz, .xyzrgb
    • 这种格式非常简单,每一行代表一个点的坐标,对于XYZRGB格式,每一行还包括颜色信息(红色、绿色、蓝色)。

5. LAS/LAZ (Lidar Data Exchange Format):

    • 后缀名:.las, .laz
    • 这种格式专为存储来自激光雷达(LiDAR)的数据设计,支持多种点类型和附加信息,如强度、颜色等。.las是未经压缩的格式,而.laz则是经过压缩的格式。

6. PTS (Point Set):

    • 后缀名:.pts
    • 这种格式也是一个简单的文本格式,每一行包含一个点的坐标。

7. BIN (Binary Format):

    • 后缀名:.bin
    • 有些点云数据会直接以二进制格式存储,没有固定的后缀,但通常会明确指出这是二进制点云数据。

8. PLY ASCII/Binary:

    • 后缀名:.ply
    • PLY格式支持ASCII和二进制编码,可以根据需要选择存储方式。

9. VTK (Visualization Toolkit):

    • 后缀名:.vtk
    • VTK是一种通用的数据交换格式,可以存储多种类型的数据,包括点云数据。

        这些格式各有特点,适用于不同的应用场景。选择哪种格式取决于具体的需求,例如数据的复杂性、存储效率、是否需要附加属性等因素。在处理点云数据时,通常需要根据使用的工具和软件支持的格式来选择相应的文件格式。

 深度图

pca降维算法

保存——深度图压缩

srt、png、jpg、bmp、csv、ecd、mri、jxr、tif、pcd

1、Lz4法——无损压缩算法

LZ4 是一种无损压缩算法,具有非常快的压缩和解压缩速度,适用于实时压缩场景。相比其他压缩算

法(如 zlib 或 LZMA),LZ4 以较高的速度著称,尽管压缩率相对较低。它广泛应用于对性能要求较

高的场景,比如日志文件、内存存储以及数据传输。

LZ4 有多个实现和版本:

1.LZ4 Library:C语言库,适用于各种操作系统。

2.LZ4 Frame Format:包含头信息、校验和流式压缩等特性,适合文件和网络传输。

3.LZ4 Block Format:高效但不包含流特性,适合内存压缩,

2、ZSTD 压缩算法——无损压缩算法

「猿区」ZSTD 压缩算法_zstd压缩算法-CSDN博客


6.2 三维重建

定义:用相机拍摄真实世界的物体、场景,并通过计算机视觉技术进行处理,从而得到物体的三维模型。

涉及的主要技术:多视图立体几何、深度图估计、点云处理、网格重建和优化、纹理贴图、马尔可夫随机场、图割等等。

三维重建主要分为主动式测量和被动式测量。

三维重建(1)--摄像机几何-CSDN博客

深度图(depth)/视差图(disparity)

深度图:场景中每个点到相机的距离;
视差图:同一场景中在两个相机成像的像素的位置偏差dis;
两者关系:depth = b * f / dis;都是三维信息的一种表达方式;

三维点云(point cloud)

三维点云是某个坐标系下的点的数据集,其包含了丰富的信息,包括三维坐标XYZ,颜色RGN等信息;

三维网格(mesh)

三维网格是由物体的邻接点云构成的多边形组成的,通常由三角形、四边形或其他简单凸多边形组成。

纹理贴图模型(texture mesh)

纹理贴图模型是指带有颜色信息的三维网格模型,所有的颜色信息存储在一张纹理图上,显示时根据每个网格的纹理坐标和对应的纹理图进行渲染得到高分辨率的彩色模型。

立体视觉

立体视觉入门指南(7):立体匹配_立体视觉学习-CSDN博客

立体视觉入门指南(7):立体匹配_立体视觉学习-CSDN博客

相机

深度相机:结构光、TOF、双目相机_双目立体深度相机是rgb-d吗-CSDN博客

3D深度相机---结构光_结构光相机-CSDN博客

从0到1搭建一套属于你自己的高精度实时结构光3D相机(8):结构光系统模型与逆相机法投影仪标定_3d相机中的 projecror投影仪-CSDN博客

结构光相机三维成像

技术干货 | 结构光技术及其实现三维成像的主要原理_结构光技术获得菌体三维结构数据-CSDN博客

C++OpenCV格雷码生成

三步相移多频外差法获取绝对相位(C++实现)

四步相移多频外差法获取绝对相位(C++实现)

标定

单相机标定

[Halcon&标定] 单相机标定_c# halcon 相机标定-CSDN博客

手眼标定

[Halcon&3D] 3D手眼标定理论与示例解析_手眼标定验证-CSDN博客

2D/3D相机手眼标定总结-CSDN博客

手眼标定详述(坐标系介绍,二维、三维的手眼标定方法@九点法、AX=XB)-CSDN博客

多视图几何

计算机视觉中的多视图几何 阅读笔记 多视图立体视觉_lanhy的技术博客_51CTO博客

机器人

机器人基础之运动学逆解-CSDN博客

轮式移动机器人的运动控制入门_移动机器人运动控制包括-CSDN博客

机器人学:(1)机器人基础_极坐标机器人-CSDN博客

机器人学:(2)位姿描述和坐标变换_abb机器人所说的位姿是什么-CSDN博客

机器人学:(3)机器人运动学-CSDN博客

机器人学:(4)运动规划_机器人运动规划-CSDN博客

KUKA库卡机器人仿真软件(KUKASIMPRO)_库卡机器人软件资源-CSDN文库

机器人控制算法

ROS 机器人运动控制_ros运动控制代码-CSDN博客

机器人控制系列教程之UR机器人运动学求解-CSDN博客

机器人的运动控制:如何实现高度协调的运动-CSDN博客

机器人运动控制_机器人控制csdn-CSDN博客

轮式移动机器人的运动控制入门_移动机器人运动控制包括-CSDN博客

轨迹规划

LQR的理解与运用 第一期——理解篇-CSDN博客

自动驾驶(七十二)---------LQR控制算法-CSDN博客

基于LQR算法的机器人轨迹跟踪控制详解_lqr轨迹跟踪-CSDN博客

LQR控制算法推导以及简单分析-CSDN博客

感知,规划,控制

卡尔曼滤波啥的 pid

机械臂

机械臂——工具标定_机械臂工具坐标系标定-CSDN博客六轴机械臂算法正解(FK)和逆解(IK)_六轴机械臂算法正解(fk)和逆解(ik)-CSDN博客

对六自由度机械臂的运动控制及python实现(附源码)_六自由度机械臂编程-CSDN博客

OCR

[Halcon&识别] OCR字符识别_halcon字符识别-CSDN博客

SLAM

【ORB-SLAM2代码】(一)线程调度_orb-slam2多线程-CSDN博客

机器人十大前沿技术(2023-2024年)_机器人十大前沿技术(2023-2024)-CSDN博客


3.结构光(Structured Light)
 


优点:高精度,高效率;
缺点:近距离数据获取。

4.基于图像的方法-Multi-view Stereo
 


优点:无源被动式,成本低,图像来源广,精度较高;
缺点:计算速度慢。

双目成像相关

标定文件的格式:一般用 用ini或者xml

还未产品化过:双目条纹结构光,散斑立体匹配, 双目的升降台标定

PMD后面也会出双目的 线扫相机

1. 张正友那个手摆的模型

DLT法,目前公司用的涉及到刚性分解内外参的, 模型都是相机模型,只是解法和张氏的不同

最小二乘法

2.升降台标定的结果也可以直接用于极线校正

小视野的台子可以直接用

电路上差异主是是以前是双投影轮流触发相机,现在是单投影触发双相机分别取图

知象光电
https://3dcamera.chishine3d.com/html/surface94/index.html
熵智
http://www.sunz.cn/

3. 条纹换散斑实验台

同一个条件下的条纹单目和双目的成像的图,看看精度提升,单目条纹的波纹现象是不是都不存在了

4. 搜相位解包裹的资料的时候《Reference image based phase unwrapping

framework for a structured light system 》,有代码。有点点没看明白是怎么把条纹和散斑结合起来的。看里面能到187FPS

5. 自研的散斑相机相机参数确定下来了么,想知道下基线长度,分辨率,工作范围。

理论的视差搜索范围

双目条纹的产品化、先做散斑的,原因是大场景光源现阶段没有办法实现。散斑的加速还是用3588

条纹这边,小场景下算法实验还是可以进行的。

如果后面要做,硬件加速可能要和单目条纹一样用cuda。


九点标定

九点标定需要1张图片啊,什么原理

解方程,把矩阵里的未知数解出来

九点标定可能不是您所指的标准术语,但如果您是在谈论相机标定(Camera Calibration),尤其是在使用棋盘格的情况下,那么这里可能是指使用多张包含棋盘格图案的图像来进行相机内在参数的标定以及畸变校正的过程。

在相机标定时,通常需要多张不同姿态下的棋盘格图像。这是因为我们需要解决相机内参矩阵(包括焦距、图像中心等)和畸变系数(如径向畸变)。为了准确地估计这些参数,通常需要至少10张以上不同角度和位置的棋盘格图像,以便能够充分覆盖不同的视角和距离。

原理概述

  1. 棋盘格角点检测: 在每一张棋盘格图像上,OpenCV可以自动检测棋盘格的角点。这些角点提供了世界坐标系中的已知点与图像坐标系中的点之间的对应关系。
  2. 世界坐标系: 棋盘格角点的世界坐标通常是已知的,可以认为是二维平面上的整数坐标。例如,对于一个8x6的棋盘格,角点的世界坐标可以是从(0,0)到(7,5)这样的整数对。
  3. 图像坐标系: 在每张图像中,OpenCV会找到对应的角点在图像中的像素坐标。
  4. 相机标定: 使用这些对应关系,OpenCV的calibrateCamera函数可以通过最小二乘法来求解相机内参矩阵(包括焦距、图像中心等)和畸变系数。
  5. 优化过程: OpenCV使用了一种非线性优化算法(如Levenberg-Marquardt算法),通过对多幅图像上的角点检测结果进行优化,从而得到最佳的相机参数估计。
  6. 结果验证: 完成标定后,可以用得到的相机参数和畸变系数来对图像进行校正,检查是否有明显的改进,比如去除镜头畸变。
点云数据归一化

点云数据归一化是将点云数据转换到一个统一的尺度或范围的过程,旨在使数据更适合后续处理,如特征提取、机器学习算法训练等。根据不同的需求和应用场景,点云数据归一化可以分为多种类型。以下是几种常见的点云数据归一化方法:

常见的点云数据归一化方法
  1. 尺度归一化(Scaling Normalization)
    • 描述:将点云数据的坐标缩放到一个特定的范围,通常是 [0, 1] 或 [-1, 1]。
    • 方法:找到点云数据在每个维度上的最大值和最小值,然后对每个坐标值进行缩放。
    • 公式:normalized_value=value−min_valuemax_value−min_valuenormalized_value=max_value−min_valuevalue−min_value。
    • 适用场景:适用于需要将数据映射到固定范围的情况,如神经网络输入。
  1. 中心化(Centralization)
    • 描述:将点云数据平移到原点附近。
    • 方法:计算所有点坐标的平均值(质心),然后从每个点坐标中减去这个平均值。
    • 适用场景:适用于需要消除点云数据偏移的情况,例如在进行旋转或平移变换之前。
  1. 单位化(Unit Scaling)
    • 描述:将点云数据的整体尺寸缩放为单位大小。
    • 方法:计算点云数据的最大边界框的对角线长度或外接球的直径,并将所有点乘以一个系数,使得最大的距离变为 1。
    • 适用场景:适用于需要将点云大小标准化的情况,例如在比较不同大小的点云时。
  1. 统计归一化(Statistical Normalization)
    • 描述:根据点云数据的统计特性(如均值、标准差)进行归一化。
    • 方法:计算每个维度上的均值和标准差,然后使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean 进行归一化。
    • 适用场景:适用于需要将数据转换为标准正态分布的情况,如在机器学习中作为特征输入。
  1. 局部归一化(Local Normalization)
    • 描述:针对点云中的每个局部区域进行归一化。
    • 方法:对于每个点或其邻域,计算局部特征(如局部平均值、局部标准差),并进行局部尺度的归一化。
    • 适用场景:适用于处理非均匀分布的点云数据,特别是在局部特征分析中。
  1. 最大最小值归一化(Min-Max Normalization)
    • 描述:将每个维度上的数据缩放到一个指定的范围,通常是 [0, 1]。
    • 方法:类似于尺度归一化,但更强调每个维度上的最小值和最大值。
    • 适用场景:适用于需要将数据映射到固定范围的情况,特别是当数据范围已知时。
  1. Z-Score 标准化(Z-Score Standardization)
    • 描述:将数据转换为具有零均值和单位方差的形式。
    • 方法:使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean,其中 mean 是均值,std_dev 是标准差。
    • 适用场景:适用于需要标准化数据分布的情况,尤其是在统计分析和机器学习中。
  1. L2 归一化(Norm_L2)
    • 描述:将点云数据缩放到单位球内,即每个点的 L2 范数为 1。
    • 方法:计算每个点的 L2 范数,并将每个点除以其范数。
    • 适用场景:适用于需要将点云数据标准化到单位球内的应用场景,如特征向量的标准化。
  1. L1 归一化(Norm_L1)
    • 描述:将点云数据缩放到单位立方体内,即每个点的 L1 范数为 1。
    • 方法:计算每个点的 L1 范数,并将每个点除以其范数。
    • 适用场景:适用于需要将点云数据标准化到单位立方体内的应用场景,如稀疏特征向量的标准化。

三维数据转换二维

三维变换算法,三维坐标转换二维算法,C,C++

在计算机图形学中,三维变换和投影是两个关键概念,它们用于将三维物体表示到二维屏幕上。本资源包聚焦于“三维变换算法”和“三维坐标转换二维算法”,主要涉及C和C++语言实现。接下来,我们将深入探讨这些概念及其在实际应用中的重要性。

一、三维变换算法

  1. 几何变换:
  • 平移:通过改变物体各顶点的坐标来实现物体的整体移动。在C或C++中,可以通过向每个顶点添加一个平移向量来完成。
  • 旋转:围绕一个轴进行,改变物体各顶点相对于轴的相对位置。这通常使用旋转矩阵实现,如欧拉角旋转或四元数旋转。
  • 变比:也叫缩放,沿着一个或多个轴改变物体的大小。使用缩放矩阵可以实现等比例或非等比例的缩放。
  • 对称:物体沿特定轴对称,可以看作是旋转和反射的组合。
  • 错切:沿一个或多个轴扭曲物体,形成非线性的变形效果,使用错切矩阵进行计算。

二、投影变换:

  1. 平行投影:
  • 三视图:由俯视图、主视图和侧视图构成,保持物体与投影平面平行,每个视图分别反映物体的高度、宽度和深度。
  • 正轴测图:一种工程绘图方法,保留了部分立体感,三个轴的投影比例不同,通常用于快速草图绘制。
  • 斜轴测图:与正轴测图类似,但允许轴偏离正交,提供更接近真实视觉的图像。
  1. 透视图:模拟人眼观察物体的方式,距离远的物体显得小,近的物体显得大。透视图可以分为线性透视(点消失点)和大气透视(颜色和清晰度随距离变化),在计算机图形学中通常使用透视投影矩阵来实现。

三、C/C++实现:

在C和C++中,这些变换通常通过矩阵运算来实现,利用向量和矩阵库,如OpenGL的glMultMatrix()函数或自定义的数据结构和算法。程序员需要理解如何创建和操作这些矩阵,以及如何将它们应用到顶点坐标上。

四、三视图标签:

“Vc surprise3z9 三视图”可能指的是一个特定的库或工具,用于生成三维物体的三视图。在C++环境中,这可能是一个库函数或类,帮助程序员便捷地进行三维模型的二维表示。

这个压缩包可能包含了一系列实现上述变换和投影的源代码文件,可以帮助开发者理解和应用这些基本的计算机图形学技术。对于学习和研究三维图形处理,或者开发游戏、CAD软件等项目来说,这些都是不可或缺的基础知识。



类和对象——const类成员函数_类和对象中const函数-CSDN博客

C++/opencv实现DLT(直接线性变换法)标定相机_opencv dlt求解内外参-CSDN博客

结构体和类

“结构体”(struct)和“类”(class)之间的区别主要在于默认的访问控制符以及一些历史上的习惯用法。实际上,在 C++ 中,structclass 关键字几乎可以互换使用。然而,它们在实践中有一些不同的用途和约定:

1.访问控制符的默认值
  1. struct
    • 默认的访问控制符是 public。这意味着,如果没有显式地指定访问控制符,struct 中的所有成员都是公有的(public)。
    • 这使得 struct 更适合用来表示简单的数据聚合,比如一组相关联的数据项。
  1. class
    • 默认的访问控制符是 private。这意味着,如果没有显式地指定访问控制符,class 中的所有成员都是私有的(private)。
    • 这使得 class 更适合用来实现复杂的抽象数据类型,其中包含了一些内部状态和方法,这些状态和方法通常应该被封装起来,只通过公开的接口(通常是公有成员函数)进行访问。。
2.多态性

在 C++ 中,多态性是指一个接口可以有多个实现。多态性的实现通常涉及继承和虚函数。无论是 struct 还是 class,都可以支持多态性。

多态性的实现

多态性通常涉及以下要素:

  1. 基类:定义一个接口(通常包含纯虚函数)。
  2. 派生类:实现基类的接口。
  3. 指针或引用来调用虚函数:通过基类的指针或引用调用虚函数,实际调用的是派生类的实现。

视觉应用

OCR字符识别

立体视觉

【重要文献】

立体视觉入门指南(4):相机标定之DLT直接线性变换【建议收藏】_dlt标外参-CSDN博客

https://blog.csdn.net/weixin_33724659/article/details/93568941

立体匹配入门指南(8):视差图、深度图、点云_视差与深度的转换公式举例-CSDN博客

基于3D视觉的三维人体重建方法漫谈_基于视觉外壳的三维重建方法有哪些-CSDN博客


1.如果两个R-G-B-D相机拍摄同一个身体部位立体的,因为角度不同,三维重建 存在视角误差之类的,怎么解决

当使用两个RGB-D相机从不同角度拍摄同一物体或身体部位进行三维重建时,确实会遇到视角误差的问题。这种误差可能来源于相机的内参(如焦距、主点位置等)、外参(如位置、姿态)以及相机本身的噪声等因素。以下是几种可以用来减少或消除这些误差的方法:

  1. 相机标定
    • 内参数标定:确保每个相机的内参数准确无误,这通常通过标准的棋盘格或其他标定板来完成。
    • 外参数标定:确定两个相机之间的相对位置和方向,也就是它们之间的旋转和平移矩阵。可以通过共同视野中的特征点来进行标定。
  1. 特征匹配
    • 使用特征匹配技术(如SIFT、SURF、ORB等),找到两幅图像中相同特征点的位置,并利用这些对应关系来校正视角差异。
  1. 融合算法
    • 利用多视图几何方法(如基于结构光的立体视觉、光度立体视觉等)来融合来自不同视角的信息,从而提高重建的精度。
    • 采用点云配准算法(如ICP-迭代最近点算法)来对齐来自不同相机视角的深度信息。
  1. 数据后处理
    • 对重建的数据进行平滑、滤波等处理,以减少噪声影响。
    • 可以使用基于机器学习的方法来优化重建结果,例如使用深度学习模型来预测更准确的表面细节。
  1. 硬件同步
    • 确保两个相机同步采集图像,避免由于时间差导致的运动伪影。
  1. 环境控制
    • 尽量在控制良好的环境中拍摄,避免光线变化和其他外部因素引起额外的误差。
  1. 软件工具
    • 使用专业的三维重建软件,这些软件通常包含自动化的误差校正功能。

综合上述方法,你可以根据具体的应用场景和技术条件选择合适的解决方案来最小化视角误差,从而获得更精确的三维重建结果。

光度立体

如何获取物体表面的法向量?好好谈谈光度立体法-CSDN博客

光度立体法简介-CSDN博客

计算机视觉:朗伯光度立体法(Lambertian Photometric Stereo)_光度立体算法python-CSDN博客

三维重建

结构光三维重建Projector-Camera Calibration投影仪相机标定_投影仪标定-CSDN博客


曲率计算

梯度计算

Rockchip平台

在算法工程师应聘过程中,HR提到的“RK平台”通常是指瑞芯微电子(Rockchip)的硬件平台。Rockchip 是一家中国半导体公司,专注于开发系统级芯片(SoC)解决方案,广泛应用于平板电脑、机顶盒、智能电视、教育机器人和其他各种智能设备中。

对于算法工程师来说,熟悉 RK 平台可能意味着了解如何在基于 Rockchip SoC 的设备上部署和优化算法,尤其是计算机视觉、深度学习或其他高性能计算相关的应用。这可能包括对以下方面的理解:

  1. 硬件架构:了解 RK 平台的 CPU、GPU、NPU(神经网络处理器)及其他加速器的架构特点。
  2. 软件栈:熟悉 RK 平台提供的 SDK、工具链、驱动程序及中间件。
  3. 操作系统支持:知道如何在 Android、Linux 等操作系统上开发和调试应用程序。
  4. 优化技术:能够利用 RK 平台的硬件特性来优化算法性能,例如通过 OpenCL、OpenMP 或者专有的 API 来加速计算密集型任务。
  5. 开发工具:熟练使用 Rockchip 提供的开发工具,如调试工具、性能分析工具等。

如果 HR 在面试中提到 RK 平台,他们可能希望候选人展示在这方面的经验和知识

RK3588

FET3562J-C核心板

CPU:RK3562/RK3562J
架构: 4×Cortex-A53
主频:2.0GHz/1.8GHz
RAM:1GB/2GB LPDDR4
ROM:8GB/16GB eMMC
系统:Linux 5.10.198

FET3588-C核心板

CPU:RK3588/RK3588J,8核处理器,最高主频2.4GHz

NPU:6TOPS

RAM:4GB / 8GB / 16GB LPDDR4x

ROM:32GB / 64GB / 128GB eMMC

系统:Linux5.10.66、Android12.0、Forlinx Desktop 20.04/22.04

在rk3588上配置opencl库,arm官网没有rk3588版本的动态库,需要源码编译;

调试rk3588平台,将opencl版本的小连通域滤除算法部署到平台上出现异常中断问题;

调试rk3588平台,将部分opencl代码移植到平台上进行性能测试;

查问开启RK3588性能模式方法,对RK3588GPU锁频;

使用图像纹理内存来存放代价,在pc端得到了较好的优化效果,在RK3588上耗时不理想与pc差距较大;

完成代价计算,视差计算及后处理模块的opencl优化,并在PC和RK3588上进行耗时测试;

完成散斑立体匹配opencl版本的加速优化,在PC和RK3588上进行对比测试;

在RK3588上运行RGBD配准工程;

解决了在RK3588上静态集成 OpenCL的Kernel源代码到可执行文件无法编译问题;

在RK3588上部署散斑匹配4000版本并通过测试


halcon区域游程

这张图片显示了两个星形图案,每个图案都标有不同的数字。左边的星形图案似乎是由两条线段交叉形成的,右边的星形图案则是闭合的轮廓。要处理这类复杂的ROI(感兴趣区域),Halcon提供了多种功能强大的形状检测和分割算法。以下是处理此类问题的一些建议:

  1. 形状模型
    • 使用Halcon的形状模型(Shape Model)功能,它可以对物体的几何特征进行建模,并基于此模型进行搜索和匹配。对于星形图案,您可以创建一个形状模型来描述星形的基本结构,然后在图像中搜索相似的形状。
  1. 边缘检测
    • 应用边缘检测算子(如Canny算子或Sobel算子)来提取图像中的边缘信息,然后使用边缘连接算子(Edge Linking)将边缘点连接成连续的线条。
  1. 轮廓检测
    • 使用轮廓检测算子(如Find Contours)来找出图像中的轮廓,然后分析这些轮廓以确定它们是否符合星形的特征。
  1. 模板匹配
    • 创建一个星形模板,然后使用模板匹配算子(Template Matching)在图像中搜索与模板最接近的部分。
  1. 分水岭变换
    • 对图像应用分水岭变换(Watershed Transformation),然后利用标记(Markings)来区分不同的区域,从而分离出星形图案。
  1. 区域生长
    • 利用区域生长(Region Growing)算子从种子点开始逐渐扩大区域,直到满足一定的边界条件为止。
  1. 形态学运算
    • 运用形态学运算(如腐蚀、膨胀、开运算和闭运算)来增强或去除图像中的特定结构,使星形更加明显。
  1. 机器学习
    • 训练一个分类器(如SVM或神经网络)来自动识别星形图案。这种方法需要大量的训练样本,但在处理复杂形状时效果较好。

针对您的问题,建议先尝试使用形状模型或轮廓检测的方法。如果这些方法无法达到预期的效果,再考虑其他方法。在Halcon中,您可以结合多个算子来提高检测的准确性。同时,记得调整参数以适应不同场景的需求。


对于这两种类型的星形——内部填充和中空的,Halcon提供了多种方法来处理。以下是一些可能的策略:

  1. 形状模型
    • 对于两种类型的星形,都可以使用形状模型进行处理。对于中空的星形,可以创建一个外部轮廓的形状模型;对于填充的星形,可以创建一个包含内部孔洞的形状模型。
  1. 边缘检测
    • 边缘检测适用于两种类型的星形。对于中空的星形,可以检测到完整的轮廓;对于填充的星形,可以检测到外边缘和内边缘。
  1. 轮廓检测
    • 对于中空的星形,可以直接检测到轮廓;对于填充的星形,可以检测到外轮廓和内轮廓,然后合并内外轮廓得到整个星形。
  1. 模板匹配
    • 对于中空的星形,可以使用填充的星形模板进行匹配;对于填充的星形,可以使用同样填充的星形模板。
  1. 分水岭变换
    • 分水岭变换适用于两种类型的星形,但可能需要额外的处理来分离内外部区域。
  1. 区域生长
    • 区域生长适合处理填充的星形,但对于中空的星形可能需要额外的处理来避免过度生长。
  1. 形态学运算
    • 形态学运算可以应用于两种类型的星形,但需要注意保持星形的完整性。
  1. 机器学习
    • 机器学习方法可以处理各种类型的星形,但需要足够的训练数据。

在实际应用中,可能需要结合多种方法来获得最佳结果。例如,可以先使用边缘检测或轮廓检测初步定位星形,然后使用形状模型或模板匹配细化结果。另外,注意调整参数以适应不同的星形类型和背景噪声。


深度图属性

成像模式:弱透视模型,透视模型;

分辨率,偏移量,绝对

soble滤波计算图像梯度
计算cv::Mat图像曲率

代码解释

  1. 头文件包含
    • 使用了 OpenCV 库进行图像处理,包括读取和处理深度图像。
  1. computeDepthMapCurvature 函数
    • 这个函数用于计算深度图的曲率,输入为深度图 depthMap,输出为曲率图 curvatureMap
    • 遍历深度图中的每个像素,计算其周围窗口的深度值。
    • 使用中心像素点周围的深度变化来估计曲率,这里简单地采用了深度梯度的平方和作为曲率的估算。
    • 根据计算得到的曲率值,将其存储在 curvatureMap 中。
  1. 主函数 (main)
    • 在主函数中,首先读取深度图像,并调用 computeDepthMapCurvature 函数计算曲率。
    • 最后,显示曲率图像并等待用户按下键盘任意键关闭窗口。

注意事项

  • 性能优化:这里使用了简单的窗口计算来估计曲率,实际上可以使用更复杂的算法或技术来提高曲率的计算精度和效率,比如基于邻域拟合曲面的方法。
  • 边界处理:在边界处可能需要特殊处理,确保不越界并处理边界条件。
  • 数据类型:示例中使用了 CV_32F 类型的

++++++++++++


3DROI

详细解释

  1. 计算边界盒
    • 计算点云数据的边界盒(Bounding Box),得到最小坐标 Vmin 和最大坐标 Vmax
  1. 计算中心点
    • 计算中心点 mid,即 (Vmin + Vmax) / 2.0
  1. 移动点云到中心
    • 将点云数据移动到中心点,即 srcPointCloud[i] - mid
  1. 计算最大 L1 范数
    • 计算移动后点云数据的最大 L1 范数 L1MAX,即所有点的坐标绝对值的最大值。
  1. 缩放点云到单位立方体内
    • 将点云数据缩放到单位立方体内,即 (*dstPointCloud)[i] / L1MAX

点云归一化

归一化方法将点云数据缩放到单位立方体内,使每个点的 L1 范数(即曼哈顿距离)不超过 1。

为了完成 L1 归一化的实现,我们需要做以下几个步骤:

1.计算点云的边界盒(Bounding Box)。

2.找到点云数据的中心点,并将所有点移动到中心点。

3.计算每个点的 L1 范数,并找出最大值。

4.将所有点按最大 L1 范数进行缩放,使其不超过 1。

点云数据归一化是将点云数据转换到一个统一的尺度或范围的过程,旨在使数据更适合后续处理,如特征提取、机器学习算法训练等。根据不同的需求和应用场景,点云数据归一化可以分为多种类型。以下是几种常见的点云数据归一化方法:

常见的点云数据归一化方法

计算一个点云数据集的边界盒(Bounding Box)的。边界盒是一种常用的数据结构,用于描述一组点的空间范围。

  1. 初始化两个三维向量 xyzMinxyzMax,分别用来存储点云数据的最小坐标和最大坐标。
  2. 复制点云数据到一个新的数组 points 中。
  3. 遍历所有的点,并检查每个点的有效性。
  4. 对于有效的点,更新 xyzMinxyzMax 的值。
  5. 如果没有有效点,则返回一个空的 Sci3DBox 对象。
  6. 如果存在有效点,则创建一个 Sci3DBox 对象,并使用计算得到的最小坐标和最大坐标初始化该对象。
  1. 尺度归一化(Scaling Normalization)
    • 描述:将点云数据的坐标缩放到一个特定的范围,通常是 [0, 1] 或 [-1, 1]。
    • 方法:找到点云数据在每个维度上的最大值和最小值,然后对每个坐标值进行缩放。
    • 公式:normalized_value=value−min_valuemax_value−min_valuenormalized_value=max_value−min_valuevalue−min_value。
    • 适用场景:适用于需要将数据映射到固定范围的情况,如神经网络输入。
  1. 中心化(Centralization)
    • 描述:将点云数据平移到原点附近。
    • 方法:计算所有点坐标的平均值(质心),然后从每个点坐标中减去这个平均值。
    • 适用场景:适用于需要消除点云数据偏移的情况,例如在进行旋转或平移变换之前。
  1. 单位化(Unit Scaling)
    • 描述:将点云数据的整体尺寸缩放为单位大小。
    • 方法:计算点云数据的最大边界框的对角线长度或外接球的直径,并将所有点乘以一个系数,使得最大的距离变为 1。
    • 适用场景:适用于需要将点云大小标准化的情况,例如在比较不同大小的点云时。
  1. 统计归一化(Statistical Normalization)
    • 描述:根据点云数据的统计特性(如均值、标准差)进行归一化。
    • 方法:计算每个维度上的均值和标准差,然后使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean 进行归一化。
    • 适用场景:适用于需要将数据转换为标准正态分布的情况,如在机器学习中作为特征输入。
  1. 单位化(Unit Scaling)
    • 描述:将点云数据的整体尺寸缩放为单位大小。
    • 方法:计算点云数据的最大边界框的对角线长度或外接球的直径,并将所有点乘以一个系数,使得最大的距离变为 1。
    • 适用场景:适用于需要将点云大小标准化的情况,例如在比较不同大小的点云时。
  1. 局部归一化(Local Normalization)
    • 描述:针对点云中的每个局部区域进行归一化。
    • 方法:对于每个点或其邻域,计算局部特征(如局部平均值、局部标准差),并进行局部尺度的归一化。
    • 适用场景:适用于处理非均匀分布的点云数据,特别是在局部特征分析中。
  1. 最大最小值归一化(Min-Max Normalization)
    • 描述:将每个维度上的数据缩放到一个指定的范围,通常是 [0, 1]。
    • 方法:类似于尺度归一化,但更强调每个维度上的最小值和最大值。
    • 适用场景:适用于需要将数据映射到固定范围的情况,特别是当数据范围已知时
  1. Z-Score 标准化(Z-Score Standardization)
    • 描述:将数据转换为具有零均值和单位方差的形式。
    • 方法:使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean,其中 mean 是均值,std_dev 是标准差。
    • 适用场景:适用于需要标准化数据分布的情况,尤其是在统计分析和机器学习中。
  1. L2 归一化(Norm_L2)
    • 描述:将点云数据缩放到单位球内,即每个点的 L2 范数为 1。
    • 方法:计算每个点的 L2 范数,并将每个点除以其范数。
    • 适用场景:适用于需要将点云数据标准化到单位球内的应用场景,如特征向量的标准化。
  1. L1 归一化(Norm_L1)
    • 描述:将点云数据缩放到单位立方体内,即每个点的 L1 范数为 1。
    • 方法:计算每个点的 L1 范数,并将每个点除以其范数。
    • 适用场景:适用于需要将点云数据标准化到单位立方体内的应用场景,如稀疏特征向量的标准化。

3D清理

三维清理是深度图像的去噪,去干扰等的方法集合,主要使用场景是图像去噪,目标剔除,干扰清除等,其主要的清理方式有以下几种:基于图像特征的清理、基于3D物体距离的清理、基于屏蔽区域的清理、点云无效干扰点的清理。 基于图像特征的清理:通过对图像分析,获取图像的特征,基于特征的范围值实现对图像的清理,其枚举量如下所示:

// 真实位置的x坐标 //真实位置的y坐标 //真实位置的y坐标 【根据X,Y,Z坐标,进行一个三维的二值化,凹凸阈值筛选】 //法向x坐标 //法向y坐标 //法向z坐标 【计算全图法向量,再选择邻域范围内,法相阈值】 //曲率 //(和z轴夹角) //梯度 //颜色分量R //颜色分量G //颜色分量B //搜索范围,邻域数量10,搜索范围内相邻点多少个,少于阈值判定为孤立值 //邻域数量 【//区域内的范围,符合筛选条件,判定为OK,不符合判断为孤立点】

三维清理(3D Cleaning)是指在三维数据处理过程中,通过各种算法和技术去除噪声、干扰和其他不需要的数据,从而提高三维模型的质量。这种技术广泛应用于计算机视觉、机器人学、虚拟现实等领域。您提到的方法是基于图像特征的清理,这种方法利用了图像的多种特性来进行清理工作。以下是您列举的一些具体特征及其应用方式:

基于图像特征的清理

  1. 真实位置的X/Y/Z坐标
    • 通过X、Y、Z坐标,可以进行三维空间中的二值化处理,即根据坐标值设定阈值来区分前景和背景。例如,可以设定一个凹凸阈值,超出此阈值的点被视为噪声或干扰。
  1. 法向量(Normal Vector)
    • 法向量表示的是表面的方向,通过计算每个像素点的法向量,可以进一步分析表面的性质。在清理过程中,可以通过比较局部区域内法向量的一致性来识别并移除异常点。
  1. 曲率(Curvature)
    • 曲率描述了表面弯曲的程度。高曲率区域可能是噪声点或者边缘。通过设定曲率阈值,可以识别并清理掉这些点。
  1. 和Z轴夹角
    • 对于某些应用场景,可以考虑表面相对于某一特定方向(如Z轴)的角度。角度异常的点可能是噪声或干扰。
  1. 梯度(Gradient)
    • 梯度反映了图像强度的变化率,高梯度区域通常对应于边缘。通过梯度信息可以检测并移除噪声。
  1. 颜色分量(RGB)
    • 在带有颜色信息的深度图像中,可以通过颜色分量来辅助清理。例如,如果某区域的颜色与其他区域显著不同,可以认为是噪声。
  1. 搜索范围和邻域数量
    • 通过定义搜索范围和邻域数量,可以检测到孤立点。如果在一个给定的邻域内,某个点的邻居数量少于阈值,则该点可能是一个孤立点,可以被标记为噪声。

应用实例

假设我们要清理一个带有颜色信息的深度图像,我们可以按照以下步骤进行:

  1. 提取特征:首先从深度图像中提取上述提到的各项特征,如坐标、法向量、曲率等。
  2. 设定阈值:根据应用需求设定各个特征的阈值。
  3. 清理过程
    • 对于每一个像素点,计算其特征值并与阈值比较。
    • 如果特征值超出阈值,则认为该点为噪声或干扰,进行清理。
  1. 邻域分析:对于某些特征,如孤立点的检测,可以分析每个点周围的邻域,如果发现该点与其邻域不一致,则视为噪声点。

通过这种方式,可以有效地去除深度图像中的噪声和干扰,提高后续处理的效果。这种方法尤其适用于机器人导航、物体识别等需要高质量三维数据的应用场景。


点云(Point Cloud)是通过3D扫描设备获取的三维空间中大量离散点集合的数据表示形式。点云中的每个点通常包含XYZ坐标信息,有时还包括颜色或强度等附加属性。在处理点云数据时,为了更好地分析和可视化这些数据,通常需要将点云转换为其他格式,比如网格(Mesh)。以下是点云三维图网格化的方法及其作用:

网格化方法

1.三角剖分(Delaunay Triangulation)

这是最常用的点云网格化技术之一。它基于点云数据创建一个三角网,使得每个三角形内部都不包含任何其他点。

Delaunay三角剖分保证了三角形的质量,避免了长而细的形状。

2.泊松表面重建(Poisson Surface Reconstruction):

该方法利用点法线信息来估计一个隐式函数,该函数可以用来构造一个三角形网格。

泊松重建通常能生成更平滑的表面,并且能够很好地保留细节。

3.移动最小二乘(Moving Least Squares, MLS):

这种方法通过对局部区域内的点使用最小二乘拟合来平滑点云,然后在此基础上进行网格化。

移动最小二乘有助于减少噪声并改善点云的质量。

4.Alpha Shapes:

Alpha Shapes是一种几何构造,它可以根据不同的alpha值来定义物体的形状。

通过调整alpha参数,可以从点云生成不同的几何结

5.八叉树分割(Octree Segmentation):

八叉树是一种空间划分方法,可以用于高效地存储和检索点云数据。

在八叉树分割后,可以通过对每个体素进行三角化来生成网格。

网格化的作用

· 数据压缩:相比于原始的点云数据,网格通常占用较少的存储空间。

· 提高渲染效率:对于图形应用而言,网格比点云更容易渲染,从而提高了视觉效果和计算效率。

· 便于进一步处理:网格化后的数据更容易进行后续处理,如碰撞检测、有限元分析等。

· 增强数据完整性:网格化可以填补点云中的空洞,使得模型更加完整。

· 改善数据质量:通过平滑和其他优化算法,可以去除噪声,提高数据质量。

总之,点云三维图网格化是3D建模中的一个重要步骤,它能够帮助我们从原始数据中提取出有意义的几何结构,并为进一步的应用提供支持。

点云归一化

点云归一化是指将点云数据转换到一个标准的空间范围内的过程。这通常是为了简化后续处理、提高算法性能或便于比较不同规模的对象。点云归一化可以包括多个步骤,以下是一个常见的点云归一化流程:

1. 计算点云边界

首先,需要确定点云数据的边界范围。这通常涉及到找到点云中的最大和最小坐标值。

2. 计算中心点

接下来,计算点云的中心点。中心点通常是点云的质心或边界框的中心。

3. 平移点云

将点云平移到原点,这样所有的点相对于原点重新定位。

4. 缩放点云

缩放点云以适应预定的尺度。这可以通过计算点云的最大尺寸(即最大边界距离)来完成,并根据需要的目标尺寸进行缩放。

5. 验证归一化结果

最后,可以验证归一化是否成功。这可以通过再次计算点云的新边界来检查。

这段代码将读取一个点云文件,计算其边界并进行平移和缩放,最后将归一化后的点云保存到新的文件中。请确保将路径替换为你实际使用的点云文件路径。


点云归一化

点云归一化的主要目的是为了使点云数据在后续处理中更加方便、高效,同时也便于不同点云之间的比较。归一化方法通常涉及平移、旋转和缩放操作,以将点云数据标准化到特定的范围内。以下是几种常见的点云归一化方法:

1. 平移归一化

平移归一化通常会将点云数据移动到一个特定的位置,最常见的是将其中心点(质心或边界框中心)移动到坐标系的原点。

方法:

  • 计算质心:使用所有点坐标的平均值作为质心。
  • 计算边界框中心:计算点云的最小边界框的中心位置。
  • 平移点云:将每个点的位置减去质心或边界框中心的位置。
2. 缩放归一化

缩放归一化是指将点云的尺寸调整到一个固定的尺度范围内。这可以通过计算点云的最大尺寸(例如,点云边界框的对角线长度),然后根据目标尺寸进行缩放。

方法:

  • 计算最大尺寸:找出点云的最大边界距离(对角线长度)。
  • 计算缩放因子:根据目标尺寸(例如,单位尺寸1)计算缩放因子。
  • 缩放点云:将每个点的位置乘以缩放因子。
3.综合归一化

综合归一化结合了平移和缩放两个步骤,将点云移动到原点并调整到一个固定大小。

方法:

  • 平移:先将点云移动到原点。
  • 缩放:再根据最大尺寸进行缩放。
4. 方向归一化

方向归一化是指通过旋转点云使其主要轴与坐标轴对齐。这有助于某些特定的处理任务,如特征检测或分类。

方法:

  • 主成分分析(PCA):使用PCA来找出点云的主要方向。
  • 旋转点云:根据PCA的结果,应用旋转矩阵将点云旋转到主要方向与坐标轴对齐的状态。
5. 单位球归一化

这种方法将点云数据投影到单位球面上,所有点的欧几里得距离都限制在单位长度内。

方法:

  • 计算点云的边界:找出点云的最大边界距离。
  • 缩放和平移点云:将点云缩放到单位球半径,并平移到球心。
  • 投影到球面:如果需要的话,可以将所有点投影到球面上。
6. 归一化到固定大小

这种归一化方法不仅包括缩放和平移,还可能涉及采样,以确保点云具有固定数量的点。

方法:

  • 缩放和平移点云:将点云调整到固定大小。
  • 采样点云:如果需要,使用均匀采样或随机采样等方法确保点云具有固定数量的点。

实现示例

下面是一个使用PCL库进行点云平移和缩放归一化的示例代码:

点云数据归一化是一种预处理技术,用于调整点云数据的尺度或范围,使其满足某些特定的标准或要求。归一化的目的是为了使数据更适合后续处理,比如特征提取、机器学习算法训练等。归一化可以改善数据的质量,减少计算复杂度,并且可以使不同来源的数据具有可比性。

点云数据归一化通常涉及以下几个方面:

1.尺度归一化:将点云数据的坐标缩放到一个特定的范围,通常是[0, 1]区间。这可以通过减去最小值然后除以最大值和最小值之差来完成。

2.中心化:将点云数据平移到原点附近,通常通过减去所有点坐标的平均值来实现。

3.单位化:将点云数据的大小缩放为单位大小,即点云的外接球半径或直径为1。

4.统计归一化:根据点云数据的统计特性(如均值、标准差)进行归一化,使得数据的分布符合某种标准分布,如标准正态分布。

下面是一个简单的示例,展示如何进行点云数据的尺度归一化和中心化:

归一化方法

点云数据归一化是一种常见的预处理步骤,用于将点云数据转换到一个统一的尺度或范围,从而使数据更适合后续处理。归一化方法的选择取决于具体的应用场景和数据特点。以下是一些常用的点云数据归一化方法:

  1. 尺度归一化(Scaling Normalization)
    • 目标:将点云数据的坐标缩放到一个特定的范围,通常为 [0, 1] 或 [-1, 1]。
    • 方法:首先找到点云数据在每个维度上的最大值和最小值,然后对每个坐标值进行缩放。公式为 normalized_value=value−min_valuemax_value−min_valuenormalized_value=max_value−min_valuevalue−min_value。
    • 适用场景:适用于需要将数据映射到固定范围的情况,如神经网络输入。
  1. 中心化(Centralization)
    • 目标:将点云数据平移到原点附近。
    • 方法:计算所有点坐标的平均值(质心),然后从每个点坐标中减去这个平均值。
    • 适用场景:适用于需要消除点云数据偏移的情况,例如在进行旋转或平移变换之前。
  1. 单位化(Unit Scaling)
    • 目标:将点云数据的整体尺寸缩放为单位大小。
    • 方法:计算点云数据的最大边界框的对角线长度或外接球的直径,并将所有点乘以一个系数,使得最大的距离变为 1。
    • 适用场景:适用于需要将点云大小标准化的情况,例如在比较不同大小的点云时。
  1. 统计归一化(Statistical Normalization)
    • 目标:根据点云数据的统计特性(如均值、标准差)进行归一化。
    • 方法:计算每个维度上的均值和标准差,然后使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean 进行归一化。
    • 适用场景:适用于需要将数据转换为标准正态分布的情况,如在机器学习中作为特征输入。
  1. 局部归一化(Local Normalization)
    • 目标:针对点云中的每个局部区域进行归一化。
    • 方法:对于每个点或其邻域,计算局部特征(如局部平均值、局部标准差),并进行局部尺度的归一化。
    • 适用场景:适用于处理非均匀分布的点云数据,特别是在局部特征分析中。
  1. 最大最小值归一化(Min-Max Normalization)
    • 目标:将每个维度上的数据缩放到一个指定的范围,通常是 [0, 1]。
    • 方法:类似于尺度归一化,但更强调每个维度上的最小值和最大值。
    • 适用场景:适用于需要将数据映射到固定范围的情况,特别是当数据范围已知时。
  1. Z-Score 标准化(Z-Score Standardization)
    • 目标:将数据转换为具有零均值和单位方差的形式。
    • 方法:使用 normalized_value=value−meanstd_devnormalized_value=std_devvalue−mean,其中 mean 是均值,std_dev 是标准差。
    • 适用场景:适用于需要标准化数据分布的情况,尤其是在统计分析和机器学习中。

每种方法都有其特定的适用场景,选择哪种方法取决于具体的应用需求和数据的特点。在实际应用中,可能需要结合多种方法来达到最佳效果。


点云数据归一化是一种常见的预处理步骤,用于将点云数据转换到一个统一的尺度或范围,从而使数据更适合后续处理。归一化方法的选择取决于具体的应用场景和数据特点。以下是一些常用的点云数据归一化方法:

尺度归一化(Scaling Normalization):
目标:将点云数据的坐标缩放到一个特定的范围,通常为 [0, 1] 或 [-1, 1]。
方法:首先找到点云数据在每个维度上的最大值和最小值,然后对每个坐标值进行缩放。公式为 
normalized_value
=
value
−
min_value
max_value
−
min_value
normalized_value= 
max_value−min_value
value−min_value
​
 。
适用场景:适用于需要将数据映射到固定范围的情况,如神经网络输入。
中心化(Centralization):
目标:将点云数据平移到原点附近。
方法:计算所有点坐标的平均值(质心),然后从每个点坐标中减去这个平均值。
适用场景:适用于需要消除点云数据偏移的情况,例如在进行旋转或平移变换之前。
单位化(Unit Scaling):
目标:将点云数据的整体尺寸缩放为单位大小。
方法:计算点云数据的最大边界框的对角线长度或外接球的直径,并将所有点乘以一个系数,使得最大的距离变为 1。
适用场景:适用于需要将点云大小标准化的情况,例如在比较不同大小的点云时。
统计归一化(Statistical Normalization):
目标:根据点云数据的统计特性(如均值、标准差)进行归一化。
方法:计算每个维度上的均值和标准差,然后使用 
normalized_value
=
value
−
mean
std_dev
normalized_value= 
std_dev
value−mean
​
  进行归一化。
适用场景:适用于需要将数据转换为标准正态分布的情况,如在机器学习中作为特征输入。
局部归一化(Local Normalization):
目标:针对点云中的每个局部区域进行归一化。
方法:对于每个点或其邻域,计算局部特征(如局部平均值、局部标准差),并进行局部尺度的归一化。
适用场景:适用于处理非均匀分布的点云数据,特别是在局部特征分析中。
最大最小值归一化(Min-Max Normalization):
目标:将每个维度上的数据缩放到一个指定的范围,通常是 [0, 1]。
方法:类似于尺度归一化,但更强调每个维度上的最小值和最大值。
适用场景:适用于需要将数据映射到固定范围的情况,特别是当数据范围已知时。
Z-Score 标准化(Z-Score Standardization):
目标:将数据转换为具有零均值和单位方差的形式。
方法:使用 
normalized_value
=
value
−
mean
std_dev
normalized_value= 
std_dev
value−mean
​
 ,其中 mean 是均值,std_dev 是标准差。
适用场景:适用于需要标准化数据分布的情况,尤其是在统计分析和机器学习中。
每种方法都有其特定的适用场景,选择哪种方法取决于具体的应用需求和数据的特点。在实际应用中,可能需要结合多种方法来达到最佳效果。


举个栗子

归一化类型说明

  1. Norm_minmax:将数据线性缩放到 [min, max] 之间,其中 min 对应之前坐标的最小值,max 对应之前坐标的最大值。
  2. Norm_L2:将数据缩放到单位球内,即每个点的 L2 范数为 1,此时 minmax 值自动设置为 -11(无法修改)。
  3. Norm_L1:将数据缩放到单位立方体内,即每个点的 L1 范数为 1,此时 minmax 值同样自动设置为 -11(无法修改)。

++++++++++++++++++++++++++

直线度算法

直线度算法,抓盒子边缘直线,看弯折度的情况的

对于检测盒子边缘的直线度和弯折度,可以使用以下步骤:

  1. 图像获取:使用相机或传感器获取盒子边缘的图像。
  2. 边缘检测:应用边缘检测算法(如 Canny 边缘检测)来识别图像中的边缘。
  3. 直线拟合:使用直线拟合算法(如霍夫变换)来拟合边缘上的直线。可以检测到多个直线并存储它们的参数。
  4. 直线度计算:计算拟合直线的质量,通常通过计算直线与实际边缘之间的距离来评估。如果距离超出设定的阈值,则认为边缘存在弯折。
  5. 弯折度评估:根据拟合直线的参数,评估弯折度。这可以通过计算每个直线段与其他直线段的角度变化来完成。
  6. 结果分析:输出直线度和弯折度的结果,并进行必要的调整或警告。

http://www.kler.cn/a/465284.html

相关文章:

  • MySQL 索引分类及区别与特点
  • 通往O1开源之路
  • SQL把字符串按逗号分割成记录
  • CSS学习记录21
  • 数据库进阶教程之DDL语句(万字详解)
  • QEMU网络配置简介
  • Unity Shader:从基础使用到动画实现全解析
  • 二层交换机和三层交换机
  • Vue3+Vue-router(history+路由前缀)+Vite 下本地刷新找不到页面问题
  • 钉钉h5微应用引用钉钉文件地址
  • 解决MYSQL Table has no partition for value from column_list的问题
  • jenkins修改端口以及开机自启
  • Kafka和Jenkins实现EMR上PySpark和EC2上Airflow的CI/CD
  • tcpdump的常见方法
  • Matlab中文注释乱码
  • 力扣编程从0-1
  • Elasticsearch JavaRestClient版
  • SQL 中索引分析,查询表索引
  • 滑雪护目镜欧盟CE认证EN 174测试标准
  • 在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分
  • Linux下卸载与安装JDK
  • 流体神经网络简介
  • 使用爬虫代理做采集数据时,要注意什么?
  • 【84键矮轴无线键盘】个人使用经历
  • 使用Sass封装倍图混合器
  • Matlab全局变量用法及其实例分析