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

3D點(diǎn)云平面擬合算法

這篇具有很好參考價(jià)值的文章主要介紹了3D點(diǎn)云平面擬合算法。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

假設(shè)你有一組 3D 中的 n 個(gè)點(diǎn),并且想要為它們擬合一個(gè)平面。 在本文中,我將推導(dǎo)出一個(gè)簡(jiǎn)單的、數(shù)值穩(wěn)定的方法,并提供它的源代碼。 聽(tīng)起來(lái)很好玩? 我們開(kāi)始吧!

NSDT工具推薦:?Three.js AI紋理開(kāi)發(fā)包?-?YOLO合成數(shù)據(jù)生成器?-?GLTF/GLB在線編輯?-?3D模型格式在線轉(zhuǎn)換?-?可編程3D場(chǎng)景編輯器?-?REVIT導(dǎo)出3D模型插件?-?3D模型語(yǔ)義搜索引擎

首先,如果在網(wǎng)上尋找答案,你將得到的答案包括對(duì)協(xié)方差矩陣進(jìn)行奇異值分解以找到最小特征值的特征向量。 然而事實(shí)證明,這讓事情變得比他們需要的更加復(fù)雜。 讓我們從基礎(chǔ)開(kāi)始:

平面通常由法向量 n = [a, b, c]? 和距離 d 描述,因此對(duì)于平面 n · p + d = 0 上的點(diǎn) p = [x, y, z]?。我們可以 將其寫(xiě)為:

3D點(diǎn)云平面擬合算法,算法

但請(qǐng)注意,這是超定的 - 解空間(平面)是三維的,但上面的描述使用了四個(gè)值。 因此,讓我們首先通過(guò)限制解決方案空間來(lái)刪除一個(gè)組件。 我們通過(guò)任意指定 c = 1 來(lái)實(shí)現(xiàn)這一點(diǎn),即平面法線的 z 分量始終為 1(請(qǐng)注意,法線的長(zhǎng)度不需要為 1)。 如果你認(rèn)為這是一個(gè)潛在有問(wèn)題的假設(shè),那么你是對(duì)的——我們稍后會(huì)再討論這個(gè)問(wèn)題。 現(xiàn)在,讓我們定義:

3D點(diǎn)云平面擬合算法,算法

并求解a、b、d。 矩陣形式:

3D點(diǎn)云平面擬合算法,算法

接下來(lái),我們將這個(gè)矩陣轉(zhuǎn)置,然后從左側(cè)相乘以執(zhí)行線性最小二乘:

3D點(diǎn)云平面擬合算法,算法

轉(zhuǎn)置后相乘:

3D點(diǎn)云平面擬合算法,算法

其中 N 是點(diǎn)數(shù)。 現(xiàn)在這是聰明的部分:讓我們定義上面的 x,y,z 相對(duì)于點(diǎn)云的質(zhì)心(平均值)。 現(xiàn)在 Σx = Σy = Σz = 0 所以我們可以簡(jiǎn)化為:

3D點(diǎn)云平面擬合算法,算法

從最后一行(N·d = 0)我們可以得出結(jié)論:d = 0。這意味著如果所有點(diǎn)都相對(duì)于點(diǎn)云的質(zhì)心,則平面穿過(guò)原點(diǎn)。 換句話說(shuō):平面始終穿過(guò)輸入點(diǎn)的平均值。 我們現(xiàn)在可以去掉一個(gè)維度:

3D點(diǎn)云平面擬合算法,算法

克萊默規(guī)則告訴我們:

3D點(diǎn)云平面擬合算法,算法

我們可以通過(guò)將 n 乘以 D 來(lái)簡(jiǎn)化它(無(wú)論如何我們都需要對(duì) n 進(jìn)行歸一化),這給我們:

3D點(diǎn)云平面擬合算法,算法

