3D拟合测量水杯半径

发布时间:2026/8/20 16:09:25

3D拟合测量水杯半径
前言示例采用的素材是2.5D图像该类型图形相对于2D图像多了深度信息。然而相对于3D点云而言2.5D图像是单视角的信息相对残缺。它只能获取物体表面的相对深度轮廓信息无法像3D点云那样提供完整的三维体积数据。维度2D 图像 (二维)2.5D 图像 (伪三维)3D 点云/模型 (真三维)数据结构仅包含平面像素信息X, Y二维平面 相对深度信息X, Y, Z’包含海量离散三维空间坐标X, Y, Z空间信息无深度信息存在透视变形单视角深度轮廓无法获取物体背面或遮挡面全维度空间信息无透视变形支持任意角度旋转核心特点技术成熟数据量小处理极快兼顾深度感知与较低算力成本适合表面形貌分析信息最完整但数据量庞大算法复杂算力要求高典型应用场景传统外观检测如颜色、字符识别、平面尺寸测量、常规OCR、人脸识别、文档扫描工业缺陷检测高反光/透明物体表面的划痕、凹凸检测、游戏开发伪3D场景、数据可视化2.5D立体地图、大屏展示自动驾驶与机器人环境感知、SLAM导航、逆向工程实物扫描建模、精密机械臂抓取、医疗影像重建、BIM建筑模型技术局限性无法区分物体前后空间关系易受光照和背景干扰旋转时会出现“信息盲区”背面细节丢失无法提供真实的三维体积数据硬件设备如3D相机、激光扫描仪成本较高点云处理与深度学习算法的开发门槛高2.5D图像转化为对象2.5D图像观察可见:相对于3D点云对象而言2.5D对象旋转时会其出现“信息盲区”背面细节丢失无法提供真实的三维体积数据。而3D点云在旋转时是可以提供完成的体积信息。如下3D点云1目的。测量水杯的半径如图所示2原理。对3D 点云对象 进行圆柱体拟合获取拟合后的半径。3注意事项。在Halcon中使用fit_primitives_object_model_3d进行圆柱体拟合时输出的primitive_parameter包含以下7个参数‌参数构成‌​ -轴线方向向量‌3个数值(a, b, c)描述圆柱体轴线的空间方向满足归一化条件a² b² c² 1. -轴线上基准点坐标‌3个数值(x0, y0, z0)表示轴线上的一个参考点通常靠近点云的重心. - ‌圆柱半径‌1个数值R单位为点云的原始坐标系单位如毫米数学验证‌圆柱表面点需满足方程(x−xp)2(y−yp)2(z−zp)2−[(x−xp)a(y−yp)b(z−zp)c]2R \sqrt{(x-x_p)^2(y-y_p)^2(z-z_p)^2-[(x-x_p)a(y-y_p)b(z-z_p)c]^2}R(x−xp​)2(y−yp​)2(z−zp​)2−[(x−xp​)a(y−yp​)b(z−zp​)c]2​R其中(x_p, y_p, z_p)为轴线上任意一点在Halcon中使用fit_primitives_object_model_3d对三维点云进行球体拟合时输出的primitive_parameter包含以下4个关键参数参数构成‌‌球心坐标‌包含3个数值(x, y, z)表示拟合球体的中心点在三维空间中的位置‌球体半径‌单个数值R单位为点云的原始坐标系单位如毫米或米参数验证方法‌‌数学验证‌球面点需满足方程(x−x0)2(y−y0)2(z−z0)2R2(x-x_0)^2(y-y_0)^2(z-z_0)^2R^2(x−x0​)2(y−y0​)2(z−z0​)2R2其中(x_0, y_0, z_0)为球心坐标与其他几何体的区别‌‌圆柱体‌输出7个参数轴线方向、基准点、半径68‌平面‌输出4个参数法向量、偏移量4代码。*参考案例库:fit_primitives_object_model_3d.hdev * *********************************************************************** * 将输入的 2.5D 图像拟合成圆柱体并计算显示拟合后的圆柱体半径 * 2.5D 图像在常规二维图像基础上叠加?**高度或深度数据**?形成半三维表达如灰度值隐含高度信息或直接存储深度通道** * 每个像素点除了常规的灰度值/颜色值,还额外记录了该点的Z Axis坐标值 * * 2.5D 图像可分解为三个通道real类型的图像这三个通道分别存储X,Y,Z轴的浮点型物理坐标值图像类型是real。 * * *********************************************************************** dev_update_off () dev_close_window () * Input: 2.5D image * tif图像是HALCON支持的?高精度图像格式专门用于存储包含复杂信息的图像数据如3D深度图、工业相机采集的点云数据等** * 一般由结构光相机3D扫描仪提供 read_image (XYZ, 3d_machine_vision/segmentation/3d_primitives_xyz_02.tif) dev_open_window_fit_image (XYZ, 0, 0, -1, -1, WindowHandle) set_display_font (WindowHandle, 16, mono, true, false) * Access to (x-, y-, z-)coordinates * XYZ图像的三个通道存储的是浮点型物理坐标值图像类型是real。 * 分别存储X Axis,Y Axis,Z Axis浮点型实际物理坐标值 * 调用get_grayval输入目标像素的RowColumn即可读取该像素点对应的浮点型物理坐标值 * x轴的坐标 access_channel (XYZ, X, 1) * y轴的坐标 access_channel (XYZ, Y, 2) * 提取第三通道作为深度 access_channel (XYZ, Z, 3) * Segment cylinder manually threshold (Z, Region, 0.0, 0.83) reduce_domain (X, Region, XTmp) dev_display (Z) dev_set_draw (margin) dev_set_line_width (2) dev_set_color (green) dev_display (Region) disp_message (WindowHandle, Segment cylinder with a simple threshold, window, 12, 12, black, true) disp_continue_message (WindowHandle, black, true) stop () * xyz_to_object_model_3d (XTmp, Y, Z, ObjectModel3DID) * 指定 3D 对象的原始类型拟合算法输出类型 ParFitting : [primitive_type,fitting_algorithm,output_xyz_mapping] ValFitting : [cylinder,least_squares_huber,true] * 对 原始对象进行 3D 拟合 fit_primitives_object_model_3d (ObjectModel3DID, ParFitting, ValFitting, ObjectModel3DOutID) * Clear the object model that is no longer used clear_object_model_3d (ObjectModel3DID) * Display the result of the fitting dev_display (Z) dev_set_draw (fill) dev_display_fitting_results (RegionCylinder, RegionSphere, RegionPlane, RegionNone, ObjectModel3DOutID, WindowHandle, []) dev_update_on () clear_object_model_3d (ObjectModel3DOutID)本地函数dev_display_fitting_results* This procedure displays the results of a fitting operation. * Additionally to the primitive regions, the radius of * cylinders and spheres is displayed. * The colors can be specified with the parameter Colors * in the following manner: * Color[0] is used for objects which could not be fitted * Color[1] is used for cylinders用于圆柱体 * Color[2] is used for spheres用于球体 * Color[3] is used for planes用于平面 * if (Colors []) Colors : [dim gray,forest green,red,slate blue] endif NumNone : 0 * 圆柱体数量 NumCylinders : 0 * 球体数量 NumSpheres : 0 * 平面数量 NumPlanes : 0 for Index : 0 to |ObjectModel3DOutID| - 1 by 1 object_model_3d_to_xyz (XTmp, YTmp, ZTmp, ObjectModel3DOutID[Index], from_xyz_map, [], []) get_domain (XTmp, DomainTmp) * 是否存在原始数据 get_object_model_3d_params (ObjectModel3DOutID[Index], has_primitive_data, ParamValue) if (ParamValue true) get_object_model_3d_params (ObjectModel3DOutID[Index], primitive_parameter, GenParamValuesP) get_object_model_3d_params (ObjectModel3DOutID[Index], primitive_type, ParamValue) if (ParamValue cylinder) if (NumCylinders 0) *-1:表示复制从索引开始剩余的所有对象注意这里是浅复制 copy_obj (DomainTmp, RegionCylinder, 1, -1) * 从拟合的原始数据中获取拟合的圆柱体半径值 * GenParamValuesP7个值分别是 * 圆柱体中心点的 X、Y、Z 坐标圆柱体主轴的单位方向向量圆柱体的半径 RadiusCylinder : GenParamValuesP[6] else concat_obj (RegionCylinder, DomainTmp, RegionCylinder) RadiusCylinder : [RadiusCylinder,GenParamValuesP[6]] endif NumCylinders : NumCylinders 1 elseif (ParamValue sphere) * 球体情况 if (NumSpheres 0) copy_obj (DomainTmp, RegionSphere, 1, -1) RadiusSphere : GenParamValuesP[3] else concat_obj (RegionSphere, DomainTmp, RegionSphere) RadiusSphere : [RadiusSphere,GenParamValuesP[3]] endif NumSpheres : NumSpheres 1 else * 平面情况 if (NumPlanes 0) copy_obj (DomainTmp, RegionPlane, 1, -1) else concat_obj (RegionPlane, DomainTmp, RegionPlane) endif NumPlanes : NumPlanes 1 endif else if (NumNone 0) copy_obj (DomainTmp, RegionNone, 1, -1) else concat_obj (RegionNone, DomainTmp, RegionNone) endif NumNone : NumNone 1 endif endfor * NumColors : |Colors| if (NumNone 0) dev_set_color (Colors[0 % NumColors]) dev_display (RegionNone) endif if (NumCylinders 0) dev_set_color (Colors[1 % NumColors]) dev_display (RegionCylinder) endif if (NumSpheres 0) dev_set_color (Colors[2 % NumColors]) dev_display (RegionSphere) endif if (NumPlanes 0) dev_set_color (Colors[3 % NumColors]) dev_display (RegionPlane) endif disp_message (WindowHandle, 3D Fitting, window, -1, -1, black, true) Message : Cylinders: NumCylinders Message[1] : Spheres: NumSpheres Message[2] : Planes: NumPlanes Message[3] : Undefined: NumNone disp_message (WindowHandle, Message, window, 40, 12, black, true) if (NumCylinders 0) * Display radius for each cylinder area_center (RegionCylinder, Area, Row, Column) for Index : 0 to NumCylinders - 1 by 1 Radius : int(RadiusCylinder[Index] * 1000) disp_message (WindowHandle, Cylinder\nr Radius mm, image, Row[Index], Column[Index], white, false) endfor endif if (NumSpheres 0) * Display radius for each cylinder sphere area_center (RegionSphere, Area, Row, Column) for Index : 0 to NumSpheres - 1 by 1 Radius : int(RadiusSphere[Index] * 1000) disp_message (WindowHandle, Sphere\nr Radius mm, image, Row[Index], Column[Index], white, false) endfor endif return ()

