原理不讲,直接上代码,亲测绝对可用。
clc; clear; % 加载点云 ptCloud = pcread('12.ply'); a=ptCloud.Location; m=max(a); n=min(a); %m=[124 114 -61];%也可以自定义噪声填充范围 %n=[-47 -40 -124]; %这里也可以自定义噪声的填充范围 % 可视化原始点云 figure; pcshow(ptCloud); title('原始点云'); xlabel('X(m)'); ylabel('Y(m)'); zlabel('Z(m)'); hold on; % 添加高斯噪声 mu = 0; % 均值 sigma = 0.5; % 标准差 noise = normrnd(mu,sigma,[10000000, 3]); % 100000个高斯噪声点 ptCloud_N = pointCloud([ptCloud.Location; noise]); % 原始点云添加高斯噪声 %add random noise ss = n+(m-n).*rand(10000,3);%10000个噪声点 ptCloud_R = pointCloud([a;ss]); % 可视化添加高斯噪声的点云 figure pcshow(ptCloud_R); title('添加随机噪声后的点云'); xlabel('X(m)'); ylabel('Y(m)'); zlabel('Z(m)'); hold on; %可视化添加随机噪声的点云 figure pcshow(ptCloud_N); title('添加高斯噪声后的点云'); xlabel('X(m)'); ylabel('Y(m)'); zlabel('Z(m)'); hold on; % 保存添加高斯噪声的点云 pcwrite(ptCloud_R,'12_R.ply','Encoding','binary'); %保存为binary形式的PLY点云 pcwrite(ptCloud_N,'12_N.ply','Encoding','binary');