open3d 源码阅读image_processing.py

news2024/10/6 16:26:45

目录

1. open3d.geometry.Image和numpy互转

2. 对open3d.geometry.Image进行高斯过滤

3. 高斯金字塔过滤

4. sobel过滤

5. 可视化o3d.geometry.Image


1. open3d.geometry.Image和numpy互转

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.image as mpimg

import open3d as o3d
#conda install pillow matplotlib

if __name__ == "__main__":

    # 1. open3d.geometry.Image 转 numpy
    print("Testing image in open3d ...")
    print("Convert an image to numpy")
    sample_image = o3d.data.JuneauImage()
    x = o3d.io.read_image(sample_image.path)  # open3d.geometry.Image
    np_x = np.asarray(x)  # (h,w,3)
    print(np.asarray(x))  # open3d.geometry.Image 转 numpy

    # 2. numpy转pen3d.geometry.Image
    print(
        "Convert a numpy image to o3d.geometry.Image and show it with DrawGeomtries()."
    )
    y = mpimg.imread(sample_image.path)  # numpy. (h,w,3)
    print(y.shape)
    yy = o3d.geometry.Image(y)  # numpy 转 open3d.geometry.Image
    print(yy)
    o3d.visualization.draw_geometries([yy])

    # 3. 单通道图numpy转pen3d.geometry.Image
    print("Render a channel of the previous image.")
    z = np.array(y[:, :, 1])  # (h,w,3)->(h,w)
    print(z.shape)
    print(z.strides)
    zz = o3d.geometry.Image(z)  # numpy转open3d.geometry.Image
    print(zz)
    o3d.visualization.draw_geometries([zz])
    # 保存open3d.geometry.Image
    print("Write the previous image to file.")
    o3d.io.write_image("test.jpg", zz, quality=100)

2. 对open3d.geometry.Image进行高斯过滤

print("Testing basic image processing module.")
sample_image = o3d.data.JuneauImage()
im_raw = mpimg.imread(sample_image.path)  # numpy
im = o3d.geometry.Image(im_raw)   # numpy转open3d.geometry.Image。3通道
im_g3 = im.filter(o3d.geometry.ImageFilterType.Gaussian3)  # kernel 3. 单通道结果
im_g5 = im.filter(o3d.geometry.ImageFilterType.Gaussian5)
im_g7 = im.filter(o3d.geometry.ImageFilterType.Gaussian7)
im_gaussian = [im, im_g3, im_g5, im_g7]  # 4个尺度:m, m/2, m/4, m/8

3. 高斯金字塔过滤

对o3d.geometry.Image,先Gaussian过滤,再下采样。

# 对im(o3d.geometry.Image) 进行下采样: im, img/2, img/4, img/8
pyramid_levels = 4
pyramid_with_gaussian_filter = True
im_pyramid = im.create_pyramid(pyramid_levels, pyramid_with_gaussian_filter)  # 先Gaussian,再下采样. list

4. sobel过滤

# sobel x: 一张图片im.filter; 多张图片list. o3d.geometry.Image.filter_pyramid
im_dx = im.filter(o3d.geometry.ImageFilterType.Sobel3dx)  # return open3d.geometry.Image
im_dx_pyramid = o3d.geometry.Image.filter_pyramid(im_pyramid, o3d.geometry.ImageFilterType.Sobel3dx)  # sobel x
# sobel y
im_dy = im.filter(o3d.geometry.ImageFilterType.Sobel3dy)
im_dy_pyramid = o3d.geometry.Image.filter_pyramid(im_pyramid, o3d.geometry.ImageFilterType.Sobel3dy)

5. 可视化o3d.geometry.Image

switcher = {
    0: im_gaussian,  # 纯高斯过滤
    1: im_pyramid,   # 高斯金字塔
    2: im_dx_pyramid, # 高斯金字塔 + sobel x
    3: im_dy_pyramid, # 高斯金字塔 + sobel y
}
for i in range(4):
    for j in range(pyramid_levels):
        plt.subplot(4, pyramid_levels, i * 4 + j + 1)
        plt.imshow(switcher.get(i)[j])  # switcher.get(i): 第一行是纯高斯过滤,第二行是高斯金字塔,第三行是sobel x,最后是y
plt.show()

 以下图片:

第一行是纯高斯过滤im_gaussian;
第二行是高斯金字塔im_pyramid;
第三行是im_dx_pyramid;
最后一行是im_dy_pyramid.

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

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

相关文章

Midjourney从入门到精通

前言 什么是AI绘画 AI 绘画,顾名思义就是利用人工智能进行绘画,是人工智能生成内容(AIGC)的一个应用场景。其主要原理就是收集大量已有作品数据,通过算法对它们进行解析,最后再生成新作品,而算…

vue框架快速入门

vue 1、第一个Vue程序1.1、什么是Vue程序1.2、为什么要使用MVVM1.3、Vue1.4、第一个vue程序 2、基础语法2.1、v-bind2.2、v-if, v-else2.3、v-for2.4、v-on 3、Vue表单双绑、组件3.1、什么是双向数据绑定3.2、在表单中使用双向数据绑定3.3、什么是组件 4、Axios异步…

NixOS Legacy Boot(MBR) VmwareWorkstation安装向导

NixOS & Legacy Boot(MBR) VmwareWorkstation安装向导 目录 NixOS & Legacy Boot(MBR) VmwareWorkstation安装向导1. 下载镜像2. 创建空白虚拟机3. 使用命令行安装 NixOS3.1 Legacy Boot(MBR)3.2 格式化 4. configration.nix 配置文件5. 部署NixOS6. 部分教育站镜像源集…

