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

Halcon实现3维点云平面拟合

Halcon实现3维点云平面拟合

function main()WindowHandle = open_window()ObjectModel3D = load_3D_model("1.om3")ObjectModel3DSelected = remove_noise(ObjectModel3D)[X, Y, Z] = extract_coordinates(ObjectModel3DSelected)[NX, NY, NZ, C] = fit_plane(X, Y, Z)visualize(ObjectModel3DSelected, NX, NY, NZ, C, WindowHandle)

打开并配置窗口

function open_window()dev_open_window(0, 0, 512, 512, 'black', WindowHandle)set_display_font(WindowHandle, 14, 'mono', 'true', 'false')return WindowHandle

加载3D模型

function load_3D_model(filename)read_object_model_3d(filename, 'm', [], [], ObjectModel3D, Status)check_status(Status)return ObjectModel3D

去除3D模型中的噪点

function remove_noise(ObjectModel3D)connection_object_model_3d(ObjectModel3D, 'distance_3d', 1, ObjectModel3DConnected)select_object_model_3d(ObjectModel3DConnected, 'num_points', 'and', 1000, 99999, ObjectModel3DSelected)return ObjectModel3DSelected

提取3D模型的坐标信息

function extract_coordinates(ObjectModel3D)get_object_model_3d_params(ObjectModel3D, 'point_coord_x', X)get_object_model_3d_params(ObjectModel3D, 'point_coord_y', Y)get_object_model_3d_params(ObjectModel3D, 'point_coord_z', Z)return [X, Y, Z]

拟合平面

function fit_plane(X, Y, Z)
# 计算点的重心
XM = mean(X)
YM = mean(Y)
ZM = mean(Z)

# 计算对称矩阵M(A)
DX = X - XM
DY = Y - YM
DZ = Z - ZM
MA11 = sum(DX * DX)
MA22 = sum(DY * DY)
MA33 = sum(DZ * DZ)
MA12 = sum(DX * DY)
MA13 = sum(DX * DZ)
MA23 = sum(DY * DZ)create_matrix(3, 3, [MA11,MA12,MA13,MA12,MA22,MA23,MA13,MA23,MA33], MatrixID)# 求取特征值和特征向量
eigenvalues_symmetric_matrix(MatrixID, 'true', EigenvaluesID, EigenvectorsID)# 获取法向量
get_value_matrix(EigenvectorsID, 0, 0, NX)
get_value_matrix(EigenvectorsID, 1, 0, NY)
get_value_matrix(EigenvectorsID, 2, 0, NZ)# 计算平面的常数C
C = NX * XM + NY * YM + NZ * ZM
if C < 0.0NX = -NXNY = -NYNZ = -NZC = -C
endif
return [NX, NY, NZ, C]

可视化函数

# 可视化函数
function visualize(ObjectModel3DSelected, NX, NY, NZ, C, WindowHandle)# 设置可视化参数VisualizationPlaneSize = 40GenParamName = ['lut','color_attrib','light_position','alpha']GenParamValue = ['color1','coord_z','0.0 0.0 -0.3 1.0', 0.9]# 获取3D对象的主要轴(可选)moments_object_model_3d(ObjectModel3DSelected, 'principal_axes', Pose)# 生成拟合平面的3D对象模型gen_plane_object_model_3d(Pose, [-1,-1,1,1] * VisualizationPlaneSize, [-1,1,1,-1] * VisualizationPlaneSize, IntersectionPlane)# 设置可视化窗口的角度和位置create_pose(-65, -40, 2400, 150, 0, -60, 'Rp+T', 'gba', 'point', PoseIn)# 设置标题和操作说明Title = '3D object & fitplane'Instructions[0] = 'Rotate: Left button'Instructions[1] = 'Zoom: Shift + left button'Instructions[2] = 'Move: Ctrl + left button'# 在窗口中可视化3D对象和拟合平面visualize_object_model_3d(WindowHandle, [ObjectModel3DSelected, IntersectionPlane], [], PoseIn, GenParamName, GenParamValue, Title, [], Instructions, Pose)
end function

