Python:基于matplotlib与mayavi的3D可视化(点云+等值面)

文章目录

  • 一、3D可视化常用方法
  • 二、三维图像在numpy、cv2、以及tifffile.imread中通道的区别
  • 三、项目实战
  • 1、基于matplotlib的3D可视化(体素体)
  • 2、基于mayavi的3D可视化
    • 2.0、mayavi使用指南(鼠标)
    • 2.1、mlab.points3d()参数详解:用于绘制3D点云
      • 2.1.1、mlab.points3d:绘制小球
      • 2.1.2、mlab.points3d:绘制小立方体
      • 2.1.3、mlab.points3d:3D灰度/彩色图像的点云图(体素体)
    • 2.2、mlab.contour3d()参数详解:用于绘制3D等值面
      • 2.2.1、mlab.contour3d:3D灰度/彩色图像的等值面图(体素体)
      • 2.2.2、mlab.contour3d:3D灰度/彩色图像的等值面图(体素体)—— 在同一个视图中,选择指定像素值绘制指定颜色

一、3D可视化常用方法

3D可视化是一种用于呈现三维数据的方法,它可以帮助我们更好地理解和分析复杂的空间结构和关系。在科学、工程、医学和其他领域,3D可视化常用于展示和研究体数据、空间模型、分子结构等。

以下是一些常见的用于3D可视化的工具和库:

  1. Matplotlib:Matplotlib 是一个常用的Python数据可视化库,其中的 mplot3d 模块提供了3D可视化功能,可以绘制三维图形和表面图。
  2. Mayavi:Mayavi 是一个基于VTK(Visualization Toolkit)的强大的3D科学数据可视化工具,它提供了丰富的功能和交互性,支持绘制体数据、曲面、等值面、轮廓线等。
  3. Plotly:Plotly 是一个交互式的数据可视化库,支持绘制各种类型的3D图形,包括散点图、线图、曲面图等,并提供了丰富的交互功能和布局选项。
  4. VTK(Visualization Toolkit):VTK 是一个强大的开源可视化库,提供了广泛的3D可视化算法和工具,可以用于构建复杂的可视化应用。
  5. ParaView:ParaView 是基于VTK的可视化软件,主要用于科学数据的可视化和分析,支持高效处理大规模数据,并提供了各种可视化技术和交互性。

二、三维图像在numpy、cv2、以及tifffile.imread中通道的区别

  • (1)NumPy:NumPy是一个强大的数值计算库,用于处理多维数组。在NumPy中,三维图像通常表示为形状为 (height, width, channels) 的数组。每个像素的通道值可以通过索引访问,例如 image[y, x, channel]。
  • (2)OpenCV (cv2):OpenCV是一个广泛使用的计算机视觉库,支持图像和视频处理。在OpenCV中,三维图像通常表示为形状为 (height, width, channels) 的NumPy数组。每个像素的通道值可以通过索引访问,例如 image[y, x, channel]。OpenCV还提供了许多图像处理和计算机视觉功能。
  • (3)tifffile.imread:tifffile是一个用于读取TIFF图像文件的库。在使用tifffile.imread加载三维图像时,它会返回一个形状为 (slices, height, width) 的NumPy数组,其中每个像素的值表示灰度强度。tifffile库通常用于处理多层的灰度图像。
    • height:表示图像的垂直维度,即行数或高度。
    • width:表示图像的水平维度,即列数或宽度。
    • channels:表示图像的通道数,对于彩色图像通常为3(红、绿、蓝),对于灰度图像通常为1。

三、项目实战

1、基于matplotlib的3D可视化(体素体)

200x200x200图像可视化:耗时问题比较严重,且任意视角的拖动都等需要等待较长时间。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt
import tifffile				# pip install tifffile

# 加载 TIFF 图像
image_data = tifffile.imread('marked_image.tif')

# 创建立体图像的坐标网格
x, y, z = np.meshgrid(np.arange(image_data.shape[1]+1), np.arange(image_data.shape[0]+1), np.arange(image_data.shape[2]+1))

# 创建 3D 图形对象
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

# 绘制立体图像
ax.voxels(x, y, z, image_data, cmap='gray')

# 设置坐标轴标签
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')

# 显示图像
plt.show()

2、基于mayavi的3D可视化

2.0、mayavi使用指南(鼠标)

(1)鼠标左键:xyz轴旋转;
(2)鼠标右键 / 滑动鼠标滚轮:缩放功能;
(3)按住鼠标滚轮不松并进行拖动:上下左右平移;

