国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Matlab 最小二乘法 擬合平面 (PCL PCA擬合平面)

這篇具有很好參考價值的文章主要介紹了Matlab 最小二乘法 擬合平面 (PCL PCA擬合平面)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、原理推導(dǎo)

最小二乘法 擬合平面是我們最常用的擬合平面的方法,但是有特殊的情況是用這種方法是不能擬合的,后續(xù)會加上這種擬合方法(RANSAC)。

matlab 最小二乘擬合平面(方法一) - 灰信網(wǎng)(軟件開發(fā)博客聚合)

平面方程:Ax+By+Cz+D=0;

matlab平面擬合,matlab,PCL,matlab,PCL

matlab平面擬合,matlab,PCL,matlab,PCL

?matlab平面擬合,matlab,PCL,matlab,PCL

二、Matlab 實現(xiàn)

1、隨機(jī)出來一些離散的點

>> clear
>> close all
>> % 隨機(jī)生成一組(x,y,z)這些點的坐標(biāo)離一個平面比較近
>> x0=1;L1=2;
>> y0=1;L2=2;
>> x=x0+rand(20,1)*L1;
>> y=y0+rand(20,1)*L2;
>> z=1+2*x+3*y;
>> scatter3(x,y,z,'filled')

matlab平面擬合,matlab,PCL,matlab,PCL??

2、將其寫成矩陣的形式:

matlab平面擬合,matlab,PCL,matlab,PCL

matlab平面擬合,matlab,PCL,matlab,PCL

x_a=sum(x)/length(data);% length(data)==20
y_a=sum(y)/length(data);
z_a=sum(z)/length(data);

% 平方的均值====================================================
xx_a=sum(x.*x)/length(data);
yy_a=sum(y.*y)/length(data);
zz_a=sum(z.*z)/length(data);

xy_a=sum(x.*y)/length(data);
xz_a=sum(x.*z)/length(data);
yz_a=sum(y.*z)/length(data);

matlab平面擬合,matlab,PCL,matlab,PCL

?3、求出a0? a1 a2也就是 -A/C? ?-B/C? ?-D/C

b=[xz_a;yz_a;z_a];

XYZ=A^-1 *b;  % 方程求系數(shù)
a0=XYZ(1); % -A/C
a1=XYZ(2); % -B/C
a2=XYZ(3); % -D/C

4、求平面法向量

V=[a0 a1  -1];% 平面法向量
nor=norm(V); % 向量的模
normalize_V=[a0/nor  a2/nor  -1/nor]; % 平面法向量歸一化

matlab平面擬合,matlab,PCL,matlab,PCL

5、?開始繪制圖像

scatter3(x,y,z,'filled')
hold on;
xfit=min(x):0.1:max(x);  % 坐標(biāo)系的坐標(biāo)
yfit=min(y):0.1:max(y);
[XF,YF]=meshgrid(xfit,yfit);% 生產(chǎn)XY點列 

ZF=a0*XF+a1*YF+a2;  %計算Z的值

% 顯示
mesh(XF,YF,ZF)

matlab平面擬合,matlab,PCL,matlab,PCL

clear
close all
% 隨機(jī)生成一組(x,y,z)這些點的坐標(biāo)離一個平面比較近
x0=1;L1=2;
y0=1;L2=2;
x=x0+rand(20,1)*L1;
y=y0+rand(20,1)*L2;
z=1+2*x+3*y;
scatter3(x,y,z,'filled')
hold on;
data=[x,y,z];
x=data(:,1);
y=data(:,2);
z=data(:,3);
x_a=sum(x)/length(data);% length(data)==20
y_a=sum(y)/length(data);
z_a=sum(z)/length(data);

% 平方的均值====================================================
xx_a=sum(x.*x)/length(data);
yy_a=sum(y.*y)/length(data);
zz_a=sum(z.*z)/length(data);

xy_a=sum(x.*y)/length(data);
xz_a=sum(x.*z)/length(data);
yz_a=sum(y.*z)/length(data);


% 方程組的系數(shù)矩陣
A=[xx_a  xy_a  x_a;
   xy_a  yy_a  y_a;
   x_a   y_a    1];

b=[xz_a;yz_a;z_a];

XYZ=A^-1 *b;  % 方程求系數(shù)
a0=XYZ(1); % -A/C
a1=XYZ(2); % -B/C
a2=XYZ(3); % -D/C

V=[a0 a1  -1];% 平面法向量
nor=norm(V); % 向量的模
normalize_V=[a0/nor  a2/nor  -1/nor]; % 平面法向量歸一化


% 開始繪制圖像
scatter3(x,y,z,'filled')
hold on;
xfit=min(x):0.1:max(x);  % 坐標(biāo)系的坐標(biāo)
yfit=min(y):0.1:max(y);
[XF,YF]=meshgrid(xfit,yfit);% 生產(chǎn)XY點列 

