MATLAB 限定 x 范围进行平面拟合
MATLAB 限定 x 范围进行平面拟合
本文将介绍如何在 MATLAB 中使用 SVD 方法进行平面拟合,并通过限定 x 范围来筛选数据,以获得更精准的拟合结果。
原始代码:
clc;
close all;
% 读取 CSV 文件
data = csvread('D:\桌面\点云\del-point.csv');
% 提取 x 和 y 坐标
x = data(:, 1);
y = data(:, 2);
z = data(:, 3);
% 绘制所有点
scatter3(x, y, z);
xlabel('X');
ylabel('Y');
zlabel('Z')
title('坐标点分布');
hold on;
planeData=[x,y,z];
% 协方差矩阵的SVD变换中,最小奇异值对应的奇异向量就是平面的方向
xyz0=mean(planeData,1);
centeredPlane=bsxfun(@minus,planeData,xyz0);
[U,S,V]=svd(centeredPlane);
a=V(1,3);
b=V(2,3);
c=V(3,3);
d=-dot([a b c],xyz0);
% 图形绘制
xfit = min(x):0.1:max(x);
yfit = min(y):0.1:max(y);
[XFIT,YFIT]= meshgrid (xfit,yfit);
ZFIT = -(d + a * XFIT + b * YFIT)/c;
mesh(XFIT,YFIT,ZFIT);
限定 x 范围的代码:
clc;
close all;
% 读取 CSV 文件
data = csvread('D:\桌面\点云\del-point.csv');
% 提取 x 和 y 坐标
x = data(:, 1);
y = data(:, 2);
z = data(:, 3);
% 设置 x 范围
x_min = -10;
x_max = 10;
% 筛选符合 x 范围的点
idx = (x >= x_min) & (x <= x_max);
x_filtered = x(idx);
y_filtered = y(idx);
z_filtered = z(idx);
% 绘制筛选后的点
scatter3(x_filtered, y_filtered, z_filtered);
xlabel('X');
ylabel('Y');
zlabel('Z')
title('坐标点分布');
hold on;
% 构建平面拟合数据
planeData = [x_filtered, y_filtered, z_filtered];
% 协方差矩阵的SVD变换中,最小奇异值对应的奇异向量就是平面的方向
xyz0 = mean(planeData, 1);
centeredPlane = bsxfun(@minus, planeData, xyz0);
[U, S, V] = svd(centeredPlane);
a = V(1, 3);
b = V(2, 3);
c = V(3, 3);
d = -dot([a, b, c], xyz0);
% 图形绘制
xfit = x_min:0.1:x_max;
yfit = min(y_filtered):0.1:max(y_filtered);
[XFIT, YFIT] = meshgrid(xfit, yfit);
ZFIT = -(d + a * XFIT + b * YFIT) / c;
mesh(XFIT, YFIT, ZFIT);
解释:
- 筛选数据: 使用逻辑索引
idx来标记符合 x 范围的点,并提取对应的 x、y 和 z 坐标。 - 平面拟合: 使用筛选后的数据进行平面拟合,得到平面方程和绘制结果。
- 调整范围: 根据实际情况调整
x_min和x_max的值来限定 x 的范围。 - 路径: 确保将 CSV 文件的路径正确指定。
通过限定 x 范围,我们可以排除一些无关的数据,从而获得更精准的平面拟合结果。
应用场景:
该方法适用于需要对特定区域进行平面拟合的场景,例如:
- 对某个区域的点云数据进行平面拟合
- 对某个区域的地形进行建模
- 对某个区域的图像进行分析
注意:
- 确保数据类型一致
- 调整参数以获得最佳拟合结果
- 可以根据需要添加其他参数限制
原文地址: https://www.cveoy.top/t/topic/bPyz 著作权归作者所有。请勿转载和采集!