{"id":20856305,"url":"https://github.com/hide-in-code/fusion","last_synced_at":"2026-02-15T21:34:51.949Z","repository":{"id":46078674,"uuid":"375211696","full_name":"hide-in-code/fusion","owner":"hide-in-code","description":"3D点云融合原理讲解以及代码演示，旨在讲解3D2D融合显示的原理","archived":false,"fork":false,"pushed_at":"2021-11-16T01:28:19.000Z","size":3932,"stargazers_count":31,"open_issues_count":0,"forks_count":4,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-10-23T09:54:16.967Z","etag":null,"topics":["3d2d","fusion","pcd","pcl"],"latest_commit_sha":null,"homepage":"","language":"Makefile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hide-in-code.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2021-06-09T03:15:13.000Z","updated_at":"2025-09-16T09:21:02.000Z","dependencies_parsed_at":"2022-09-23T07:01:25.998Z","dependency_job_id":null,"html_url":"https://github.com/hide-in-code/fusion","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/hide-in-code/fusion","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hide-in-code%2Ffusion","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hide-in-code%2Ffusion/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hide-in-code%2Ffusion/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hide-in-code%2Ffusion/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hide-in-code","download_url":"https://codeload.github.com/hide-in-code/fusion/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hide-in-code%2Ffusion/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29490352,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-15T19:29:10.908Z","status":"ssl_error","status_checked_at":"2026-02-15T19:29:10.419Z","response_time":118,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d2d","fusion","pcd","pcl"],"created_at":"2024-11-18T04:30:02.975Z","updated_at":"2026-02-15T21:34:51.923Z","avatar_url":"https://github.com/hide-in-code.png","language":"Makefile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 点云融合原理讲解  \n## 点云的基本格式\n![点云格式](docs/pointcloud_format.png)\n\n\t点云文件无论如何千变万化，核心数据都是x，y，z三个坐标值\n\n## 数学基础\n1.矩阵运算法则。假如有如下两个矩阵A和B，AB为A和B的矩阵相乘结果，则:  \n![点云格式](docs/matA.svg) \n \n![点云格式](docs/matB.svg)  \n\n![点云格式](docs/matC.svg)   \n\n\t\n\t矩阵相乘就是左矩阵的每一行和右矩阵的每一列对应相乘再求和。矩阵能相乘的条件就是左矩阵的列数要和右矩阵行数相等。\n\t\n2.三角函数的基本性质:  \n![点云格式](docs/sanjiao.png)   \n几个重要的结论：\n\n\tsin(α + π/2) = cos(α)\n\tcos(α + π/2) = -sin(α)\n\tsin(α - π) = -sin(α)\n\tcos(α - π) = cos(α)\n\tsin(α+β)=sin(α)cos(β)+cos(α)sin(β)\n\tcos(α+β)=cos(α)cos(β)-sin(α)sin(β) \n\t\n## 平移和旋转理论基础  \n一、仅仅有平移的时候  \n假设三维空间内存在某个点P1(X1, Y1, Z1)，该点发生平移之后到了P2(X2, Y2, Z2)，在每一个方向上发生的平移分量分别为dx, dy, dz，则容易理解，有以下两个矩阵的关系成立：\nA = [X1, Y1, Z1, 1],  B = [X2, Y2, Z2, 1]\n\n![点云格式](docs/translation.png)   \n二、仅仅有旋转的时候\n在平面直角坐标系里面，假设有一点A(x, y) 绕原点B逆时针旋转β度，得到C点\n\n![点云格式](docs/rotate.png)   \n\n1.设A点旋转前的角度为δ，则旋转(逆时针)到C点后角度为δ+β  \n2.求A，B两点的距离：dist1=|AB|=y/sin(δ)=x/cos(δ)  \n3.求C，B两点的距离：dist2=|CB|=d/sin(δ+β)=c/cos(δ+β)  \n4.显然dist1=dist2，设dist1=r所以：   \n\n    r=x/cos(δ)=y/sin(δ)=d/sin(δ+β)=c/cos(δ+β) \n\n5.由三角函数两角和差公式知：\n\n\t sin(δ+β)=sin(δ)cos(β)+cos(δ)sin(β)\n\t cos(δ+β)=cos(δ)cos(β)-sin(δ)sin(β) \n\n所以得出：   \n\n\tc=rcos(δ+β)=rcos(δ)cos(β)-rsin(δ)sin(β)=xcos(β)-ysin(β)\n   \td=rsin(δ+β)=rsin(δ)cos(β)+rcos(δ)sin(β)=ycos(β)+xsin(β) \n   \t\n\u003e上述结论的β角是一个大于0度的角， 为了避免欧拉角带来万向锁死锁的问题，需要将旋转角度做约束(β限定在(-pi, pi]区间内)，具体关于万向锁的问题可以参考：https://zhuanlan.zhihu.com/p/346718090\n\n将β限定在(-pi, pi]区间内，根据sin(),cos()的奇偶性，sin(-β)=-sin(β),cos(-β)=cos(β)，则：\t\n\n\tc=xcos(β)+ysin(β)\n\td=ycos(β)-xsin(β)\n\n即：\n\n![点云格式](docs/rotateMat.png)   \n\n为了计算方便，我们将上述结果做变形，并将二维平面推广到3维，以及考虑三个轴的旋转问题，得到如下的结论：  \na)平移\n\n![点云格式](docs/transMat.png)  \nb) 旋转\n\n![点云格式](docs/roateMat2.png)   \n\nR矩阵即为旋转矩阵，具体为三个方向的旋转矩阵的乘积：  \n\n![点云格式](docs/R.png)   \n\n三、综合来看，某个点在三维世界里的平移旋转可以拆分为这样一个过程：该3D点先进行旋转操作，再进行平移操作(这里说的旋转，指的是绕原点的旋转，所以并不能做先平移再旋转的操作，旋转分量会改变)。如果将平移矩阵记做T，将旋转矩阵记做R，则这个过程可以表示为：\n\n\tP2 = T * R * P1\n\tT * R的结果就是我们日常所说的外部参数\n\t\n## 点云融合原理\n自动驾驶点云采集设备：\n\n![点云格式](docs/car.png)\n原理基本：\n\n![点云格式](docs/touying.png)\n\n点云融合(投影)，基本原理是将3D世界坐标系下的点投影到2D图片上，具体拆分为以下几个步骤：  \na)因为雷达和相机在物理摆放的时候不能做到位置上和方向上的精确重叠，所以要将雷达采集到的数据做一个平移旋转(刚体)变换，这个用于描述冲雷达到相机坐标系的变换的矩阵称作外部参数，外部参数描述了相机将以何种方式去看雷达采集到的3D点，也体现了相机和雷达之间的相对位置关系。具体推到原理在上一节已经说明。  \nb)相机看到的3D点通过镜头由小孔成像原理投影到图片上。这个小孔成像的变化过程，也可以由一个矩阵表明，这个矩阵是由相机本身决定的，相机的焦距，成像的图片尺寸等等均会影响这个变化过程。具体可以百度\"张氏标定法\"，里面详细介绍了这个过程。\n\n[张氏标定法](https://www.cnblogs.com/wangguchangqing/p/8335131.html)\n\n\u003e这里提到的小孔成像的变换矩阵即是内部参数\n\nK矩阵之和相机自身的特性相关\n\n![点云格式](docs/K.png)  \nfx，fy 表示将相机的焦距𝑓变换为在x,y方向上像素度量表示；cx, cy 表示成像光心坐标点，和成像图像大小有关系。  \n\nc)由于相机的制造工艺不能完全符合理论值的预期，所以投影到图片上的点会发生偏移，为了修正这个问题，引入了畸变参数，来将投影点修正到理论范围内。畸变参数同样是由相机本身决定的，在计算内参的时候一般会附带给出。去除畸变的实质就是对像素点坐标做加加减减的线性计算。\n\n## 总结：  \n\n![点云格式](docs/Res.png)\n\n## 点云融合实例代码讲解  \n1.云融合示例  \n2.3D框投影示例    \n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhide-in-code%2Ffusion","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhide-in-code%2Ffusion","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhide-in-code%2Ffusion/lists"}