Python随机生成2堆三维点云点,有固定的重复率并可视化

news2024/11/18 3:31:10

Python随机生成2堆三维点云点,有固定的重复率并可视化

    • 1. 效果图
    • 2. 源码

这篇博客源于博友的提问,刚好电脑在旁边没啥事,那就开整吧。

  1. np.random 生成随机点(提供了俩种方法,1. xyz限制都是0~MAX值,2. xyz分别限制最大值为0~MAXxyz)

  2. 第一堆生成完成后,第2堆确定的是重复的点,然后生成剩余的点,生成过程要注意判断不能生成已经有了的点

  3. open3d可视化及计算验证重复率。

1. 效果图

随机生成俩堆点云10000点,重复率0.3,3000个重复点效果图如下:
在这里插入图片描述

xyz均为0~MAX:
第1堆点红色 VS 第2堆点绿色效果图如下:
在这里插入图片描述

xyz分别限定0~MAXxyz:
第1堆点红色 VS 第2堆点绿色效果图如下:
在这里插入图片描述

在这里插入图片描述

2. 源码

# 随机生成俩堆点云,具有固定的重复率
# gene_repeat_points.py

import random

import numpy as np
import open3d as o3d

# 点个数,重复率
total_cnt = 10000
rate = 0.3

# xyz 最大值范围
max = 10
MAXX, MAXY, MAXZ = 3, 4, 7
repeat_cnt = int(total_cnt * rate)

# 随机种子,以便复现结果

random.seed(10)


# flag=1 xyz均为0~max值
# flag=其他值 xyz分别为x~MAXX,y~MAXY,z~MAXZ
def gene_one_point(flag=1):
    if flag == 1:
        pts = np.array(np.random.random(size=(3,)) * max)
    else:
        x = np.random.random() * MAXX
        y = np.random.random() * MAXY
        z = np.random.random() * MAXZ
        pts = np.array([x, y, z])
    return pts


# 随机生成点云点points
def point_generator(total_cnt):
    result = []
    for i in range(total_cnt):
        pts = gene_one_point(flag=1)
        result.append(list(pts))
    return result


origin_points = point_generator(total_cnt)
print(type(origin_points), len(origin_points), origin_points[:5])


def repeat_point_generator(origin_points, total_cnt):
    result = []
    set_points = set()
    for x in origin_points:
        set_points.add(str(x[0]) + '_' + str(x[1]) + '_' + str(x[2]))
    result = [x for x in origin_points]
    while (len(result) < total_cnt):
        pts = pts = gene_one_point(flag=1)
        key = str(pts[0]) + '_' + str(pts[1]) + '_' + str(pts[2])
        if key in set_points:
            continue
        else:
            set_points.add(key)
        result.append(list(pts))
    return result


points2 = repeat_point_generator(origin_points[:repeat_cnt], total_cnt)
print(type(points2), len(points2), points2[:5])

# 构造点云数据
pcd = o3d.geometry.PointCloud()
points = o3d.utility.Vector3dVector(origin_points)
pcd.points = points
pcd.paint_uniform_color([1, 0, 0])  # 把原始点渲染为红色
pcd2 = o3d.geometry.PointCloud()
pcd_points = o3d.utility.Vector3dVector(points2)
pcd2.points = pcd_points
pcd2.paint_uniform_color([0, 1, 0])  # 把原始点渲染为绿色
o3d.visualization.draw_geometries([pcd, pcd2], "Open3D origin VS repeatAfter",
                                  width=800,
                                  height=600, left=50,
                                  top=50,
                                  point_show_normal=False, mesh_show_wireframe=False,
                                  mesh_show_back_face=False)

np_origin = np.array([str(x[0]) + '_' + str(x[1]) + '_' + str(x[2]) for x in origin_points])
np_origin2 = np.array([str(x[0]) + '_' + str(x[1]) + '_' + str(x[2]) for x in points2])
inters = np.intersect1d(np_origin, np_origin2)
print('inter: ', len(inters))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/734158.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA中使用.env文件配置信息