2.1、mlab.points3d()参数详解:用于绘制3D点云

mlab.points3d(x, y, z, scalars, color, colormap, scale_factor, scale_mode, mode, resolution, opacity, line_width, reset_zoom, reset_camera, name, **kwargs)
参数详解:

  • (1)x, y, z: 分别表示点云在x、y、z轴坐标。这些参数可以是一维数组,也可以是多维数组。
  • (2)value / scalars: 用于指定点云的标量值(例如像素值、温度等),这些值用于着色点云,value是scalars参数的别名。scalars参数可以是一维数组,长度与点云中的点数相同,也可以是与点云坐标数组相同的形状。
  • (3)scale_factor: 用于指定每个点云的大小
  • (4)mode: 用于指定绘制的点的类型,可选值(字符串类型)包括:
    • 默认是小球体
    • ‘none’: 不绘制任何点。
    • ‘2dvertex’: 绘制2D点,点的大小由scale_factor确定。
    • ‘2dcross’: 绘制2D十字形点,点的大小由scale_factor确定。
    • ‘2dcircle:’ 绘制2D圆形点,点的大小由scale_factor确定。
    • ‘3dvertex’: 绘制3D点,点的大小由scale_factor确定。
    • ‘3dcross’: 绘制3D十字形点,点的大小由scale_factor确定。
    • ‘3dcircle’: 绘制3D圆形点,点的大小由scale_factor确定。
    • 'cube': 绘制3D立方体点,点的大小由scale_factor确定。
  • (5)colormap: 用于指定着色的颜色映射表,可选值包括Mayavi中预定义的颜色映射表,例如’viridis’、‘plasma’、'coolwarm’等。也可以使用自定义的颜色映射表。
  • (6)vmin, vmax: 用于指定着色时的最小值和最大值,用于映射scalars参数的值到颜色映射表。
  • (7)figure: 指定绘制点云的Mayavi figure对象,如果未指定,则使用当前活动的figure。
  • (8)name: 用于指定点云的名称。
  • (9)reset_zoom: 是否在绘制点云时自动调整视图范围以适应整个点云。
  • (10)line_width: 用于指定绘制线条的宽度。
  • (11)opacity: 用于指定点云的不透明度,取值范围为0(完全透明)到1(完全不透明)。
  • (12)mask_points: 是否掩蔽点云,掩蔽后点云将不可见。
  • (13)mask_color: 用于指定掩蔽点云时的颜色。
  • (14)scale_mode: 用于指定缩放模式,可选值(字符串类型)包括:
    • ‘none’: 不缩放。
    • ‘scalar’: 根据scalars参数的值进行缩放。
    • ‘vector’: 根据向量值进行缩放。
  • (15)scale_factor: 用于指定缩放因子,用于调整点的大小。
  • (16)resolution: 用于指定点云的分辨率,即点的密度。
  • (17)其他参数:还可以使用其他参数来调整点云的样式,例如color参数指定点云的颜色,representation参数指定绘制点云的外观,mask_points参数用于掩蔽点云等。

2.1.1、mlab.points3d:绘制小球

在这里插入图片描述

import numpy as np
from mayavi import mlab

x, y, z, value = np.random.random((4, 40))	# 随机生成x,y,z坐标,以及小球的值
mlab.figure(bgcolor=(1, 1, 1))
mlab.points3d(x, y, z, value)		# mode默认是小球体
mlab.show()

2.1.2、mlab.points3d:绘制小立方体

在这里插入图片描述

import numpy as np
from mayavi import mlab

x, y, z, value = np.random.random((4, 40))
mlab.figure(bgcolor=(1, 1, 1))
mlab.points3d(x, y, z, value, mode='cube', scale_factor=1, colormap='binary')
mlab.show()

2.1.3、mlab.points3d:3D灰度/彩色图像的点云图(体素体)

threshold = 1在这里插入图片描述
threshold = 100
在这里插入图片描述

import numpy as np
from mayavi import mlab
import tifffile

# (1)加载3D图像(彩色图像: 10x10x10x3        灰度图像: 10x10x10)
color_image = tifffile.imread('marked_image.tif')
print(len(color_image.shape))

# (2)创建网格点
if len(color_image.shape) == 3:          # 灰度3D图像:10x10x10
    x, y, z = np.mgrid[0:color_image.shape[0], 0:color_image.shape[1], 0:color_image.shape[2]]
