[已解决] MATLAB提取点云中某一点失败

[复制链接]
自律小王 发表于 2021-8-22 20:58:34
用MATLAB提取cloud中第K个点用什么函数?其中indices是 在点云cloud中以点point6为中心,半径为radius的圆内的所有点的位置(比如:第1个点、第8个点、第68个点.....)
屏幕截图 2021-08-22 195716.png

最佳答案


TouAkira 发表于 2021-8-24 16:20:11
自律小王 发表于 2021-8-24 03:55
大哥说的对!人脸点云数据是三维的,采样点是有序排列,计算是根据point6的坐标算的,point6是从点云内随 ...

假定 data 是个3列若干行的矩阵,每行对应一个点的三维坐标,那么第k个点的坐标就是  data( k, : )  ,这在帮助文档的《 数组索引 》里面全有,中学水平足够自学并掌握了。

跟你说话真累,感觉苦口婆心说半天,结果全白搭。前面我专门告诉你了,提问时请
粘贴一个简单的程序.别人可以直接复制运行(尽量避免使用附件,Simulink模型除外)
对了还有同学把数据/代码的截屏按图片方式传上来发帖的,表示不是每个人都有耐心按你的图把代码敲出来的。这种情况通常也会导致没人回答。

结果你还是在发截图。发截图对其他坛友来说,有什么用?

直接把代码的文本粘贴出来,如果含数据,请存为mat文件作为附件一并在帖里发出来,这样既节省论坛的存储空间,也方便其他人测试验证和调整。

如果是上百行的代码,你贴个图确实方便了,但别人难道先花半小时(如果直接把代码文本和数据发出来,其他坛友直接能够得到。这部分时间是根本没有必要花的)、手敲上百行给你做测试?

换位思考下,你乐意花这种完全没必要的冤枉时间吗?

9 条回复


TouAkira 发表于 2021-8-23 07:06:30
你自己去看一下报错时的k值是否是正整数、是否在点云可能允许的范围内。
然后point7 = function... 是个啥,不符合语法要求!

新手发帖请先仔细看发帖提示和置顶帖子,尤其是《 你知道如何正确提问么? 》、《 为什么你的帖子没人回 》这些帖子

请先去看一看,想一想,最最基本的"方便你自己、也方便回答者"的几条指南
粘贴一个简单的程序.别人可以直接复制运行(尽量避免使用附件,Simulink模型除外)
对了还有同学把数据/代码的截屏按图片方式传上来发帖的,表示不是每个人都有耐心按你的图把代码敲出来的。这种情况通常也会导致没人回答。

都做到了吗?

自律小王 发表于 2021-8-23 10:27:25
TouAkira 发表于 2021-8-23 07:06
你自己去看一下报错时的k值是否是正整数、是否在点云可能允许的范围内。
然后point7 = function... 是个啥 ...

K值都是正整数,点云内找的点是在点云可能允许的范围内,这个function函数是应用错的,现在就是不清楚用什么函数来调取点云cloud中第k个点

TouAkira 发表于 2021-8-23 10:42:35
自律小王 发表于 2021-8-22 22:27
K值都是正整数,点云内找的点是在点云可能允许的范围内,这个function函数是应用错的,现在就是不清楚用 ...

请仔细看上面发的超链接里面的帖子,思考一下如何提问!

现在的情形就是很明显,你和我都知道你需要解决的是什么问题,但是你连个点云数据是什么样(最基本的,数据有几个维度、每个采样点的数据是如何排列的等等)都不做说明,这就好比医生和病人都知道病人肚子疼,但是病人连个基本血检都不做,光发个照片出来,扁鹊再世也没法给病人开药啊 !!

自律小王 发表于 2021-8-24 15:55:18
本帖最后由 自律小王 于 2021-8-24 16:00 编辑
TouAkira 发表于 2021-8-23 10:42
请仔细看上面发的超链接里面的帖子,思考一下如何提问!

现在的情形就是很明显,你和我都知道你需要解决 ...

大哥说的对!人脸点云数据是三维的,采样点是有序排列,计算是根据point6的坐标算的,point6是从点云内随机挑的一的点(后面要用他的坐标)
屏幕截图 2021-08-24 155119.png

TouAkira 发表于 2021-8-24 16:20:11
自律小王 发表于 2021-8-24 03:55
大哥说的对!人脸点云数据是三维的,采样点是有序排列,计算是根据point6的坐标算的,point6是从点云内随 ...

假定 data 是个3列若干行的矩阵,每行对应一个点的三维坐标,那么第k个点的坐标就是  data( k, : )  ,这在帮助文档的《 数组索引 》里面全有,中学水平足够自学并掌握了。

跟你说话真累,感觉苦口婆心说半天,结果全白搭。前面我专门告诉你了,提问时请
粘贴一个简单的程序.别人可以直接复制运行(尽量避免使用附件,Simulink模型除外)
对了还有同学把数据/代码的截屏按图片方式传上来发帖的,表示不是每个人都有耐心按你的图把代码敲出来的。这种情况通常也会导致没人回答。

结果你还是在发截图。发截图对其他坛友来说,有什么用?

直接把代码的文本粘贴出来,如果含数据,请存为mat文件作为附件一并在帖里发出来,这样既节省论坛的存储空间,也方便其他人测试验证和调整。

如果是上百行的代码,你贴个图确实方便了,但别人难道先花半小时(如果直接把代码文本和数据发出来,其他坛友直接能够得到。这部分时间是根本没有必要花的)、手敲上百行给你做测试?

换位思考下,你乐意花这种完全没必要的冤枉时间吗?
回复此楼

自律小王 发表于 2021-8-27 10:19:09
TouAkira 发表于 2021-8-24 16:20
假定 data 是个3列若干行的矩阵,每行对应一个点的三维坐标,那么第k个点的坐标就是  data( k, : )  ,这 ...

确实确实,以后记着了,感谢大哥

自律小王 发表于 2021-8-27 11:01:14
本帖最后由 自律小王 于 2021-8-27 11:05 编辑

close all;
clc;
cloud = pcread('001-001.ply');
load ('b.mat');
%pcshow(cloud)
%% 确定一个点ps,pt
%pg=pointCloud(100*rand(1000,3,'single'));
point6=[26.225500,-112.50200,-1552.9600];%任意选择的点
radius=10;%半径为50
[indices,dists]=findNeighborsInRadius(cloud,point6,radius);%得到半径内所有点
point7=[];
for i=1:length(indices)
    k=indices(i);
    point7=cloud.Location(k,:);
    d=point6-point7;%向量d
    ps=point6;
    pt=point7;
    ns=normE(63,:,:);

    nt=normE(k,:,:);
    u=ns;
    m=sqrt((26.225500-point7(1,:,:))^2+(-112.50200+point7(:,2,:))^2+(-1552.9600+point7(:,:,3))^2);%计算欧式距离
    v=cross(u,(pt-ps)/m);%向量的叉积
    w=cross(u,v);
    %% 计算四组值
    q=dot(v,nt);%向量的点积
    a=dot(u,d/m);
    e=atan(dot(u,nt)/dot(w,nt));
    feature=[q,a,e];
end
%% 统计直方图
%subplot(2,2,1);
% bar(point6,q);
%bar(point6,a);
%bar(point6,e);
%axis([0 5 0 100])

001-001.zip

176.91 KB, 下载次数: 1


aijunhao 发表于 2021-8-27 15:42:49
你这个排序有什么要求吗

自律小王 发表于 2021-8-27 16:59:14
没什么要求,这数据内的点应该是有序排列的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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