一、说明 我们以配置阿里云的 Access Key 的信息为例&#xff08;配置别的信息当然也可以&#xff0c;我只是举个例子&#xff01;&#xff01;&#xff01;&#xff09;&#xff0c;假设我们的代码中需要用到它。Access Key有两个属性&#xff0c;分别为【ALIBABA_CLOUD_ACCE…

【剧前爆米花--前端三剑客】html的一些常用标签及其实例

作者&#xff1a;困了电视剧 专栏&#xff1a;《JavaEE初阶》 文章分布&#xff1a;这是一篇关于html前端的文章&#xff0c;在这篇文章中我会简单介绍一些常用的html标签&#xff0c;并给出他们的应用实例&#xff0c;希望对你有所帮助&#xff01; 目录 html常见标签 标题标…

python_day3_tuple

元组tuple &#xff1a;无法修改&#xff08;只读的列表&#xff09; t1 () t2 tuple() t3 (1, java, True, ()) print(f"t1的数据类型是&#xff1a;{type(t1)}") print(f"t2的数据类型是&#xff1a;{type(t2)}") print(f"t3的数据类型是&#…

ChatLaw:北大团队智能法律助手,国产大模型成功应用普惠法律服务

“ 技术发展的本质是普惠&#xff0c;用技术降低普通人获取法律知识的成本&#xff0c;向社会输出普惠的公平正义。—— 北京大学 ChatLaw 项目组” 刚刚清华团队升级了国产大模型&#xff1a;ChatGLM2-6B&#xff0c;ChatGLM2-6B 初体验。 转眼这两天北大团队推出的智能法律助…

DAY36:贪心算法(三)最大子数组和+买卖股票最佳时机

文章目录 53.最大子数组和枚举思路暴力解法贪心思路完整版时间复杂度 122.买卖股票的最佳时机Ⅱ&#xff08;解法比较巧妙&#xff09;思路完整版总结 53.最大子数组和 给你一个整数数组 nums &#xff0c;请你找出一个具有最大和的连续子数组&#xff08;子数组最少包含一个元…

Java开发基础系列(一):Java设计概述

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Java开发基础系列(一):Java设计概述 ⏱️ 创作时间&#xff1a; 2023年…

【漏洞复现】nginxWebUI 存在前台远程命令执行漏洞

文章目录 前言声明一、nginxWebUI 简介二、漏洞描述三、影响版本四、漏洞复现五、修复建议 前言 nginxWebUI 存在前台远程命令执行漏洞&#xff0c;攻击者通过该漏洞获取服务器控制权限进而进一步获取敏感数据信息。 声明 请勿利用文章内的相关技术从事非法测试&#xff0c;由…

# 文盘Rust -- FFI 浅尝

作者&#xff1a; jiashiwen 原文来源&#xff1a; https://tidb.net/blog/cfa03c39 notice"Rust is a trademark of the Mozilla Foundation in the US and other countries." rust FFI 是rust与其他语言互调的桥梁&#xff0c;通过FFI rust 可以有效继承 C 语言…

道德与社会问题简报 #4: 文生图模型中的偏见

简而言之: 我们需要更好的方法来评估文生图模型中的偏见 介绍 文本到图像 (TTI) 生成 现在非常流行&#xff0c;成千上万的 TTI 模型被上传到 Hugging Face Hub。每种模态都可能受到不同来源的偏见影响&#xff0c;这就引出了一个问题: 我们如何发现这些模型中的偏见&#xff1…

Android启动流程优化 上篇

Android启动流程优化 上篇 本文链接&#xff1a;Android启动流程优化 上篇_猎羽的博客-CSDN博客 启动流程 各个阶段图 1、各个阶段的概括总结 分为5个大阶段或者10个小阶段 【字节跳动团队】内部论坛分享也是这么处理的 补充一些只是细节点: application#onCreate()运行…

基于多案例系统学习防洪评价报告编制方法与水流数学模型建模(HECRAS、MIKE、EFDC、Delft3D、FVCOM、SWAT、SWMM等模型应用)