相关新闻

不写一行代码:用开源Dify工作流模板,2小时把AI想法变成上线应用

不写一行代码:用开源Dify工作流模板,2小时把AI想法变成上线应用

2026/8/20 16:09:25

不写一行代码:用开源Dify工作流模板,2小时把AI想法变成上线应用 【免费下载链接】Awesome-Dify-Workflow 分享一些好用的 Dify DSL 工作流程,自用、学习两相宜。 Sharing some Dify workflows. 项目地址: https://gitcode.com/GitHub_Trend…

Ant Design Vue中日期插件国际化显示错乱:使用 Ant Design Vue的a-date-picker插件,设置了中文格式,但依旧显示的为中英文混乱效果,如何解决?

Ant Design Vue中日期插件国际化显示错乱:使用 Ant Design Vue的a-date-picker插件,设置了中文格式,但依旧显示的为中英文混乱效果,如何解决?

2026/8/20 15:59:24

🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者&…

快手无水印下载怎么实现?KS-Downloader 快速上手与完整使用指南

快手无水印下载怎么实现?KS-Downloader 快速上手与完整使用指南

2026/8/20 15:59:24

快手无水印下载怎么实现?KS-Downloader 快速上手与完整使用指南 【免费下载链接】KS-Downloader 快手(KuaiShou)作品视频/图片下载工具 项目地址: https://gitcode.com/gh_mirrors/ks/KS-Downloader 你有没有过这样的瞬间:…