ZF=a0*XF+a1*YF+a2;  %計算Z的值

% 顯示
mesh(XF,YF,ZF)





三維點集擬合:平面擬合、RANSAC、ICP算法_wishchin的博客-CSDN博客_三維曲面擬合算法

?PCL 基于PCA的平面擬合

matlab平面擬合,matlab,PCL,matlab,PCL文章來源地址http://www.zghlxwxcb.cn/news/detail-572050.html

?PCL的setIndices?函數(shù)

template <typename PointT> void
pcl::PCLBase<PointT>::setIndices (size_t row_start, size_t col_start, size_t nb_rows, size_t nb_cols)
{
  if ((nb_rows > input_->height) || (row_start > input_->height))
  {
    PCL_ERROR ("[PCLBase::setIndices] cloud is only %d height", input_->height);
    return;
  }

  if ((nb_cols > input_->width) || (col_start > input_->width))
  {
    PCL_ERROR ("[PCLBase::setIndices] cloud is only %d width", input_->width);
    return;
  }

  size_t row_end = row_start + nb_rows;
  if (row_end > input_->height)
  {
    PCL_ERROR ("[PCLBase::setIndices] %d is out of rows range %d", row_end, input_->height);
    return;
  }

  size_t col_end = col_start + nb_cols;
  if (col_end > input_->width)
  {
    PCL_ERROR ("[PCLBase::setIndices] %d is out of columns range %d", col_end, input_->width);
    return;
  }

  indices_.reset (new std::vector<int>);
  indices_->reserve (nb_cols * nb_rows);
  for(size_t i = row_start; i < row_end; i++)
    for(size_t j = col_start; j < col_end; j++)
      indices_->push_back (static_cast<int> ((i * input_->width) + j));
  fake_indices_ = false;
  use_indices_  = true;
}

#if 1  //  PCA的平面擬合

int main()
{
	// Findnowd();
	string  path = "C:\\Users\\Albert\\Desktop\\pcd\\plane.pcd";
	pcl::PointCloud<pcl::PointXYZ>::Ptr cloud(new pcl::PointCloud<pcl::PointXYZ>); // 創(chuàng)建點云(指針)

	if (pcl::io::loadPCDFile<pcl::PointXYZ>(path, *cloud) == -1) //* 讀入PCD格式的文件,如果文件不存在,返回-1
	{
		PCL_ERROR("Couldn't read file test_pcd.pcd \n"); //文件不存在時,返回錯誤,終止程序。
		return 0;
	}

	cout << " 點云的大小 : " << cloud->size() << endl;


	pcl::PCA<pcl::PointXYZ> pca;
	pca.setInputCloud(cloud);
	Eigen::Matrix3f  ve=pca.getEigenVectors();
	cout << "矩陣:" << endl;
	cout << ve << endl;

	float  A, B, C, D;
	A = ve.col(2).row(0).value();
	B = ve.col(2).row(1).value();
	C = ve.col(2).row(2).value();

	cout << "平面參數(shù):    " << endl;
	cout << "  A:" << A << endl;
	cout << "  B:" << B << endl;
	cout << "  C:" << C << endl;


	//計算點云的質(zhì)心
	Eigen::Vector4d centroid;
	pcl::compute3DCentroid(*cloud, centroid);

	D = -(A * centroid[0] + B * centroid[1] + C * centroid[2]);
	cout << "  D:" << D << endl;

	


	system("pause");
	return (0);

}
#endif 

