近似平面点云一般特征——粗糙度

这篇具有很好参考价值的文章主要介绍了近似平面点云一般特征——粗糙度。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

粗糙度

由前文《点云的凹凸性检验》

点云凹凸性检验(2/2)_三尺流流的博客-CSDN博客简单描绘点云里的“沟壑”和“山峰”。有的杂点请自行处理。https://blog.csdn.net/qq_55433334/article/details/125255479?spm=1001.2014.3001.5502的实验结果,我们可以看到:即便是在光滑的凸起表面,也存在凹陷的部分杂点。这些凹陷与凸起交错的部分表示:这部分的点云虽然是描述的是凸起体,但是仍然是表面较粗糙的凸起体。

近似平面点云一般特征——粗糙度

问:

近似平面点云一般特征——粗糙度

 现有一近似平面的粗糙点云,需要以此对应平面为基准,使用数值定量描述此平面点云的表面粗糙度。

粗糙度表征量

描述平面粗糙度时,需要先确定基准平面。这里推荐大佬博主M&Q的最小二乘法:

【MQ笔记】超简单的最小二乘法拟合平面(Python)_M&Q的博客-CSDN博客_最小二乘法拟合平面

在我们用二乘法进行平面拟合的时候,即存在处于平面上方的点也有处于平面下方的点,这种起伏的大小决定了平面是否是粗糙的。Sa为最老牌的三维表面粗糙度参数之一,此粗糙度描述的是凹凸不平的模型体积除以底面积得到的平均高度。

由公式:

近似平面点云一般特征——粗糙度

可得到复杂模型相对于基准平面的算术平均粗糙度,我们目前暂时以这个值作为平面是否光滑的表征量。但是点云是一种“数字信号”,而非“模拟信号”直接调用平均粗糙度公式时我们是缺少可以积分的函数Z(x,y)的。

近似平面点云一般特征——粗糙度

此时,依据点云对此公式做一点点修改:

近似平面点云一般特征——粗糙度

逻辑流

1.导入近似平面的点云。

2.最小二乘法拟合粗糙度基准平面。

2.计算原点云到基准平面点云投影的距离。

3.调用公式计算点云距离的均值。

完整代码

import open3d as o3d
import matplotlib.pyplot as plt
from numpy import *
import numpy as np


def roughness_projection(point_list, plane_list):

    sa_list = []
    for i in range(len(plane_list)):
        A, B, C, D = plane_list[i]
        f_a, f_b, f_c, f_d = -A, -B, -C, -D

        x = point_list[i][:, 0]
        y = point_list[i][:, 1]
        z = point_list[i][:, 2]


        distance = []

        xp = []
        yp = []
        zp = []
        for j in range(len(x)):
            xp.append(
                ((f_b ** 2 + f_c ** 2) * x[j] - f_a * (f_b * y[j] + f_c * z[j] + f_d)) / (f_a ** 2 + f_b ** 2 + f_c ** 2))
            yp.append(
                ((f_a ** 2 + f_c ** 2) * y[j] - f_b * (f_a * x[j] + f_c * z[j] + f_d)) / (f_a ** 2 + f_b ** 2 + f_c ** 2))
            zp.append(
                ((f_a ** 2 + f_b ** 2) * z[j] - f_c * (f_a * x[j] + f_b * y[j] + f_d)) / (f_a ** 2 + f_b ** 2 + f_c ** 2))
            distance.append(((x[j] - xp[j]) ** 2 + (y[j] - yp[j]) ** 2 + (z[j] - zp[j]) ** 2) ** (0.5))
        sa = mean(distance)
        sa_list.append(sa)
    return sa_list

def roughness_view(point_list, plane_list):

    fig1 = plt.figure()
    ax1 = fig1.add_subplot(111, projection='3d')
    ax1.set_xlabel("x")
    ax1.set_ylabel("y")
    ax1.set_zlabel("z")

    for i in range(len(plane_list)):
        x = point_list[i][:, 0]
        y = point_list[i][:, 1]
        z = point_list[i][:, 2]
        A, B, C, D = plane_list[i]
        a, b, c, d = A, B, -C, D

        ax1.scatter(x, y, z, color='gray', marker='.')

        x_p = np.linspace(min(x),max(x), 100)
        y_p = np.linspace(min(y),max(y), 100)
        x_p, y_p = np.meshgrid(x_p, y_p)
        z_p =a * x_p + b * y_p + d
        ax1.plot_wireframe(x_p, y_p, z_p, rstride=10, cstride=10)

    plt.show()
    return None



if __name__ == '__main__':
    # 拟合平面:z = 0.559 * x + 0.164 * y + -11.822
    plane_list = [[0.559, 0.164, -1, -11.822]]
    point_list = []
    pcd = o3d.io.read_point_cloud("D:\1.pcd")
    pcd = np.asarray(pcd.points)
    point_list.append(pcd)

    sa_list = roughness_projection(point_list, plane_list)
    print("sa算术平均粗糙度:",sa_list)
    roughness_view(point_list, plane_list)