061、量化感知训练(QAT)的IR表示

061、量化感知训练(QAT)的IR表示

2026/8/20 17:09:27

061、量化感知训练(QAT)的IR表示 从一次模型部署翻车说起 去年有个项目,把MobileNetV3量化部署到某款AIoT芯片上。FP32精度92%,INT8量化后直接掉到78%。团队里有人提议“直接上QAT吧”,结果训练完导出模型,芯片编译器报了一堆“unsupported operation”。我打开导出的M…

用 erlcloud 调用 AWS Lambda:函数部署与调用的完整教程

用 erlcloud 调用 AWS Lambda:函数部署与调用的完整教程

2026/8/20 17:09:27

用 erlcloud 调用 AWS Lambda:函数部署与调用的完整教程 【免费下载链接】erlcloud AWS APIs library for Erlang (Amazon EC2, S3, SQS, DDB, ELB and etc) 项目地址: https://gitcode.com/gh_mirrors/er/erlcloud 在 Erlang 生态中,erlcloud 是…

060、Enzyme自动微分框架与MLIR的集成

060、Enzyme自动微分框架与MLIR的集成

2026/8/20 17:09:27

060、Enzyme自动微分框架与MLIR的集成 一、一个让我熬夜到凌晨三点的梯度问题 去年秋天,我在给一个边缘计算设备写模型推理加速器。模型里有个自定义算子,用C++手写了前向,反向梯度死活算不对。手动推导链式法则?矩阵维度一多,脑子就炸。用PyTorch的autograd?算子太底层…

