Matlab基于KD树的离散点密度特征提取—点云处理及可视化第4期

news2024/9/23 15:33:14

在之前的文章中,分享了Matlab基于KD树的邻域点搜索方法

在此基础上,进一步分享一下基于KD树的离散点密度特征提取方法

先来看一下成品效果:

特别提示:《Matlab点云处理及可视化》系列文章整理自作者博士期间的部分成果,旨在为初入点云处理领域的朋友提供一份较为权威、可直接用于论文写作的Matlab点云数据处理教程如果觉得有用可以分享给更多的人


 

1 概述

点云密度特征一般用单位面积/体积内的离散点数量表示

其中,二维(2-Dimension, 2D)平面密度可以通过柱状邻域提取;三维(3-Dimension, 3D)体密度可以通过球邻域提取。

 

2 代码实现

function density_2D = density2D_KD(data,radius)
% 功能:利用KD树提取离散点2D密度特征
% 输入:data   - 原始数据(m*3)    
% 输出:planes - 拟合所得平面参数 
M = size(data,1);
density_2D = zeros(M,1);
idx = rangesearch(data(:,1:2),data(:,1:2),radius,'Distance','euclidean','NSMethod','kdtree');
for i = 1:M
    density_2D(i,1) = length(idx{i})/(pi*radius^2);
end
end
function density_3D = density3D_KD(data,radius)
% 功能:利用KD树提取离散点3D密度特征
% 输入:data   - 原始数据(m*3)    
% 输出:planes - 拟合所得平面参数 
M = size(data,1);
density_3D = zeros(M,1);
idx = rangesearch(data(:,1:3),data(:,1:3),radius,'Distance','euclidean','NSMethod','kdtree');
for i = 1:M
    density_3D(i,1) = length(idx{i})/(4/3*pi*radius^3);
end
end

 

3 可视化验证

为了检测密度特征提取的效果,采用某地机载LiDAR实测点云数据进行验证

%% 数据准备
% 读取数据
data = load('data1.txt');
%% 点云密度特征提取
% 定义半径
radius = 1;
% 2D平面密度
density_2D = density2D_KD(data(:,1:2),radius);
% 3D体密度
density_3D = density3D_KD(data(:,1:3),radius);
%% 原始点云可视化
% 窗口尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 2*10;
figureHeight = 1*10;
figureHandle1 = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
t1 = tiledlayout(1,2,'TileSpacing','compact','Padding','compact');
nexttile
scatter(data(:,1),data(:,2),7,data(:,3),'filled')
hTitle1 = title('原始点云(俯视)');
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'ztick',[])
axis equal off tight
colormap(map)
colorbar
nexttile
scatter3(data(:,1),data(:,2),data(:,3),5,data(:,3),'filled')
hTitle2 = title('原始点云(侧视)');
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'ztick',[])
axis equal off tight
view(-1.157471311476228e+02,53.408837245676686)
colorbar
% 细节优化
set([hTitle1,hTitle2], 'FontName', '微软雅黑', 'FontSize', 12, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
% 图片输出
figW = figureWidth;
figH = figureHeight;
set(figureHandle1,'PaperUnits',figureUnits);
set(figureHandle1,'PaperPosition',[0 0 figW figH]);
fileout = 'test0';
print(figureHandle1,[fileout,'.png'],'-r300','-dpng');
%% 平面、体密度提取结果可视化验证
% 窗口尺寸设置(单位:厘米)
figureUnits = 'centimeters';
figureWidth = 2.35*10;
figureHeight = 1*10;
figureHandle2 = figure;
set(gcf, 'Units', figureUnits, 'Position', [0 0 figureWidth figureHeight]);
t2 = tiledlayout(1,2,'TileSpacing','compact','Padding','compact');
nexttile
scatter(data(:,1),data(:,2),15,density_2D(:,1),'filled')
hTitle1 = title('基于KD树的2D平面密度特征可视化');
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'ztick',[])
axis equal off tight
colormap(map)
colorbar
nexttile
scatter(data(:,1),data(:,2),15,density_3D(:,1),'filled')
hTitle2 = title('基于KD树的3D体密度特征可视化');
set(gca,'xtick',[])
set(gca,'ytick',[])
set(gca,'ztick',[])
axis equal off tight
colorbar
% 细节优化
set([hTitle1,hTitle2], 'FontName', '微软雅黑', 'FontSize', 12, 'FontWeight' , 'bold')
% 背景颜色
set(gcf,'Color',[1 1 1])
% 图片输出
figW = figureWidth;
figH = figureHeight;
set(figureHandle2,'PaperUnits',figureUnits);
set(figureHandle2,'PaperPosition',[0 0 figW figH]);
fileout = 'test';
print(figureHandle2,[fileout,'.png'],'-r300','-dpng');