elif len(color_image.shape) == 4:        # 彩色3D图像:3x10x10x10
    color_image = np.moveaxis(color_image, -1, 0)    # 调整彩色3D图像的轴顺序与网格点的轴顺序一致
    x, y, z = np.mgrid[0:color_image.shape[1], 0:color_image.shape[2], 0:color_image.shape[3]]
    color_image = color_image[0]
    # Mayavi库的绘制函数通常期望三维数组作为输入,表示空间坐标和相应的数值。对于四维图像数据,您可以选择提取其中的一维作为绘制的数据,或者将四维数据转换为三维数据。
##########################################################################
# (3)显示彩色3D点云图像
fig = mlab.figure(bgcolor=(0, 0, 0), size=(800, 600))  # 新建画布,指定背景为黑色(默认灰色),并设置画布的初始大小
threshold = 1     # 去掉冗余信息(如:100),且可以加速计算
selected_x, selected_y, selected_z = np.where(color_image >= threshold)  # 将color_image中大于阈值的像素点的坐标提取出来,作为点云的坐标
colors = color_image[selected_x, selected_y, selected_z] / 255.0  # 根据像素值设置点云的颜色: 将像素值归一化到[0, 1]范围,作为颜色值
mlab.points3d(selected_x, selected_y, selected_z, colors, mode='cube', scale_factor=2)  # 绘制点云
##########################################################################
# (4)设置立方体8条边线:边线颜色、边线宽度
mlab.outline(color=(0, 0, 0), line_width=3.0)
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z', figure=fig)  # 添加坐标轴标签
# (5)设置Mayavi场景的渲染参数(可以改变 Mayavi 场景的视角和观察者与场景的距离,从而获得所需的视觉效果。)
mlab.view(azimuth=0, elevation=90, distance='auto')
# (6)显示Mayavi场景
mlab.show()
##########################################################################
# mlab.view() 函数用于设置 Mayavi 场景的视角。
#       azimuth: 水平旋转角度,以度数表示。0 表示正对前方,正值表示向右旋转,负值表示向左旋转。
#       elevation: 垂直旋转角度,以度数表示。90 表示从正上方俯视,0 表示水平视角,-90 表示从正下方仰视。
#       distance: 观察者与场景的距离。'auto' 表示自动调整距离以适应场景。
##########################################################################

2.2、mlab.contour3d()参数详解:用于绘制3D等值面

mlab.contour3d(scalar_field, contours=10, transparent=False, colormap=None, vmin=None, vmax=None, opacity=1.0, figure=None, line_width=1.0, extent=None)

  • 输入参数:
  • (1)scalar_field: 三维数据数组,表示要绘制等值面的标量场。该数组的形状应为(N, M, L),其中N,M,L分别是X,Y,Z方向的数据点数
    该参数是mlab.contour3d()函数的唯一必需参数。
  • (2)contours: 可选参数,用于指定要绘制的等值面的数量或位置。可以是一个整数,表示要绘制的等值面数量,或者是一个一维数组,表示要绘制的具体等值面位置。默认值为10,表示绘制10个等值面。
  • (3)transparent: 可选参数,表示等值面是否透明。如果设置为True,则等值面将显示为透明。默认值为False,即不透明。
  • (4)colormap: 可选参数,用于指定等值面的颜色映射。可以是颜色名称字符串,如’red’,‘green’,'blue’等,也可以是一个RGB元组表示的颜色,如(1, 0, 0)表示红色。如果不指定该参数,则默认使用Mayavi的默认颜色映射。
  • (5)vmin和vmax: 可选参数,用于指定绘制等值面的数据范围。vmin表示数据的最小值,vmax表示数据的最大值。超出这个范围的数据将被截断或忽略。如果不指定这两个参数,则默认使用数据数组中的最小值和最大值。
  • (6)opacity: 可选参数,表示等值面的不透明度。取值范围为0到1,其中0表示完全透明,1表示完全不透明。默认值为1.0,即完全不透明。
  • (7)line_width: 可选参数,表示等值面的线宽。默认值为1.0。
  • (8)extent: 可选参数,用于指定等值面在X,Y,Z方向的显示范围。它是一个六元组(xmin, xmax, ymin, ymax, zmin, zmax),分别表示X,Y,Z方向上的最小和最大值。如果不指定该参数,则默认使用数据数组的形状作为显示范围。
  • 返回对象:返回mlab.pipeline.iso_surface对象,通过该对象可以对等值面进行进一步的操作和设置。

2.2.1、mlab.contour3d:3D灰度/彩色图像的等值面图(体素体)