059、自动微分(AutoDiff)在MLIR中的表示

059、自动微分(AutoDiff)在MLIR中的表示

2026/8/20 17:09:27

059、自动微分(AutoDiff)在MLIR中的表示 上周调试一个自定义算子反向传播时,发现MLIR生成的梯度计算图里多了一个莫名其妙的linalg.generic操作,把输入张量原地改写了。查了两天,最后定位到是自动微分pass在lowering过程中把某个中间变量的梯度累加逻辑错误地折叠进了前向…

免费神器强制调整窗口大小,拖不动的窗口一招变听话

免费神器强制调整窗口大小,拖不动的窗口一招变听话

2026/8/20 17:09:27

免费神器强制调整窗口大小,拖不动的窗口一招变听话 【免费下载链接】WindowResizer 一个可以强制调整应用程序窗口大小的工具 项目地址: https://gitcode.com/gh_mirrors/wi/WindowResizer 周一早上八点半,财务部最资深的会计周姐准时坐到工位上。…

同步任务在凌晨3点崩了之后:SeaTunnel 与 Flink 的选型复盘实录

同步任务在凌晨3点崩了之后:SeaTunnel 与 Flink 的选型复盘实录

2026/8/20 16:59:27

同步任务在凌晨3点崩了之后:SeaTunnel 与 Flink 的选型复盘实录 【免费下载链接】seatunnel SeaTunnel is a multimodal, high-performance, distributed, massive data integration tool. 项目地址: https://gitcode.com/GitHub_Trending/se/seatunnel 如果…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/19 3:36:59

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/19 9:17:18

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/19 8:02:16

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换

2026/8/20 0:08:45

微信聊天记录如何完整导出?WeChatMsg备份指南:HTML/Word/CSV一键转换 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com…

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒

2026/8/20 0:08:45

B站缓存m4s打不开?m4s-converter无损合成MP4,实测1.46GB仅5秒 【免费下载链接】m4s-converter 一个跨平台小工具,将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 判断你是否…

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印

2026/8/20 0:08:45

告别白模时代:Blender3mfFormat 让 3MF 导入导出一次跑通设计到打印 【免费下载链接】Blender3mfFormat Blender add-on to import/export 3MF files 项目地址: https://gitcode.com/gh_mirrors/bl/Blender3mfFormat 按 3MF 官方规范的字面意思,一…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…