[已解决] 如何对一个斜平面进行网格划分并计算网格内散点数?

[复制链接]
天台上的白 发表于 2022-3-6 15:46:29
楼主最近入门点云的处理,已经做完去噪降采样实验了,最近想复现一下八邻域深度值求取点云孔洞边缘点的算法。
现在只能做到投影在拟合平面上,下一步的划分网格以及求解网格内点数被卡住许久了。
投影后的点是一个斜的平面,非平行于XOY轴,因此无法用meshgrid函数。除此之外,如何计算网格内的点也是一个问题,用find函数吗?
数据为N×3矩阵,分别为X坐标列,Y坐标列,Z坐标列。
技术不行请多见谅:'(诚恳的希望能得到大佬的指导!

最佳答案


TouAkira 发表于 2022-3-7 12:36:37
就是个坐标变换问题。你的原平面总归是有平面方程的,比如 f = F( x, y, z ) == 0 这种,总是可以通过拉伸、平移、旋转变换,转为与oxyz 坐标系所匹配的 xoy 平面,在这个经过变换的平面内用 histogram2函数 histcounts2函数 等函数统计网格内采样点数量就是了。

9 条回复


天台上的白 发表于 2022-3-7 11:41:36
昨晚睡觉前想了一个办法,通过PCA转成平行于xoy平面的点,接着再根据17年的那个帖子划分网格和计算点数,用cell存储每个格子的点的索引和深度值,不知是否可行?

TouAkira 发表于 2022-3-7 12:36:37
就是个坐标变换问题。你的原平面总归是有平面方程的,比如 f = F( x, y, z ) == 0 这种,总是可以通过拉伸、平移、旋转变换,转为与oxyz 坐标系所匹配的 xoy 平面,在这个经过变换的平面内用 histogram2函数 histcounts2函数 等函数统计网格内采样点数量就是了。
回复此楼

天台上的白 发表于 2022-3-7 15:52:24
TouAkira 发表于 2022-3-7 12:36
就是个坐标变换问题。你的原平面总归是有平面方程的,比如 f = F( x, y, z ) == 0 这种,总是可以通过拉伸 ...

谢谢答复!我之前也想过这个方案,但是因为刚刚入门,所以还不知道怎么旋转,就自我退却了。我马上去查一下相关代码。谢谢啦

天台上的白 发表于 2022-3-7 16:57:51
clc
clear
close all

pc=pcread('touying_cloud.ply');%投影后的点云数据
proj_pnts=pc.Location;

n=load('normal7-20.mat');%投影后的法向量数据
normal_pnts=(n.model1.Normal)';

n0=[0,0,1];    %xoy平面法向量
rotation_axis= cross(normal_pnts',n0);  %求旋转角
theta = acos((n0*normal_pnts) / ( norm(n0)*norm(normal_pnts') ));  %求夹角
Rv = rotation_axis / norm(rotation_axis) * theta;
Rotation_matrix = rodrigues_angle(Rv);     %基于罗德里格斯求解旋转矩阵
proj_pnts_1=proj_pnts * Rotation_matrix ;  %每个点左乘旋转矩阵得到旋转后的平面点 其实是现有矩阵乘上旋转矩阵

以上是我的代码,但是最后效果并不好,坐标是发生了一些变化,但是并没有平行与xoy轴,好苦恼,不知道是哪里出错了T T

天台上的白 发表于 2022-3-7 17:07:33
TouAkira 发表于 2022-3-7 12:36
就是个坐标变换问题。你的原平面总归是有平面方程的,比如 f = F( x, y, z ) == 0 这种,总是可以通过拉伸 ...

大佬别走:'( 我和你说说我的想法你看可行吗?就在楼下我发的代码那里,但是应该是我哪里不太对,所以最后的效果并没有旋转到xoy平面,救救孩子

TouAkira 发表于 2022-3-7 17:30:45
天台上的白 发表于 2022-3-7 05:07
大佬别走 我和你说说我的想法你看可行吗?就在楼下我发的代码那里,但是应该是我哪里不太对,所以最后 ...

你得把什么ply和mat数据文件作为附件一并上传、还有所谓的“斜的平面”的方程的数据等等,大家都这么忙的,请不要搞这种事,让别人把时间花在猜上面,只会让别人懒得帮你

天台上的白 发表于 2022-3-7 20:46:00
对不起,我下午的时候想上传数据的,然后忘记点上传按钮了,就一直上传不成功。然后担心浪费大佬时间就没有继续研究,想着能不能让你看看大致步骤是不是对的就可以了。抱歉浪费你的时间了。Location(1).mat就是投影后的斜平面,然后代码中的normal7-20.mat是我从其他.m文件计算到的法向量,我下午的时候用其他方法算了发现数值不对。。就不上传了,尴尬。图片是经过变换后的数据,能看出来是个平面,但是依旧不在xoy轴上。
[-0.0538733737979982  0.0667903855915964   0.996311549661122]这个是我刚刚算的法向量。

我运行我的代码以后发现还是不能对齐xoy平面,还是斜的,不知道出了什么问题。
能麻烦大佬再帮我一下吗?
2022-03-07 (2).png

Location(1).mat

2.42 MB, 下载次数: 2


天台上的白 发表于 2022-3-7 20:47:19
TouAkira 发表于 2022-3-7 17:30
你得把什么ply和mat数据文件作为附件一并上传、还有所谓的“斜的平面”的方程的数据等等,大家都这么忙的 ...

对不起,我下午的时候想上传数据的,然后忘记点上传按钮了,就一直上传不成功。然后担心浪费大佬时间就没有继续研究,想着能不能让你看看大致步骤是不是对的就可以了。抱歉浪费你的时间了。
数据我放在楼上了,Location(1).mat就是投影后的斜平面,然后代码中的normal7-20.mat是我从其他.m文件计算到的法向量,我下午的时候用其他方法算了发现数值不对。。就不上传了,尴尬。图片是经过变换后的数据,能看出来是个平面,但是依旧不在xoy轴上。
[-0.0538733737979982  0.0667903855915964   0.996311549661122]这个是我刚刚算的法向量。

我运行我的代码以后发现还是不能对齐xoy平面,还是斜的,不知道出了什么问题。
能麻烦大佬再帮我一下吗?

xxxx天天向上 发表于 7 天前
你好,我想请教一下如何实现三维点云到xy平面的投影,求指教,谢谢
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表