在这里插入图片描述

import numpy as np
from mayavi import mlab
import tifffile

# (1)加载3D图像(彩色图像: 10x10x10x3        灰度图像: 10x10x10)
color_image = tifffile.imread('marked_image.tif')
print(len(color_image.shape))

# (2)创建网格点
if len(color_image.shape) == 3:          # 灰度3D图像:10x10x10
    x, y, z = np.mgrid[0:color_image.shape[0], 0:color_image.shape[1], 0:color_image.shape[2]]
elif len(color_image.shape) == 4:        # 彩色3D图像:3x10x10x10
    color_image = np.moveaxis(color_image, -1, 0)    # 调整彩色3D图像的轴顺序与网格点的轴顺序一致
    x, y, z = np.mgrid[0:color_image.shape[1], 0:color_image.shape[2], 0:color_image.shape[3]]
    color_image = color_image[0]
    # Mayavi库的绘制函数通常期望三维数组作为输入,表示空间坐标和相应的数值。对于四维图像数据,您可以选择提取其中的一维作为绘制的数据,或者将四维数据转换为三维数据。

# (4)显示彩色3D图像
fig = mlab.figure(bgcolor=(0, 0, 0), size=(800, 600))  # 新建画布,指定背景为黑色(默认灰色),并设置画布的初始大小。白色=(1,1,1)
mlab.contour3d(x, y, z, color_image)
##########################################################################

# (5)创建三维体素数据
volume = mlab.pipeline.volume(mlab.pipeline.scalar_field(color_image))
# (6)创建颜色映射,全黑体素置黑色,全白体素置白色
color_map = np.zeros((256, 4))
color_map[0] = (0, 0, 0, 0)  # 全黑体素的颜色为黑色
# color_map[255] = (1, 1, 1, 1)  # 全白体素的颜色为白色
# (7)设置体素数据的颜色映射
volume.module_manager.scalar_lut_manager.lut.table = color_map
##########################################################################

# (8)设置立方体8条边线:边线颜色、边线宽度
mlab.outline(color=(0, 0, 0), line_width=3.0)
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z', figure=fig)  # 添加坐标轴标签
# (9)设置Mayavi场景的渲染参数(可以改变 Mayavi 场景的视角和观察者与场景的距离,从而获得所需的视觉效果。)
mlab.view(azimuth=0, elevation=90, distance='auto')
# (10)显示Mayavi场景
mlab.show()

##########################################################################
# mlab.view() 函数用于设置 Mayavi 场景的视角。
#       azimuth: 水平旋转角度,以度数表示。0 表示正对前方,正值表示向右旋转,负值表示向左旋转。
#       elevation: 垂直旋转角度,以度数表示。90 表示从正上方俯视,0 表示水平视角,-90 表示从正下方仰视。
#       distance: 观察者与场景的距离。'auto' 表示自动调整距离以适应场景。
##########################################################################

2.2.2、mlab.contour3d:3D灰度/彩色图像的等值面图(体素体)—— 在同一个视图中,选择指定像素值绘制指定颜色

在这里插入图片描述

import numpy as np
from mayavi import mlab
import tifffile

# (1)加载3D图像(彩色图像: 10x10x10x3        灰度图像: 10x10x10)
color_image = tifffile.imread('marked_image.tif')
print(len(color_image.shape))

# (2)创建网格点
if len(color_image.shape) == 3:          # 灰度3D图像:10x10x10
    x, y, z = np.mgrid[0:color_image.shape[0], 0:color_image.shape[1], 0:color_image.shape[2]]
elif len(color_image.shape) == 4:        # 彩色3D图像:3x10x10x10
    color_image = np.moveaxis(color_image, -1, 0)    # 调整彩色3D图像的轴顺序与网格点的轴顺序一致
    x, y, z = np.mgrid[0:color_image.shape[1], 0:color_image.shape[2], 0:color_image.shape[3]]
    color_image = color_image[0]
    # Mayavi库的绘制函数通常期望三维数组作为输入,表示空间坐标和相应的数值。对于四维图像数据,您可以选择提取其中的一维作为绘制的数据,或者将四维数据转换为三维数据。

# (3.0)新建画布,指定背景为黑色(默认灰色),并设置画布的初始大小。白色=(1,1,1)
fig = mlab.figure(bgcolor=(0, 0, 0), size=(800, 600))