就是這樣! 但請(qǐng)記住我們的假設(shè):平面法線的 z 分量不為零。 如果為零怎么辦? 那么可以證明上面的行列式 D 變?yōu)榱悴⑶椅覀兛梢猿粤恪?即使它不完全為零,但很接近,我們?nèi)匀粫?huì)得到不好的條件,從而得到不好的結(jié)果。 所以,我們能做些什么? 好吧,如果這些點(diǎn)跨越一個(gè)平面,則法線的至少一個(gè)分量必須非零。 因此,讓我們對(duì)三個(gè)單獨(dú)的假設(shè)進(jìn)行上述計(jì)算,其中哪個(gè)分量不為零。 然后我們簡(jiǎn)單地選擇表現(xiàn)最好的一個(gè),即具有最大行列式的那個(gè)。

注意:此方法將最小化垂直于主軸的殘差的平方,而不是垂直于平面的殘差的平方。 如果殘差很小(即你的點(diǎn)都靠近生成的平面),那么這種方法可能就足夠了。 但是,如果你的點(diǎn)分布比較分散,那么此方法可能不是最合適的。

這是 Rust 代碼:

// Constructs a plane from a collection of points
// so that the summed squared distance to all points is minimzized
fn plane_from_points(points: &[Vec3]) -> Option<Plane> {
    if points.len() < 3 {
        return None; // At least three points required
    }

    let mut sum = Vec3{x:0.0, y:0.0, z:0.0};
    for p in points {
        sum += p;
    }
    let centroid = sum * (1.0 / (points.len() as f64));

    // Calc full 3x3 covariance matrix, excluding symmetries:
    let mut xx = 0.0; let mut xy = 0.0; let mut xz = 0.0;
    let mut yy = 0.0; let mut yz = 0.0; let mut zz = 0.0;

    for p in points {
        let r = p - centroid;
        xx += r.x * r.x;
        xy += r.x * r.y;
        xz += r.x * r.z;
        yy += r.y * r.y;
        yz += r.y * r.z;
        zz += r.z * r.z;
    }

    let det_x = yy*zz - yz*yz;
    let det_y = xx*zz - xz*xz;
    let det_z = xx*yy - xy*xy;

    let det_max = max3(det_x, det_y, det_z);
    if det_max <= 0.0 {
        return None; // The points don't span a plane
    }

    // Pick path with best conditioning:
    let dir =
        if det_max == det_x {
            Vec3{
                x: det_x,
                y: xz*yz - xy*zz,
                z: xy*yz - xz*yy,
            }
        } else if det_max == det_y {
            Vec3{
                x: xz*yz - xy*zz,
                y: det_y,
                z: xy*xz - yz*xx,
            }
        } else {
            Vec3{
                x: xy*yz - xz*yy,
                y: xy*xz - yz*xx,
                z: det_z,
            }
        };

    Some(plane_from_point_and_normal(centroid, normalize(dir)))
}

原文鏈接:3D點(diǎn)云平面擬合 - BimAnt文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-784394.html