状态检查

function check_status(Status)if Status != "OK"# Handle the error here

相关文章:

Halcon实现3维点云平面拟合

Halcon实现3维点云平面拟合 function main()WindowHandle open_window()ObjectModel3D load_3D_model("1.om3")ObjectModel3DSelected remove_noise(ObjectModel3D)[X, Y, Z] extract_coordinates(ObjectModel3DSelected)[NX, NY, NZ, C] fit_plane(X, Y, Z)vi…...

安全学习DAY23_CookieSessionToken

文章目录 Cookie和Session的区别Token的作用 Cookie和Session的区别 Cookie和Session都是用来在Web应用程序中跟踪用户状态的机制 1、存储位置不同&#xff1a; Cookie是存储在客户端&#xff08;浏览器&#xff09;上的&#xff0c;而Session是存储在服务器端的。 2、安全…...

C++ map clear内存泄漏问题

map值存的是指针 map自带的clear()函数会清空map里存储的所有内容&#xff0c;但如果map值存储的是指针&#xff0c;则里面的值不会被清空&#xff0c;会造成内存泄漏&#xff0c;所以值为指针的map必须用迭代器清空。 使用erase迭代删除 迭代器删除值为指针的map&#xff0c…...

【鲁棒电力系统状态估计】基于投影统计的电力系统状态估计的鲁棒GM估计器(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

怎么判断一个ip地址是否正确

在网络通信和计算机领域中&#xff0c;IP地址&#xff08;Internet Protocol Address&#xff09;是一个关键的概念。但是&#xff0c;很多人对于如何判断一个IP地址是否正确感到困惑。本文将深入探讨这个问题&#xff0c;并提供一些实用的方法来验证IP地址的正确性。 IP地址是…...

Git:git clone 之 --recursive 选项

在git的repo中&#xff0c;可能会有子项目的代码&#xff0c;也就是"git中的git" --recursive是递归的意思&#xff0c;不仅会git clone当前项目中的代码&#xff0c;也会clone项目中子项目的代码。 我们有时在git clone的时候漏掉 --recursive选项&#xff0c;导致编…...

并查集介绍和常用模板

并查集介绍和常用模板 前言&#xff1a; 并查集&#xff08;Union-find set 也叫Disjoint Sets&#xff09;是图论里面一种用来判断节点之间是否连通的数据结构&#xff0c;学会使用它可以处理一些跟节点连通性的问题。它有两个很重要的方法&#xff1a; Find(x)&#xff1a;…...

解决deepspeed框架的bug:不保存调度器状态,模型训练重启时学习率从头开始

deepspeed存在一个bug&#xff0c;即在训练时不保存调度器状态&#xff0c;因此如果训练中断后再重新开始训练&#xff0c;调度器还是会从头开始而不是接着上一个checkpoint的调度器状态来训练。这个bug在deepspeed的github中也有其他人提出&#xff1a;https://github.com/mic…...

Linux ipc通信(消息对列)

前言&#xff1a;消息队列也是linux开发ipc机制中较为重要的一个进程间通信机制。 1.系统创建或获取消息对列 int msgget(key_t key, int mode); 创建消息队列&#xff0c;或者获取消息队列。 参数&#xff1a; key - 使用ftok()获取到的key mode - IPC_CREAT|0666 返回&…...

【计算机网络】 ARP协议和DNS协议

文章目录 数据包在传输过程中的变化过程单播组播和广播ARP协议ARP代理免费ARP路由数据转发过程DNS协议 数据包在传输过程中的变化过程 在说ARP和DNS之前&#xff0c;我们需要知道数据包在传输过程的变化过程 从图片中可以看到&#xff0c;发送方的原数据最开始是在应用层&…...

【逐步剖C++】-第一章-C++类和对象(上)

前言&#xff1a;本文主要介绍有关C入门需掌握的基础知识&#xff0c;包括但不限于以下几个方面&#xff0c;这里是文章导图&#xff1a; 本文较长&#xff0c;内容较多&#xff0c;大家可以根据需求跳转到自己感兴趣的部分&#xff0c;希望能对读者有一些帮助 那么本文也主要…...

索尼 toio™ 应用创意开发征文|探索创新的玩乐世界——索尼 toio™

导语&#xff1a; 在技术的不断进步和发展中&#xff0c;玩具也逐渐融入了智能化的潮流。索尼 toio™作为一款前沿的智能玩具&#xff0c;给孩子和成人带来了全新的游戏体验。本文将介绍索尼 toio™的特点、功能和应用场景&#xff0c;让读者了解这个令人兴奋的创新产品。 1. 了…...

企业架构LNMP学习笔记23

1、隐藏版本号&#xff1a; Nginx对外提供服务&#xff0c;为了避免被针对某个版本的漏洞进行攻击。经常做法是隐藏掉软件的版本信息&#xff0c;提供一定的安全性。 server_tokens off; https和CA&#xff1a; 1&#xff09;基于SSL CA证书的公私钥的安全性。 CA是需要生成…...

第六章 图 五、图的深度优先遍历(DFS算法)

目录 一、定义 深度优先遍历通常用于解决以下问题&#xff1a; 深度优先遍历算法具有以下优点&#xff1a; 深度优先遍历算法的一个缺点是&#xff1a; 二、代码 空间复杂度&#xff1a; 时间复杂度&#xff1a; 邻接矩阵存储&#xff1a; 邻接表存储&#xff1a; 三、…...

React 中的 useLayoutEffect 钩子函数

useLayoutEffect钩子函数的作用跟useEffect钩子函数的作用一样&#xff0c;它们的不同主要是在于&#xff1a; 1、useEffect钩子函数是异步的&#xff0c;因为此函数在执行的时候是先计算出所有的 Dom 节点的改变后再将对应的 Dom 节点渲染到屏幕上&#xff0c;然而在 useEffe…...

upload-labs1-21关文件上传通关手册

upload-labs文件上传漏洞靶场 目录 upload-labs文件上传漏洞靶场第一关pass-01&#xff1a;第二关Pass-02第三关pass-03&#xff1a;第四关pass-04&#xff1a;第五关pass-05&#xff1a;第六关pass-06&#xff1a;第七关Pass-07第八关Pass-08第九关Pass-09第十关Pass-10第十一…...

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题

MATLAB遗传算法求解生鲜货损制冷时间窗碳排放多成本车辆路径规划问题实例 1、问题描述 已知配送中心和需求门店的地理位置,并且已经获得各个门店的需求量。关于送货时间的要求,门店都有规定的时间窗,对于超过规定时间窗外的配送时间会产生相应的惩罚成本。为保持生鲜农产品的…...

界面控件DevExpress .NET应用安全 Web API v23.1亮点:支持Swagger模式

DevExpress拥有.NET开发需要的所有平台控件&#xff0c;包含600多个UI控件、报表平台、DevExpress Dashboard eXpressApp 框架、适用于 Visual Studio的CodeRush等一系列辅助工具。 DevExpress 今年第一个重要版本v23.1日前已正式发布了&#xff0c;该版本拥有众多新产品和数十…...

SpringMVC之CRUD------增删改查

目录 前言 配置文件 pom.xml文件 web.xml文件 spring-context.xml spring-mvc.xml spring-MyBatis.xml jdbc.properties数据库配置文件 generatorConfig.xml log4j2日志文件 后台 PageBaen.java PageTag.java 切面类 biz层 定义一个接口 再写一个实现类 …...

微信小程序开发教学系列(4)- 抖音小程序组件开发

章节四&#xff1a;抖音小程序组件开发 在本章中&#xff0c;我们将深入探讨抖音小程序的组件开发。组件是抖音小程序中的基本构建块&#xff0c;它们负责展示数据和与用户交互。了解组件的开发方法和使用技巧是进行抖音小程序开发的重要一步。 4.1 抖音小程序的基本组件 抖…...

STM32 UART 通信详解

通用异步收发传输器&#xff08;UART&#xff09;是STM32微控制器中最基础、最常用的串行通信接口之一。它通过简单的两根信号线&#xff08;TX和RX&#xff09;实现全双工异步数据交换&#xff0c;广泛应用于与PC调试、传感器模块、蓝牙/Wi-Fi模块等的通信。一、UART协议基础1…...

Windows 10/11 上保姆级安装AdGuard Home,并配置为开机自启服务(附NSSM详细步骤)

Windows 系统深度集成 AdGuard Home&#xff1a;从零构建企业级 DNS 过滤服务 在数字生活高度渗透的今天&#xff0c;网络隐私保护已成为现代计算机用户的刚需。作为 Windows 平台用户&#xff0c;我们常常面临一个两难选择&#xff1a;要么忍受各类广告追踪和恶意域名的侵扰&…...

LeetCode 108. 将有序数组转换为二叉搜索树 详细技术解析

LeetCode 108. 将有序数组转换为二叉搜索树 详细技术解析本文针对 LeetCode 108. 将有序数组转换为二叉搜索树 问题&#xff0c;从题目解析、核心原理、思路拆解、代码实现、边界处理到面试拓展&#xff0c;进行全方位拆解&#xff0c;适合算法入门及进阶开发者阅读&#xff0c…...

2024升级版资源捕获工具:猫抓Cat-Catch全解析

2024升级版资源捕获工具&#xff1a;猫抓Cat-Catch全解析 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字化时代&#xff0c;网页资源的获取…...

快速上手Jimeng LoRA:Streamlit可视化界面,无需代码基础

快速上手Jimeng LoRA&#xff1a;Streamlit可视化界面&#xff0c;无需代码基础 你是否对AI绘画感兴趣&#xff0c;想尝试不同的艺术风格&#xff0c;却被复杂的命令行和代码部署劝退&#xff1f;你是否下载了多个不同训练阶段的LoRA模型&#xff0c;却苦于每次测试都要重新加…...

创业合伙人人力股分配的五大核心要素与实操指南

1. 行业属性决定人力股占比 创业团队在分配人力股时&#xff0c;首先要考虑的就是行业特性。不同行业对人力的依赖程度天差地别&#xff0c;这直接决定了人力股在总股权中的占比区间。 以软件开发公司为例&#xff0c;这类企业最核心的资产就是程序员的技术能力。我曾参与过一…...

Windows与Office智能激活终极指南:KMS_VL_ALL_AIO全解析

Windows与Office智能激活终极指南&#xff1a;KMS_VL_ALL_AIO全解析 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows和Office激活烦恼吗&#xff1f;KMS_VL_ALL_AIO是一款功能强大…...

解放你的B站缓存:m4s-converter让视频格式掌控在你手中

解放你的B站缓存&#xff1a;m4s-converter让视频格式掌控在你手中 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 问题发现&#xff1a;当数字内…...

AIGlasses OS Pro与微信小程序联动:开发拍照识物应用

AIGlasses OS Pro与微信小程序联动&#xff1a;开发拍照识物应用 最近在捣鼓一些智能硬件和移动应用结合的项目&#xff0c;发现AIGlasses OS Pro的云端视觉能力特别适合做一些“所见即所得”的应用。正好微信小程序生态成熟&#xff0c;用户使用门槛低&#xff0c;我就琢磨着…...

智能进化:基于DouZero的欢乐斗地主AI实战突破指南

智能进化&#xff1a;基于DouZero的欢乐斗地主AI实战突破指南 【免费下载链接】DouZero_For_HappyDouDiZhu 基于DouZero定制AI实战欢乐斗地主 项目地址: https://gitcode.com/gh_mirrors/do/DouZero_For_HappyDouDiZhu 斗地主作为国民级卡牌游戏&#xff0c;胜负往往取决…...