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)。具体来说: 首先设计了一个雷达稠密…...
Linux应用开发之网络套接字编程(实例篇)
服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...
Robots.txt 文件
什么是robots.txt? robots.txt 是一个位于网站根目录下的文本文件(如:https://example.com/robots.txt),它用于指导网络爬虫(如搜索引擎的蜘蛛程序)如何抓取该网站的内容。这个文件遵循 Robots…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
MySQL账号权限管理指南:安全创建账户与精细授权技巧
在MySQL数据库管理中,合理创建用户账号并分配精确权限是保障数据安全的核心环节。直接使用root账号进行所有操作不仅危险且难以审计操作行为。今天我们来全面解析MySQL账号创建与权限分配的专业方法。 一、为何需要创建独立账号? 最小权限原则…...
基于Java Swing的电子通讯录设计与实现:附系统托盘功能代码详解
JAVASQL电子通讯录带系统托盘 一、系统概述 本电子通讯录系统采用Java Swing开发桌面应用,结合SQLite数据库实现联系人管理功能,并集成系统托盘功能提升用户体验。系统支持联系人的增删改查、分组管理、搜索过滤等功能,同时可以最小化到系统…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
手机平板能效生态设计指令EU 2023/1670标准解读
手机平板能效生态设计指令EU 2023/1670标准解读 以下是针对欧盟《手机和平板电脑生态设计法规》(EU) 2023/1670 的核心解读,综合法规核心要求、最新修正及企业合规要点: 一、法规背景与目标 生效与强制时间 发布于2023年8月31日(OJ公报&…...
实战三:开发网页端界面完成黑白视频转为彩色视频
一、需求描述 设计一个简单的视频上色应用,用户可以通过网页界面上传黑白视频,系统会自动将其转换为彩色视频。整个过程对用户来说非常简单直观,不需要了解技术细节。 效果图 二、实现思路 总体思路: 用户通过Gradio界面上…...
Java 与 MySQL 性能优化:MySQL 慢 SQL 诊断与分析方法详解
文章目录 一、开启慢查询日志,定位耗时SQL1.1 查看慢查询日志是否开启1.2 临时开启慢查询日志1.3 永久开启慢查询日志1.4 分析慢查询日志 二、使用EXPLAIN分析SQL执行计划2.1 EXPLAIN的基本使用2.2 EXPLAIN分析案例2.3 根据EXPLAIN结果优化SQL 三、使用SHOW PROFILE…...
aardio 自动识别验证码输入
技术尝试 上周在发学习日志时有网友提议“在网页上识别验证码”,于是尝试整合图像识别与网页自动化技术,完成了这套模拟登录流程。核心思路是:截图验证码→OCR识别→自动填充表单→提交并验证结果。 代码在这里 import soImage; import we…...