##########################################################################
# (4.1)一次绘制:对原图进行彩色显示
# mlab.contour3d(x, y, z, color_image)
#####################################
# (4.2)二次绘制:对指定像素值,绘制指定颜色
threshold_value = 255  # 指定像素值
color_value = (1, 0, 0)  # 指定颜色(红色)
mlab.contour3d(color_image, contours=[threshold_value], color=color_value)
#####################################
# (4.3)二次绘制:对指定范围像素值,绘制指定颜色
min_value = 100  # 指定最小像素值
max_value = 250  # 指定最大像素值
color_value = (0.5, 0.5, 0.5)  # 指定颜色(红色)
# 绘制指定范围内的等值面,并设置颜色
volume = mlab.pipeline.volume(mlab.pipeline.scalar_field(color_image))
iso_surface = mlab.pipeline.iso_surface(volume, contours=[min_value, max_value], color=color_value)
iso_surface.actor.property.opacity = 1  # 设置等值面的透明度
##########################################################################
# (5)设置立方体8条边线:边线颜色、边线宽度
mlab.outline(color=(0, 0, 0), line_width=3.0)
mlab.axes(xlabel='X', ylabel='Y', zlabel='Z', figure=fig)  # 添加坐标轴标签
# (6)设置Mayavi场景的渲染参数(可以改变 Mayavi 场景的视角和观察者与场景的距离,从而获得所需的视觉效果。)
mlab.view(azimuth=0, elevation=90, distance='auto')
# (7)显示Mayavi场景
mlab.show()

##########################################################################
# mlab.view() 函数用于设置 Mayavi 场景的视角。
#       azimuth: 水平旋转角度,以度数表示。0 表示正对前方,正值表示向右旋转,负值表示向左旋转。
#       elevation: 垂直旋转角度,以度数表示。90 表示从正上方俯视,0 表示水平视角,-90 表示从正下方仰视。
#       distance: 观察者与场景的距离。'auto' 表示自动调整距离以适应场景。
##########################################################################

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

青岛大学_王卓老师【数据结构与算法】Week05_10_顺序栈的操作3_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享, 另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础…

【区块链+体育】“数智化”的杭州亚运会,中创助力区块链技术发展

“智能”,是杭州亚运会的办赛理念之一。除了数字藏品开亚运先河,杭州亚组委充分应用区块链、大数据、人工智能等前沿技术,为观众提供从购票、出行、观赛到住宿、美食和旅游等“一站式”服务。 本次亚运会将全程智能陆续落到了实处&#xff0…

简述直线导轨的预压力

直线导轨的预压力是预先给予钢珠负荷力,通俗来说就是加大钢珠直径,利用钢珠和珠道之间负向间隙给予预压,这个举动可以提高直线滑轨的刚性和消除间隙,值得注意的一点是小规格建议选用轻预压以下的预压,避免因为预压选用…

【Spring Boot】Web开发 — Web开发简介

Web开发简介 首先介绍Spring Boot 提供的Web组件spring-boot-starter-web,然后介绍Controller和RestController注解,以及控制数据返回的ResponseBody注解,最后介绍Web配置,以便让读者对使用Spring Boot开发Web系统有初步的了解。…

C# 动态字典(可以随机实时增删访问,保证先入先出的字典)

如果你有以下需求: 1. 需要对Dictionary进行遍历的同时移除或者添加元素 2. 需要按顺序遍历Dictionary并且保证先入先出 3. 需要即时的获取字典内的元素数量,即时增删 如果你觉得好,请给我的框架点一个免费的star,球球啦 Yueh0607…

TX Barcode .NET for WPF Crack

TX Barcode .NET for WPF Crack 用于WPF软件的TX Barcode.NET包括一天完成的功能以及用于WPF的软件的2D条形码控制。 用于WPF的TX Barcode.NET的功能和属性: 它具有以下特性和属性,如: 常见的文字处理功能:它可以为用户和开发人员…

一百三十、海豚调度器——用DolphinScheduler定时调度HiveSQL任务

一、目标 用海豚调度器对Hive数仓各层数据库的SQL任务进行定时调度。比如,DWD层脱敏清洗表的动态插入数据、DWS层指标表的动态插入数据 二、工具版本 1、海豚调度器:apache-dolphinscheduler-2.0.5-bin.tar.gz 2、Hive:apache-hive-3.1.2…

selenium WebDriver 中的几种等待--sleep(),implicitly_wait(),WebDriverWait()

目录 强制等待:sleep() 隐式等待:implicitly_wait() 显示等待:WebDriverWait() 与until()或者until_not()方法结合使用 WebDriverWait与expected_conditions结合使用 显示等待,自定义等待条件 强制等待:sleep() import time sleep(5) #等待5秒 设置固定休眠时间&#x…