到了這里,關(guān)于3D點(diǎn)云平面擬合算法的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 3D點(diǎn)云處理:擬合球(附源碼)

    訂閱說(shuō)明:如果要訂閱,先看鏈接內(nèi)容 看鏈接內(nèi)容 看鏈接內(nèi)容:訂閱先看此內(nèi)容 文章目錄: 3D視覺(jué)個(gè)人學(xué)習(xí)目錄 ????? 球面擬合是一種用于找到最佳擬合球體的方法,通常使用最小二乘法進(jìn)行擬合。為了使用最小二乘法擬合球,我們首先需要定義一個(gè)損失函數(shù),并通過(guò)最

    2024年02月10日
    瀏覽(13)
  • Open3D Ransac擬合分割多個(gè)平面(方法二)

    ??算法的核心原理還是RANSAC擬合平面,具體理論可參考:Open3D 使用RANSAC分割平面。只是對(duì)代碼稍加修改使其適用于分割點(diǎn)云數(shù)據(jù)中的多個(gè)平面。

    2024年02月12日
    瀏覽(19)
  • Halcon3d 點(diǎn)云計(jì)算平面度
  • 3D測(cè)量之圓孔測(cè)量 擬合圓 點(diǎn)云變換

    3D測(cè)量之圓孔測(cè)量 擬合圓 點(diǎn)云變換

    此文中的圓孔測(cè)量是一項(xiàng)3D視覺(jué)技術(shù),旨在精確測(cè)量物體表面上的圓孔的直徑和中心坐標(biāo)。通過(guò)使用高精度3D相機(jī)(線激光輪廓儀或結(jié)構(gòu)體等)采集原始點(diǎn)云數(shù)據(jù),通過(guò)3D視覺(jué)算法能夠快速、準(zhǔn)確地分析物體上的圓孔特征,為制造和工程領(lǐng)域提供了強(qiáng)大的測(cè)量工具。 圓孔測(cè)量在

    2024年02月04日
    瀏覽(24)
  • Open3D 最小二乘擬合平面(SVD分解法)

    Open3D 最小二乘擬合平面(SVD分解法)

    本文由CSDN點(diǎn)云俠原創(chuàng),原文鏈接。爬蟲(chóng)網(wǎng)站自重。 本文實(shí)現(xiàn)矩陣奇異值分解方法的最小二乘擬合平面。原理如下: ??對(duì)于得到的

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

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

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

    2024年03月28日
    瀏覽(100)
  • ransac擬合平面,代替open3d的segment_plane

    使用open3d擬合平面并且求平面的法向量,open3d打包大概1個(gè)g的大小。 https://github.com/leomariga/pyRANSAC-3D/blob/master/pyransac3d/plane.py 用的時(shí)候發(fā)現(xiàn)代碼的速度比open3d的慢了50ms左右。找了一圈找到方法了 https://zhuanlan.zhihu.com/p/62238520 就是替換循環(huán)次數(shù) 經(jīng)過(guò)測(cè)試發(fā)現(xiàn),擬合的平面的精度

    2024年02月11日
    瀏覽(22)
  • 3D點(diǎn)云處理:圓柱側(cè)面點(diǎn)云展開(kāi)為平面 凹凸缺陷檢測(cè)(附源碼)

    訂閱說(shuō)明:如果要訂閱,先看鏈接內(nèi)容 看鏈接內(nèi)容 看鏈接內(nèi)容:訂閱先看此內(nèi)容 文章目錄: 3D視覺(jué)個(gè)人學(xué)習(xí)目錄 目標(biāo):對(duì)采集的圓柱面點(diǎn)云展開(kāi)為平面; 應(yīng)用:可用于檢測(cè)圓柱側(cè)面的凹凸缺陷; ????? 圓柱的側(cè)面展開(kāi)原理是將一個(gè)圓柱體(或柱體)的側(cè)面展開(kāi)成一個(gè)矩

    2024年02月09日
    瀏覽(133)
  • RANSAC算法在Python中的實(shí)現(xiàn)與應(yīng)用探索:線性擬合與平面擬合示例

    第一部分:RANSAC算法與其應(yīng)用 在我們的日常生活和多個(gè)領(lǐng)域中,如機(jī)器學(xué)習(xí),計(jì)算機(jī)視覺(jué),模式識(shí)別等,處理數(shù)據(jù)是一個(gè)非常重要的任務(wù)。尤其是當(dāng)我們需要從嘈雜的數(shù)據(jù)中獲取信息或擬合模型時(shí)。有時(shí)候,數(shù)據(jù)可能包含異常值或噪聲,這可能會(huì)對(duì)我們的結(jié)果產(chǎn)生重大影響。

    2024年02月13日
    瀏覽(38)
  • Open3D 實(shí)現(xiàn)建筑物點(diǎn)云立面和平面分割提取

    Open3D 實(shí)現(xiàn)建筑物點(diǎn)云立面和平面分割提取 點(diǎn)云數(shù)據(jù)在現(xiàn)實(shí)場(chǎng)景中廣泛應(yīng)用,例如建筑物三維重建、智能交通等領(lǐng)域。然而,點(diǎn)云數(shù)據(jù)量龐大且噪聲較多,因此需要對(duì)其進(jìn)行處理和分析。Open3D 是一款開(kāi)源的跨平臺(tái)點(diǎn)云處理庫(kù),在點(diǎn)云數(shù)據(jù)預(yù)處理、三維重建和可視化等方面有著

    2024年02月07日
    瀏覽(53)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包