halcon三维点云数据处理(十)locate_cylinder_3d
目录
- 一、locate_cylinder_3d例程代码
- 二、gen_binocular_rectification_map函数
- 三、binocular_disparity函数
- 四、自定义函数select_best_candidates
- 五、自定义函数remove_shadowed_regions
一、locate_cylinder_3d例程代码
1、读取或者创建3D形状模型,
2、根据双目相机参数和图像获得校正后图像对的视差图。
3、
gen_cam_par_area_scan_division (0.00855613, -2579.17, 5.99979e-006, 6e-006, 399.681, 232.327, 752, 480, CamParamMatching)
gen_cam_par_area_scan_division (0.0121469, -2514.3, 9.30281e-006, 9.3e-006, 272.773, 273.689, 640, 512, CamParam1)
gen_cam_par_area_scan_division (0.0121592, -2687.76, 9.30085e-006, 9.3e-006, 302.665, 263.738, 640, 512, CamParam2)
create_pose (0.202198, 0.00177953, 0.0376427, 0.325733, 342.295, 359.167, 'Rp+T', 'gba', 'point', RelPose)
gen_binocular_rectification_map (Map1, Map2, CamParam1, CamParam2, RelPose, 1, 'viewing_direction', 'bilinear', CamParamRect1, CamParamRect2, CamPoseRect1, CamPoseRect2, RelPoseRect)
*
file_exists ('cylinder.sm3', FileExists)
if (FileExists)* Load the model from fileread_shape_model_3d ('cylinder.sm3', ShapeModel3DID)
else* Recreate the model from the DXF fileread_object_model_3d ('cylinder.dxf', 'mm', [], [], ObjectModel3DID, DxfStatus)prepare_object_model_3d (ObjectModel3DID, 'shape_based_matching_3d', 'true', [], [])create_shape_model_3d (ObjectModel3DID, CamParamMatching, rad(90), 0, 0, 'gba', 0, 0, 0, rad(45), 0, rad(360), 0.3, 0.45, 10, 'num_levels', 5, ShapeModel3DID)write_shape_model_3d (ShapeModel3DID, 'cylinder.sm3')
endif
*
for Index := 1 to 15 by 1* * emphasize() enhances the texture on the cylinders surfaceread_image (Image1, Path + 'stereo_left_' + Index$'02')emphasize (Image1, ImageEmphasize1, 5, 5, 2)map_image (ImageEmphasize1, Map1, ImageMapped1)read_image (Image2, Path + 'stereo_right_' + Index$'02')emphasize (Image2, ImageEmphasize2, 5, 5, 2)map_image (ImageEmphasize2, Map2, ImageMapped2)* * the mask width and height must be (approximately) set according to the size* of the pattern projected onto the setupbinocular_disparity (ImageMapped2, ImageMapped1, Disparity, Score, 'ncc', 7, 7, 0, -20, 140, 1, 0.7, 'left_right_check', 'none')select_best_candidates (Disparity, TopMost)remove_shadowed_regions (Disparity, 0.01)* * display height map and highest object extractedclear_window (WindowHandleL)dev_set_window (WindowHandle)dev_clear_window ()dev_display (ImageMapped2)dev_display (Disparity)wait_seconds (0.5)dev_display (TopMost)dev_display (Disparity)wait_seconds (0.5)* * determine exact 3D pose of highest objectdev_set_window (WindowHandleL)read_image (Image, Path + 'closeup_' + Index$'02')dev_display (Image)find_shape_model_3d (Image, ShapeModel3DID, 0.8, 0.7, [0, 2], [], [], Pose, CovPose, Score_CTRL)if (|Score_CTRL| != 0)dev_set_color ('green')display_match_pose (ShapeModel3DID, Pose, WindowHandleL)elsedisp_message (WindowHandleL, ' No match found ', 'window', 12, 12, 'black', 'true')endif* if (Index != 15)disp_continue_message (WindowHandleL, 'black', 'true')endifstop ()
endfor
disp_message (WindowHandleL, 'Program finished \nPress \'Run\' to clear the shape model', 'window', 1, 1, 'black', 'true')
stop ()
dev_close_window ()
二、gen_binocular_rectification_map函数
生成变换映射,描述双目相机对图像到公共校正图像平面的映射。
gen_binocular_rectification_map( : Map1, Map2 : CamParam1, CamParam2, RelPose, SubSampling, Method, MapType : CamParamRect1, CamParamRect2, CamPoseRect1, CamPoseRect2, RelPoseRect)
三、binocular_disparity函数
使用相关技术计算校正图像对的视差
binocular_disparity(ImageRect1, ImageRect2 : Disparity, Score : Method, MaskWidth, MaskHeight, TextureThresh, MinDisparity, MaxDisparity, NumLevels, ScoreThresh, Filter, SubDisparity : )
四、自定义函数select_best_candidates
下面这段代码的功能是选取最上层的一个圆柱,感觉非常经典,逐句理解一下:
full_domain 将图像的域(ROI)扩大到最大。
scale_image_max 灰度值范围(minimum,maximum ),扩展到范围是(0 ,255)。
regiongrowing_n 对多通道图像使用区域生长来分割图像
intensity 计算灰度值的均值和偏差。
select_gray 根据灰度值特征选择区域。
select_shape借助形状特征选择区域。
min_max_gray确定区域内的最小和最大灰度值。
tuple_sort_index 对Tuple中的所有元素按升序排序
select_obj 选取图像
*
full_domain (Disparity, DisparityFull)
scale_image_max (DisparityFull, ImageScaleMax2)
gray_dilation_shape (ImageScaleMax2, ImageMax, 3, 3, 'octagon')
*
*
regiongrowing_n (ImageMax, cylinders, '2-norm', 0, 5, 200)
intensity (cylinders, ImageScaleMax2, Mean1, Deviation1)
tuple_max (Mean1, MaxVal)
select_gray (cylinders, ImageScaleMax2, SelectedRegions, 'mean', 'and', MaxVal / 2, MaxVal + 1)
select_shape (SelectedRegions, SelectedRegions, ['area', 'rectangularity'], 'and', [7000, 0.65], [25000, 1.0])
intensity (SelectedRegions, ImageScaleMax2, Mean, Deviation)
*
min_max_gray (SelectedRegions, ImageScaleMax2, 0, Min, Max, Range)
tuple_sort_index (Max, Indices)
select_obj (SelectedRegions, TopMost, Indices[|Max| - 1] + 1)
*
return ()
五、自定义函数remove_shadowed_regions
对于每个3D相机,遮挡和阴影都会产生非常高视差的小区域,这将被理解为靠近相机的物体,为了提高结果的质量,我们删除了这些区域,把高视差区域灰度设为0。
scale_image_max (Disparity, ImageScaleMax)
gray_histo (ImageScaleMax, ImageScaleMax, AbsoluteHisto, RelativeHisto)
Percent := RelativeHisto[255]
i := 254
while (Percent < Threshold)Percent := RelativeHisto[i] + Percenti := i - 1
endwhile
threshold (ImageScaleMax, Region, i, 255)
overpaint_region (Disparity, Region, 0.0, 'fill')
return ()
相关文章:
halcon三维点云数据处理(十)locate_cylinder_3d
目录 一、locate_cylinder_3d例程代码二、gen_binocular_rectification_map函数三、binocular_disparity函数四、自定义函数select_best_candidates五、自定义函数remove_shadowed_regions 一、locate_cylinder_3d例程代码 1、读取或者创建3D形状模型, 2、根据双目…...
vue(2,3), react (16及以上)开发者工具资源
在前端开发的广阔领域中,Vue.js 和 React.js 作为两大主流框架,各自拥有庞大的用户群体和丰富的生态系统。为了帮助开发者更高效地进行调试和开发,Vue Devtools 和 React 开发者工具应运而生,成为这两个框架不可或缺的辅助工具。本…...
2025年华为OD上机考试真题(Java)——整数对最小和
题目: 给定两个整数数组array1、array2,数组元素按升序排列。假设从array1、array2中分别取出一个元素可构成一对元素,现在需要取出k对元素,并对取出的所有元素求和,计算和的最小值。 注意:两对元素如果对应…...
进程间通信——网络通信——UDP
进程间通信(分类):网络通信、无名管道、有名管道、信号、消息队列、共享内存、信号量集 OSI七层模型:(理论模型) 应用层 : 要传输的数据信息,如文件传输,电子邮件等 表示层 : 数…...
【我的 PWN 学习手札】IO_FILE 之 FSOP
FSOP:File Stream Oriented Programming 通过劫持 _IO_list_all 指向伪造的 _IO_FILE_plus,进而调用fake IO_FILE 结构体对象中被伪造的vtable指向的恶意函数。 目录 前言 一、glibc-exit函数浅析 二、FSOP 三、Largebin attack FSOP (…...
新兴的开源 AI Agent 智能体全景技术栈
新兴的开源 AI Agent 智能体全景技术栈 LLMs:开源大模型嵌入模型:开源嵌入模型模型的访问和部署:Ollama数据存储和检索:PostgreSQL, pgvector 和 pgai后端:FastAPI前端:NextJS缺失的一环:评估和…...
统计学习方法(第二版) 概率分布学习
本文主要介绍机器学习的概率分布,帮助后续的理解。 定义直接从书上搬的想自己写,但没有定义准确,还浪费事件,作为个人笔记,遇到速查。 目录 一、二点分布(0-1分布、伯努利分布) 二、二项分布…...
淺談Cocos2djs逆向
前言 簡單聊一下cocos2djs手遊的逆向,有任何相關想法歡迎和我討論^^ 一些概念 列出一些個人認為比較有用的概念: Cocos遊戲的兩大開發工具分別是CocosCreator和CocosStudio,區別是前者是cocos2djs專用的開發工具,後者則是coco…...
【ROS2】RViz2加载URDF模型文件
1、RViz2加载URDF模型文件 1)运行RViz2 rviz22)添加组件:RobotModel 3)选择通过文件添加 4)选择URDF文件,此时会报错,需要修改Fixed Frame为map即可 5)因为没有坐标转换,依然会报错,下面尝试解决 2、运行坐标转换节点 1)运行ROS节点:robot_state_publishe...
Unity导入特效,混合模式无效问题
检查spine导出设置与Unity导入设置是否一致 检查Blend Mode Materials是否勾选 检查是否使用导入时产生的对应混合模式的材质,混合模式不适用默认材质 这里选导入时生成的材质...
el-table自定义按钮控制扩展expand
需求:自定义按钮实现表格扩展内容的展开和收起,实现如下: 将type“expand”的表格列的宽度设置为width"1",让该操作列不展示出来,然后通过ref动态调用组件的内部方法toggleRowExpansion(row, row.expanded)控…...
opencv CV_TM_SQDIFF未定义标识符
opencv CV_TM_SQDIFF未定义标识符 opencv4部分命名发生变换,将CV_WINDOW_AUTOSIZE改为WINDOW_AUTOSIZE;CV_TM_SQDIFF_NORMED改为TM_SQDIFF_NORMED。...
2024acl论文体悟
总结分析归纳 模型架构与训练方法:一些论文关注于改进大语言模型的架构和训练方法,以提高其性能和效率。例如,“Quantized Side Tuning: Fast and Memory-Efficient Tuning of Quantized Large Language Models”提出了一种量化侧调优方法&a…...
【Git原理与使用】版本回退reset 详细介绍、撤销修改、删除文件
目录 一、版本回退 reset 1.1 指令: 1.2 参数说明: 1.3 演示: 二、撤销修改 情况一:对于工作区的代码,还没有 add 情况二:已经 add ,但没有 commit 情况三:已经 add &…...
反规范化带来的数据不一致问题的解决方案
在数据库设计中,规范化(Normalization)和反规范化(Denormalization)是两个相互对立但又不可或缺的概念。规范化旨在消除数据冗余,确保数据的一致性和准确性,但可能会降低查询效率。相反…...
【Android】直接使用binder的transact来代替aidl接口
aidl提供了binder调用的封装,有的时候,比如: 1. 懒得使用aidl生成的接口文件(确实是懒,Android studio中aidl生成接口文件很方便) 2. 服务端的提供者只公开了部分接口出来,只给了调用编号和参…...
Python机器学习笔记(十八、交互特征与多项式特征)
添加原始数据的交互特征(interaction feature)和多项式特征(polynomial feature)可以丰富特征表示,特别是对于线性模型。这种特征工程可以用统计建模和许多实际的机器学习应用中。 上一次学习:线性模型对w…...
《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)
章节文章名备注第1节Spring Boot(1)基于Eclipse搭建Spring Boot开发环境环境搭建第2节Spring Boot(2)解决Maven下载依赖缓慢的问题给火车头提提速第3节Spring Boot(3)教你手工搭建Spring Boot项目纯手工玩法…...
【AI进化论】 如何让AI帮我们写一个项目系列:将Mysql生成md文档
一、python脚本 下面给出一个简易 Python 脚本示例,演示如何自动获取所有表的结构,并生成一份 Markdown 文件。你可根据自己的需求做修改或使用其他编程语言。 import mysql.connector# ------------------------ # 1. 连接数据库 # -----------------…...
(已开源-AAAI25) RCTrans:雷达相机融合3D目标检测模型
在雷达相机融合三维目标检测中,雷达点云稀疏、噪声较大,在相机雷达融合过程中提出了很多挑战。为了解决这个问题,我们引入了一种新的基于query的检测方法 Radar-Camera Transformer (RCTrans)。具体来说: 首先设计了一个雷达稠密…...
深入解析TRC-20代币:从技术原理到生态布局,一篇文章讲透
深入解析TRC-20代币:从技术原理到生态布局,一篇文章讲透 引言 在波场(TRON)生态中,TRC-20 代币标准扮演着至关重要的角色,它不仅是承载如USDT等巨量稳定币的基石,更是连接DeFi、GameFi和NFT等…...
告别实车测试!手把手教你用Vector VT平台搭建OBC/DCDC的HIL测试环境(附避坑指南)
新能源汽车OBC/DCDC控制器HIL测试环境搭建实战指南 在新能源汽车三电系统开发中,车载充电机(OBC)和DC/DC变换器的功能验证一直是工程师面临的挑战。传统实车测试不仅成本高昂,而且难以覆盖所有边界条件。硬件在环(HIL)测试技术通过将真实控制器接入虚拟车…...
STAR-CCM+物理场实战:用‘伴随求解器’优化无人机气动,附完整仿真流程文件
STAR-CCM物理场实战:用‘伴随求解器’优化无人机气动,附完整仿真流程文件 无人机气动外形优化一直是工程仿真领域的难点与热点。传统方法依赖人工试错与经验调整,效率低下且难以找到全局最优解。本文将深入解析如何利用STAR-CCM的伴随求解器技…...
TeamPass后台任务管理:自动化维护和清理操作手册
TeamPass后台任务管理:自动化维护和清理操作手册 【免费下载链接】TeamPass Collaborative Passwords Manager 项目地址: https://gitcode.com/gh_mirrors/te/TeamPass TeamPass作为一款协作密码管理器,其后台任务管理功能是确保系统高效稳定运行…...
kagent支持的5大AI框架对比:ADK、CrewAI、LangGraph、OpenAI、技能框架
kagent支持的5大AI框架对比:ADK、CrewAI、LangGraph、OpenAI、技能框架 【免费下载链接】kagent Cloud Native Agentic AI | Discord: https://bit.ly/kagentdiscord 项目地址: https://gitcode.com/gh_mirrors/ka/kagent kagent作为一款云原生智能代理平台&…...
AOCODARC-F7MINI飞控固件编译踩坑记:从‘make arm_sdk_install’失败到成功编译
AOCODARC-F7MINI飞控固件编译实战:从工具链安装到烧录全流程解析 1. 环境准备与工具链安装 编译BetaFlight固件最令人头疼的环节往往不是代码本身,而是环境配置。以Ubuntu 20.04为例,我们需要先解决两个核心问题:基础编译环境和AR…...
开题不是写作文,是做设计——百考通AI助你交出一份真实可行的研究蓝图
开题报告是毕业论文或学位研究的“第一道学术关卡”,它不仅需要明确“研究什么”“为何研究”,更要清晰规划“如何研究”。然而,许多学生在撰写过程中常因经验不足而陷入困境:选题空泛、问题意识薄弱、文献综述缺乏主线、研究方法…...
服务器电源、电机驱动、UPS:IRLR3636TRPBF的60V功率MOSFET应用版图
IRLR3636TRPBF:DPAK封装60V/50A N沟道功率MOSFET的大电流开关应用解析在大功率开关电源、不间断电源以及直流电机驱动等领域,功率MOSFET的导通损耗直接影响系统的温升和能效等级。当设计需要在60V电压平台上处理50A级别的大电流时,导通电阻和…...
STM32串口打印的“坑”你踩过几个?从fputc重定向到解决中文乱码、数据丢失的完整指南
STM32串口打印的“坑”你踩过几个?从fputc重定向到解决中文乱码、数据丢失的完整指南 调试嵌入式系统时,串口打印是最常用的调试手段之一。对于STM32开发者来说,将printf重定向到USART看似简单,但在实际项目中往往会遇到各种意料之…...
【限时解密】Perplexity写作辅助底层架构图首次公开:基于逆向分析的7大能力边界与替代方案评估
更多请点击: https://codechina.net 第一章:Perplexity写作辅助功能的定位与核心价值 Perplexity并非传统意义上的语法校对工具或模板生成器,而是一个以“问题驱动、证据锚定”为核心范式的智能写作协作者。它将用户输入的写作任务自动解构为…...