其中,为了区分不同对象,从Matlab配色神器TheColor的SCI颜色库中选择渐变色:

%% 颜色定义
map = TheColor('sci',2068);
% map = flipud(map);

最终结果如下:

以上。

获取方式:

Matlab基于KD树的离散点密度特征提取

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/68963.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

汇编语言与微机原理 期末半开卷复习整理(下)

输入输出 8086采用I/O端口独立编址 in AL/AX,imm8/DX out imm8/DX,AL/AX 大于0FFH的端口只能存在DX 读外设(查询) status:in al,dxtest al,80H;//测标志位jz statusmov dx,100hin al,dx写外设(查询) status:mov dx,102Hin al,dxtest al,80Hjnz status…

Qt实现跨平台窗口选择功能

Qt实现跨平台获取鼠标位置窗口大小功能 文章目录Qt实现跨平台获取鼠标位置窗口大小功能1、概述2、实现效果3、实现原理4、关键代码5、源代码更多精彩内容👉个人内容分类汇总 👈👉Qt自定义模块、工具👈 1、概述 Qt版本&#xff1a…

从源码层面理解 React 是如何做 diff 的

大家好,我是前端西瓜哥。今天带带大家来分析 React 源码,理解它的单节点 diff 和多节点 diff 的具体实现。 React 的版本为 18.2.0 reconcileChildFibers React 的节点对比逻辑是在 reconcileChildFibers 方法中实现的。 reconcileChildFibers 是 Chil…

ATTCK-T1003-001-操作系统凭据转储:LSASS内存

0x01基础信息 具体信息详情ATT&CK编号T1003-001所属战术阶段凭据访问操作系统windows 7 旗舰版 SP1创建时间2022年11月17日监测平台火绒安全、火绒剑、sysmon 0x02技术原理 攻击者可能会尝试访问存储在本地安全机构子系统服务 (LSASS) 进程内存中的凭证材料。用户登录后&…

Linux文件服务配置FTP服务

作者简介:一名99年软件运维应届毕业生,正在自学云计算课程。宣言:人生就是B(birth)和D(death)之间的C(choise),做好每一个选择。创作不易,动动小手…

【Python恶搞】Python实现祝福单身狗的恶搞项目,快@你的好朋友,祝福他吧 | 附源码

前言 halo,包子们上午好 咱就说,谁还没有一个单身的小伙伴呢 今天这个代码主要是为了祝福咱们单身的小伙伴 咱就说废话不多说,直接上才艺 相关文件 关注小编,私信小编领取哟! 当然别忘了一件三连哟~~ 源码点击蓝色…

数据可视化是让信息表现更复杂?很多人可能错了

数据可视化,目前行业中很多人认识有些偏颇,数据可视化就是单纯认为是大屏展示、酷炫的图表,很多人仅仅是把数据可视化 作为展厅中的刚性需求而已,其实这个是对数据行业的偏见,很多人侧重于数据的表现,而非便…

谷歌北大扩散模型(Diffusion Model)首篇综述来了!

本综述(Diffusion Models: A Comprehensive Survey of Methods and Applications)来自加州大学&Google Research的Ming-Hsuan Yang、北京大学崔斌实验室以及CMU、UCLA、蒙特利尔Mila研究院等众研究团队,首次对现有的扩散生成模型&#xf…

ftp工具的21端口无法连上远程主机