目录 ​专题一 《防洪评价报告编制导则解读河道管理范围内建设项目编制导则》&#xff08;SL/T808- 2021&#xff09;解读编制导则解读 专题二 防洪评价相关制度与解析 ★专题三 案例演练解析 专题四 防洪评价地形获取及常用计算实践 专题五 HEC-RAS软件原理及应用案例解析…

leetcode160.相交链表

https://leetcode.cn/problems/intersection-of-two-linked-lists/solution/ 相交链表是指两个单向链表在某个节点处相交&#xff0c;之后形成了共同的后续部分。通常&#xff0c;两个链表的长度不相等。在相交节点之前&#xff0c;两个链表的节点数可能不同&#xff0c;但在相…

Java后端编译与优化

如果我们将字节码看作是程序语言的一种中间表示形式&#xff0c;那编译器无论在何时、在何种状态下把Class文件转换成与本地基础设施相关的二进制机器码&#xff0c;它都可以视为整个编译过程的后端。 1 即时编译器 即时编译器是指运行时将热点代码编译成本地机器码&#xff…

程序员必须掌握哪些算法?——前端开发工程师需要掌握的算法

文章目录 &#x1f4cb;前言&#x1f3af;什么是算法&#xff1f;&#x1f3af;前端开发工程师需要掌握的算法&#x1f9e9;排序算法&#xff08;如快速排序、归并排序&#xff09;&#x1f9e9;搜索算法&#xff08;如二分搜索&#xff09;&#x1f9e9;图算法&#xff08;如广…

【Unity造轮子】2D横版平台跳跃游戏实现多段跳完美手感(含源码)

文章目录 前言先看效果&#xff0c;手感很丝滑原理开始1. 看到检测点的检测范围2. 二段跳实现3. 动画控制器配置 源码扩展完结 前言 随着游戏技术的不断发展&#xff0c;2D横版平台跳跃游戏成为许多玩家的最爱。这类游戏以其简单而有趣的玩法和精致的视觉效果吸引着无数游戏爱…

Kotlin~Decorator装饰器模式

概念 装饰模式指的是在不必改变原类文件和使用继承的情况下&#xff0c;动态地扩展一个对象的功能。它是通过创建一个包装对象&#xff0c;也就是装饰来包裹真实的对象。可以运行时动态添加新的功能&#xff0c;而无需改变原来的代码。 特点&#xff1a; 灵活扩展新的功能动态…

接口设计的总结

目录 前言 设计好接口的 36 个锦囊 总结 前言 作为后端开发&#xff0c;不管是什么语言&#xff0c;Java、Go 还是 C&#xff0c;其背后的后端思想都是类似的。我们做后端开发工程师&#xff0c;主要工作就是&#xff1a;如何把一个接口设计好。所以&#xff0c;今天就给大家…

北京大学考研机试题:二叉树

【题目来源】https://www.acwing.com/problem/content/description/3474/【题目描述】 如上图所示&#xff0c;由正整数 1&#xff0c;2&#xff0c;3…… 组成了一颗特殊二叉树。 我们已知这个二叉树的最后一个结点是 n。 现在的问题是&#xff0c;结点 m 所在的子树中一共包括…

MobileNeRF在Windows上的配置

MobileNeRF于2023年提出&#xff0c;源码地址&#xff1a;https://github.com/google-research/jax3d/tree/main/jax3d/projects/mobilenerf &#xff0c;论文为&#xff1a;《MobileNeRF: Exploiting the Polygon Rasterization Pipeline for Efficient Neural Field Renderin…

QT自定义工具条渐变背景颜色一例

使用样式定义&#xff1a; QWidget* toolbar new QWidget(this);toolbar->setObjectName("main_tool");toolbar->setStyleSheet("#main_tool{background: qlineargradient(x1:0 , y1:0 , x2:1 , y2:0,""stop:0 rgba(0,255,0, 0.2),"&q…