Maven 3.9.1下载安装配置一条龙(无压力)亲测

这里写自定义目录标题 前言一、下载 Apache Maven 3.9.11.1、请先检查自己的IDEA是否有这个条件,是否兼容1.2、Maven下载 二、Windows安装配置Maven2.1、解压2.2、新建 repository 本地仓库2.3、配置环境变量MAVEN_HOME 软件路径M2_HOME 本地仓库路径配置Path2.3.1新…

关于maven

一、maven是什么 一个java项目构建工具 二、maven的作用 (1)依赖管理 不同框架整合,互相依赖jar包版本不同,版本不一样,程序跑起来就会报错。用maven管理jar包。 (2)跨平台构建项目 linux服…

数字信号处理3:A/D、D/A转换

信号这个东西,我们是实际应用中用的大多都是模拟信号,比如说语音、地震、雷达、声纳信号,这些都是模拟信号,但是,计算机想要通过数学方法处理模拟信号,就要先将模拟信号转换成具有有限精度的数字序列&#…

L4公司进军辅助驾驶,放话无图也能跑遍中国

作者 | Amy 编辑 | 德新 高阶智能驾驶走向规模量产,高精地图成为关键的门槛之一。今年,多家车企和智驾公司都喊出「不依赖高精地图,快速大规模落地」的口号。 华为、小鹏、元戎以及毫末等,可能是最快在国内量产 无高精图智…

TCP/IP网络编程(一)

TCP/IP网络编程读书笔记 第1章 理解网络编程和套接字1.1 理解网络编程和套接字1.1.1 构建打电话套接字1.1.2 编写 Hello World 套接字程序 1.2 基于Linux的文件操作1.2.1 底层访问和文件描述符1.2.2 打开文件1.2.3 关闭文件1.2.4 将数据写入文件1.2.5 读取文件中的数据1.2.6 文…

AI仿写软件-仿写文章生成器

AI仿写软件:高效出色的营销利器 作为互联网时代的营销人员,我们不仅需要品牌意识,还必须深谙营销技巧。万恶的时限压力使得我们不得不在有限的时间内输出更多的文本内容,以便吸引更多的关注。那么,如何解决这个问题呢…

C++网络基础知识面试题2

目录 1、使用TCP的常见协议有哪些?使用UDP的常见协议有哪些?简单说几个 2、如何判断访问目标地址的网络是通的?如何简单地查看到目标地址的网络是否有丢包和抖动? 3、如果知道目标服务器的服务端口有没有开启? 4、…

【NodeJs】使用Express框架快速搭建一个web网站

如果电脑有安装使用Nodejs,用得次数少的话,忘了怎么弄,可以看看这个文章,按照步骤,能快速搭建一个web网站服务器, 首先,你需要保证电脑系统有安装了Node.js,然后可以用VsCode开发工…

Java多线程基础概述

简述多线程: 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程,提升性能。 正式着手代码前,需要先理清4个概念:并发,并行,进程&#…

ChatGPT带你领略自动驾驶技术

一、自动驾驶技术现概述 自动驾驶技术是指利用计算机、传感器和其他设备,使车辆能够在不需要人类干预的情况下自主行驶的技术。目前,自动驾驶技术已经在一些汽车厂商和科技公司中得到广泛应用,但仍然存在一些技术和法律上的挑战,需…

c++类友元函数理解(图、文、代码)

序: 1、初学c,理解阶段,一下为个人理解和案例,陆续更新 一、友元函数和普通函数区别 类的友元函数是函数,但是他可以调用类的私有变量,以下代码,Fun2是报错的,因为这个函数跟A没任…

基于SSM框架流浪动物救助及领养管理系统(spring+springmvc+mybatis+jsp+jquery+layui)

一、项目简介 本项目是一套基于SSM框架流浪动物救助及领养管理系统,主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目附带全部源码可作为毕设使用。 项目都经过严格调试&…

java错题总结(28-30页)

------------------------------------------------------------------------------------------- ------------------------------------------------------------------------------------------- 不考虑类加载, --------------------------------------------…

实验三 磁盘调度算法设计

实验三 磁盘调度算法设计 实验目的: 通过对磁盘调度算法的设计,深入理解提高磁盘访问速度的原理。 实验内容: 模拟实现磁盘调度算法:最短寻道时间优先(SSTF)和扫描(SCAN)算法。 …

数字化转型导师坚鹏:企业数字化转型培训如何高效推进评价与改进

企业数字化转型培训如何高效推进、评价与改进 ——以推动企业数字化转型战略落地为核心,实现知行果合一 课程背景: 很多企业都在开展企业数字化转型培训工作,目前存在以下问题急需解决: 不清楚如何有效推进企业数字化转型培训…

JavaScript 箭头函数

(许多人所谓的成熟,不过是被习俗磨去了棱角,变得世故而实际了。那不是成熟,而是精神的早衰和个性的消亡。真正的成熟,应当是独特个性的形成,真实自我的发现,精神上的结果和丰收。——周国平&…

Vue|内置指令

Vue的内置指令是带有v-前缀的特殊属性,它的作用是当表达式的值改变时将其一系列连带影响,响应地作用于DOM元素。 推荐专栏:微信小程序实战开发专栏 内置指令v-text指令v-html指令v-cloak指令v-once指令v-pre指令 内置指令 开始前的准备&#…