一、检测是否有安装vsffpd netstat -tunlp 没有安装先安装 1.安装 vsftpd 执行以下命令,安装 vsftpd。 yum install vsftpd -y 2.启动服务 执行以下命令,启动服务。 systemctl start vsftpd 3.执行以下命令,确认服务是否启动。 netstat -tun…

【c++基础】第二章 微观部分:面向对象之类的组成

第二章 微观部分:面向对象之类的组成类函数构造函数析构函数拷贝构造函数运算符重载函数封装一个字符串类初始化列表this指针常对象和常成员函数(方法)静态属性和静态成员函数单例设计模式类 对象:属性和方法组成,是类…

Nature子刊 | 空间转录组技术及其发展方向

2022年10月《Nature Biotechnology》发表了一篇空间转录组(ST)技术的综述文章,详细描述了现有的ST技术及其发展方向。 检测生物分子的新技术一直是生物进步的关键驱动力。在检测生物分子时,研究人员在选择实验方法时一直面临着关键…

CENTOS上的网络安全工具(十四)搬到Docker上(2)?

既然说要搬到Docker上,那么肯定是要把咱日常习惯用的那些东西都往docker上堆一堆看的。我最先考虑的居然是SSH,乃至于到现在我都不知道我为什么第一个想到的是SSH——因为对虚拟机来说,首先考虑的当然是如何远程管理集群中的每个机器&#xf…

iptables用法总结

iptables 是集成在 Linux 内核中的包过滤防火墙系统。使用 iptables 可以添加、删除具体的过滤规则,iptables 默认维护着 4 个表和 5 个链,所有的防火墙策略规则都被分别写入这些表与链中。 1、iptables语法格式 iptables 命令的基本语法格式如下&…

C++ 基础笔记(入门到循环)

目录 1.认识C —— 初窥门径 一、C程序框架(8分) 二、语言规范(16分) 三、DEV-C软件(下载链接) 四、计算机快捷键 五、输入输出的应用 2.变量与赋值 —— 脚踏实地 2.1 变量类型 2.2 变量类型与变…

一文详解名字分类(字符级RNN)

目录 一.前言 二.数据预处理 三.构造神经网络 四.训练 五.评价结果(预测) 一.前言 我们将构建和训练字符级RNN来对单词进行分类。字符级RNN将单词作为一系列字符读取,在每一步输出预测和“隐藏状态”,将其先前的隐藏 状态输…

02-MySQL数据管理

目录 DDL(数据操作语言) 添加数据 添加student表数据 修改数据 WHERE条件子句 修改student表数据 删除数据 删除student表数据 总结: DDL(数据操作语言) 用于操作数据库对象中所包含的数据 关键字&#xff1…

STM32的光敏检测自动智能窗帘控制系统proteus设计

STM32的光敏检测自动智能窗帘控制系统proteus设计 ( proteus仿真程序演示视频) 仿真图proteus 8.9 程序编译器:keil 5 编程语言:C语言 设计编号:C0074 主要功能: 结合实际情况,基于STM32单片机设计一…

ATTCK-T1078-001-默认账户

0x01基础信息 具体信息详情ATT&CK编号T1078-001所属战术阶段初始访问操作系统windows 7 旗舰版 SP1创建时间2022年11月10日监测平台火绒安全、火绒剑、sysmon 0x02技术原理 攻击者可能会获取和滥用默认帐户的凭据,以作为获得初始访问、持久性、特权升级或防御…

Python用一行代码,截取图片

前言 本文是该专栏的第3篇,后面会持续分享python的各种黑科技知识,值得关注。 在工作上,有些时候可能需要用到代码来进行自动截图,比如说需要图文识别,进行数据信息抽取的时候,能自动定位截图无疑是很好的办法。 对python而言,截图方法其实有很多,但笔者下面要介绍的…

活动明天见 | DataFunSummit 2022 AI基础软件架构峰会圆桌会

11月16日晚 19:30-21:00,第四范式技术副总裁、OpenMLDB 项目发起人郑曌受邀主持DataFunSummit 2022 AI基础软件架构峰会圆桌会,将与各位资深专家在线上做深度的交流分享,欢迎大家届时收看。 开源机器学习数据库 OpenMLDB **活动时…