到了這里,關(guān)于Matlab 最小二乘法 擬合平面 (PCL PCA擬合平面)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進(jìn)行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MATLAB RANSAC平面擬合 (29)

    將一個平面與一個從內(nèi)點到平面的最大允許距離的點云相匹配。該函數(shù)返回描述平面的幾何模型。該函數(shù)采用 M- 估計量樣本一致性(MSAC)算法求解平面。MSAC 算法是隨機(jī)樣本一致性(RANSAC)算法的一個變體。 對具體的函數(shù)和內(nèi)部參數(shù)進(jìn)行介紹說明 model = pcfitplane(ptCloudIn,maxDistance)

    2024年02月15日
    瀏覽(16)
  • pcl matlab 計算平面與空間三角形的交線

    pcl matlab 計算平面與空間三角形的交線

    ?過程: 單有法向量不能確定一個平面,至少還要有平面上的一個點的坐標(biāo)才行 假如知道法向量n=(A,B,C) 而平面過某點M=(x0,y0,z0) 那么平面的方程為 A(x-x0)+B(y-y0)+C(z-z0)=0 要在圖中畫出來,那么先要給x,y一個范圍 舉個離子,平面法向量(1,1,1)過點(0,1,2) 畫出x,y在 -2~2區(qū)

    2024年02月12日
    瀏覽(22)
  • 將多組三維點擬合成平面方程MATLAB

    將多組三維點擬合成平面方程MATLAB

    將三維點擬合成平面方程可以使用最小二乘法。最小二乘法可以找到最優(yōu)的平面模型,使得擬合的平面與給定的三維點之間的誤差最小化。 以下是一個示例,演示如何使用最小二乘法將一組離散的三維點擬合成平面方程: 這段代碼實現(xiàn)了將三維點擬合成平面方程,逐行解釋

    2024年02月07日
    瀏覽(15)
  • PCL RANSAC擬合平面(C++詳細(xì)過程版)

    PCL RANSAC擬合平面(C++詳細(xì)過程版)

    本文由CSDN點云俠原創(chuàng),原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的爬蟲。 ??RANSAC擬合平面,采用的是不共線的三個點確定一個平面,據(jù)以實現(xiàn)原理見:PCL 三點確定一個平面原理及代碼

    2024年02月13日
    瀏覽(23)
  • 故障診斷 | 一文解決,PLS偏最小二乘法的故障診斷(Matlab)

    故障診斷 | 一文解決,PLS偏最小二乘法的故障診斷(Matlab)

    故障診斷 | 一文解決,PLS偏最小二乘法的故障診斷(Matlab) 偏最小二乘法(Partial Least Squares, PLS)是一種統(tǒng)計建模方法,用于建立變量之間的線性關(guān)系模型。它是對多元線性回歸方法的擴(kuò)展,特別適用于處理高維數(shù)據(jù)和具有多重共線性的數(shù)據(jù)集。 PLS的主要目標(biāo)是通過找到輸入

    2024年04月12日
    瀏覽(29)
  • 【數(shù)學(xué)建模筆記】【第四講(1)】擬合算法之最小二乘算法及其MATLAB實現(xiàn)

    【數(shù)學(xué)建模筆記】【第四講(1)】擬合算法之最小二乘算法及其MATLAB實現(xiàn)

    與插值問題不同,在擬合問題中不需要曲線一定經(jīng)過給定的點。擬合問題的目標(biāo)是尋求一個函數(shù)(曲線),使得該曲線在某種準(zhǔn)則下與所 有的數(shù)據(jù)點最為接近,即曲線擬合的最好(最小化損失函數(shù)) 【插值和擬合的區(qū)別】 插值算法中,得到的多項式f(x)要經(jīng)過所有樣本點。但

    2024年02月09日
    瀏覽(24)
  • 擬合算法之最小二乘法

    擬合算法之最小二乘法

    與插值問題不同,在擬合問題中不需要曲線一定經(jīng)過給定的點。擬合問題的目標(biāo)是追求一個函數(shù)(曲線),使得該曲線在某種準(zhǔn)測下與所有的數(shù)據(jù)點最為接近,即曲線擬合最好(最小化損失函數(shù))。 插值算法中,得到的多項式f(x)要經(jīng)過所有的樣本點。但是如果樣本點太多,

    2024年02月04日
    瀏覽(24)
  • 切比雪夫(最小區(qū)域法)平面擬合算法

    切比雪夫(最小區(qū)域法)平面擬合算法

    歡迎關(guān)注更多精彩 關(guān)注我,學(xué)習(xí)常用算法與數(shù)據(jù)結(jié)構(gòu),一題多解,降維打擊。 本期話題:切比雪夫(最小區(qū)域法)平面擬合算法 相關(guān)背景和理論 點擊前往 主要介紹了應(yīng)用背景和如何轉(zhuǎn)化成線性規(guī)劃問題 10到631個點,全部采樣自平面附近。 每個點3個坐標(biāo),坐標(biāo)精確到小數(shù)點

    2024年03月28日
    瀏覽(100)
  • 數(shù)值分析——曲線擬合的最小二乘法

    數(shù)值分析——曲線擬合的最小二乘法

    擬合曲線定義:求近似函數(shù) φ(x), 使之 “最好” 的逼近f(x) ,無需滿足插值原則. 這就是曲線擬合問題。 (時間緊迫直接看例子就行,智慧交通專業(yè)的補(bǔ)修課,可能理論學(xué)的不那么深入,主要是方法。) 超定方程組 是指方程個數(shù)大于未知量個數(shù)的方程組 。 最小二乘解 : 對于

    2024年02月09日
    瀏覽(21)
  • 最小二乘法的幾種擬合函數(shù)

    目錄 1.最小二乘法的原理和解決的問題 2.最小二乘法的公式解法 2.1? 擬合h(x)?= a * x 2.2 擬合 h(x) = a0 + a1*x 2.3擬合 h(x) = a0 + a1 *x + a3 * x^3 ?因為采用矩陣法來進(jìn)行最小二乘法的函數(shù)擬合時,會出現(xiàn)系數(shù)矩陣的逆矩陣不存在的情況有一定的局限性,所以本篇對公式法進(jìn)行簡單說明

    2024年02月13日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包