webpack打包

webpack打包 1、webpack再次打包2、webpack的入口和出口 1、webpack再次打包 背景:代码增加之后,如何打包呢? 1、确保在src/index.js引用和使用 2、重新执行yarn build打包命令 2、webpack的入口和出口 1、新建webpack.config.js配置文件 …

Redis的五大数据类型和各自的

- 字符串(String) string 数据结构是简单的 key-value 类型。简单动态字符串**(simple dynamic string,SDS)。相比于 C 的原生字符串,Redis 的 SDS 不光可以保存文本数据还可以保存二进制数据,并且获取字符串长度复杂度…

django框架向DRF框架演变过程详解

一、Django框架实现项目查询接口 主要知识点: Django框架视图函数 1、在 Django 项目中创建一个应用(如果还没有创建): python manage.py startapp projects 2、在项目的 models.py 文件中定义项目模型 from django.db impor…

JavaWeb(5)——HTML、CSS、JS 快速入门

一、JavaScript 对象 二、JavaScript BOM对象 和 DOM对象 关于BOM主要对 Window 和 location 进行说明&#xff1a; 三、JavaScript 事件监听 事件绑定 常见事件 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">…

OpenCv之图像形态学

目录 一、形态学 二、图像全局二值化 三、自适应阈值二值化 四、腐蚀操作 五、获取形态学卷积核 六、膨胀操作 七、开运算 八、闭运算 一、形态学 定义: 指一系列处理图像形状特征的图像处理技术形态学的基本思想是利用一种特殊的结构元(本质上就是卷积核)来测量或提取输…

【SQL】计算每个人的完成率

目录 前提任务的完成率前三名拓展&#xff1a;达梦如何去实现除法有余数拓展&#xff1a;MySQL 任务的完成率前三名 前提 达梦数据库&#xff1a; select 1/3; # 0不要求四舍五入 任务的完成率前三名 # nick_name 人名 # finishNum 当前这个人的任务完成数 # total 当前这…

STM32学习笔记(十二)丨RTC实时时钟

本篇文章包含的内容 一、计算机底层计时系统——时间戳1.1 时间戳简介1.2 GMT/UTC1.3 C语言和time.h库 二、STM32的BKP和RTC时钟2.1 BKP&#xff08;Backup Registers&#xff09;备份寄存器2.2 RTC&#xff08;Real Time Clock&#xff09;实时时钟2.2.1 RTC简介2.2.2 RTC的内…

概率论和随机过程的学习和整理20:条件概率我知道,但什么是条件期望?可用来解决递归问题

目录 1 目标问题&#xff1a; 什么是条件期望&#xff1f; 条件期望有什么用&#xff1f; 2 条件期望&#xff0c;全期望公式 3 条件期望&#xff0c;全期望公式 和 条件概率&#xff0c;全概率公式的区别和联系 3.1 公式如下 3.2 区别和联系 3.3 概率和随机过程 4 有什…

简单认识MySQL数据库索引

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 一、索引的概念1、简介2、作用3、索引的副作用&#xff1a;4、创建索引的原则依据5、索引的分类 二、索引的增删改查1.创建索引&#xff08;1&#xff09;创建普通索…

VoIP监控工具有什么作用

VoIP 监控工具利用思科的 IPSLA 技术生成合成流量并监控客户端体验的呼叫质量。与被动监控VoIP指标相反&#xff0c;IPSLA技术允许IT管理员主动并在潜在问题发生之前检测到它们&#xff0c;这使组织能够轻松遵守严格的SLA指标。 思科 IPSLA 技术在两台设备之间创建流量&#x…

使用semanage管理SELinux安全策略

semanage命令用于管理SELinux的策略&#xff0c;格式为“semanage [选项] [文件]”。 SELinux服务极大地提升了Linux系统的安全性&#xff0c;将用户权限牢牢地锁在笼子里。semanage命令可以设置文件、目录的策略&#xff0c;还可以管理网络端口、消息接口。 常用参数&#xf…

240. 搜索二维矩阵 II

题目描述&#xff1a; 主要思路&#xff1a; 利用矩阵中的单调性进行搜索。 class Solution { public:bool searchMatrix(vector<vector<int>>& matrix, int target) {int nmatrix.size(),mmatrix[0].size();int in-1,j0;while(i>0&&j<m){if(m…
最新文章