近似平面点云一般特征——粗糙度

 近似平面点云一般特征——粗糙度

 即为此近似平面点云的算术平均粗糙度。文章来源地址https://www.toymoban.com/news/detail-471387.html

到了这里,关于近似平面点云一般特征——粗糙度的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 谈主成分分析/因子分析中的特征值“矩阵近似”

    主成分分析和因子分析是数据降维的常用手段,其中以特征值为载体,在不断降维“近似”原本的协方差矩阵。 CSDN中一些文章在介绍这个问题或者叫“特征值分解”时,讲得都比较学术化,今天用一个小例子,还是面向新人,来引导理解“特征值分解”和“矩阵近似”(图

    2024年02月05日
    浏览(33)
  • openCV实战-系列教程7:轮廓检测2与模板匹配(轮廓检测/轮廓特征/轮廓近似/轮廓边界矩阵/轮廓边界圆/模版匹配)、原理解析、源码解读

    打印一个图片可以做出一个函数: 前面我们计算了这个图片的轮廓:  它的轮廓信息保存在了contours中,取出第一个轮廓,计算相关参数: 打印结果: 8500.5  437.9482651948929 这是分别求出了周长和面积,这里的True表示的是否是闭合的。    如图,第一个图是原图,如果将它的

    2024年02月10日
    浏览(29)
  • 详解平面点云面积计算

    部分代码展示: (1)利用格网法计算面积: (2)利用鞋带定理矩阵计算面积: 源代码及测试数据下载链接:https://download.csdn.net/download/qq_32867925/88847794

    2024年02月21日
    浏览(26)
  • Linux的shell(极其粗糙版)

    Shell脚本: 脚本主要是为了业务,辅助人工,实现自动化运维 Shell:介于用户和内核之间,充当翻译官的作用,当用户执行相关的命令,shell会把指令二进制传给内核,内核处理完毕以后通过shell把内核的执行结果,转换成人类能够识别的语言 Linux中的shell种类: Sh:已淘汰 Bash:默

    2024年02月08日
    浏览(30)
  • ZZULIOJ 1184: 平面点排序(二)(结构体专题),Java

    题目描述 平面上有n个点,坐标均为整数。横坐标相同时按纵坐标排序,否则按横坐标排序。本题要求用结构体存储坐标,再进行排序。先升序排序输出,再降序排序输出,可以自己写排序函数,也可以用qsort库函数排序。 输入 第一行是整数 n ( 1 = n = 100 ) n(1=n=100) n ( 1 = n =

    2024年02月15日
    浏览(29)
  • 基于距离的平面点模式统计方法(pysal.pointpats doc)

    来源:https://github.com/pysal/pointpats/blob/main/notebooks/distance_statistics-numpy-oriented.ipynb 点模式的基于距离的方法有三种类型: Mean Nearest Neighbor Distance Statistics Nearest Neighbor Distance Functions Interevent Distance Functions 此外,我们将介绍一种计算技术Simulation Envelopes,以帮助对数据生成过程进

    2024年02月09日
    浏览(31)
  • 3D点云处理:圆柱侧面点云展开为平面 凹凸缺陷检测(附源码)

    订阅说明:如果要订阅,先看链接内容 看链接内容 看链接内容:订阅先看此内容 文章目录: 3D视觉个人学习目录 目标:对采集的圆柱面点云展开为平面; 应用:可用于检测圆柱侧面的凹凸缺陷;       圆柱的侧面展开原理是将一个圆柱体(或柱体)的侧面展开成一个矩

    2024年02月09日
    浏览(102)
  • 平面点云的边界提取——Open3D实现方案

    平面点云的边界提取——Open3D实现方案 在计算机视觉领域中,平面点云(point cloud)是指由若干个点构成的三维坐标点集合。其广泛应用于机器人导航、三维重建、虚拟现实等领域。然而,对于要对点云中物体的边界进行提取的情况,传统方法常常表现得较为繁琐。因此,本

    2024年02月10日
    浏览(28)
  • 基于Hadoop分布式存储的网盘系统实现(简易粗糙版)

    大家好,我是邵奈一,一个不务正业的程序猿、正儿八经的斜杠青年。 1、世人称我为:被代码耽误的诗人、没天赋的书法家、五音不全的歌手、专业跑龙套演员、不合格的运动员… 2、这几年,我整理了很多IT技术相关的教程给大家,爱生活、爱分享。 3、如果您觉得文章有

    2024年02月10日
    浏览(45)
  • vue+echarts——实现3D地图+3D柱状图 效果——粗糙代码记录——技能提升

    最近看到同事在弄下面的这个图,这个图是从网上看到的,是某个网站的收费项目: 所以,最后的决定是通过 echarts 中的 3D地图 来写。但是写出来的效果不慎好看。功能是可以实现的。 初版效果图如下: 直接上代码: 我这边是存储到当前文件夹中了。。。 背景颜色是 ec

    2024年02月09日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包