点云欧式聚类,条件欧式聚类算法原理及推导
点云欧式聚类算法数学推导
点云欧式聚类(Euclidean Clustering for Point Clouds)是点云处理中常用的一种无监督聚类方法。它基于欧式距离将点云中的点划分为多个簇,常用于分割、目标检测等任务。以下是算法的数学推导和实现原理。
问题定义
给定一个点云数据集 P = p 1 , p 2 , … , p N P = {p_1, p_2, \dots, p_N} P=p1,p2,…,pN,每个点 p i p_i pi 是 3D 空间中的点,具有坐标 p i = ( x i , y i , z i ) p_i = (x_i, y_i, z_i) pi=(xi,yi,zi)。目标是将这些点划分为 K K K 个簇 C = C 1 , C 2 , … , C K C = {C_1, C_2, \dots, C_K} C=C1,C2,…,CK,使得:
- 同一个簇中的点彼此之间的欧式距离较小;
- 不同簇之间的点距离较远。
核心算法
点云欧式聚类通常使用 邻域搜索 和 区域生长 技术。其基本步骤如下:
1. 邻域搜索
点 p i p_i pi 的邻域定义为欧式距离小于某阈值 ϵ \epsilon ϵ 的点集:
N ( p i ) = { p j ∈ P ∣ ∥ p i − p j ∥ ≤ ϵ } , \mathcal{N}(p_i) = \{p_j \in P \mid \|p_i - p_j\| \leq \epsilon\}, N(pi)={pj∈P∣∥pi−pj∥≤ϵ},
其中 ∣ ⋅ ∣ |\cdot| ∣⋅∣ 表示欧式距离:
∥ p i − p j ∥ = ( x i − x j ) 2 + ( y i − y j ) 2 + ( z i − z j ) 2 . \|p_i - p_j\| = \sqrt{(x_i - x_j)^2 + (y_i - y_j)^2 + (z_i - z_j)^2}. ∥pi−pj∥=(xi−xj)2+(yi−yj)2+(zi−zj)2.
2. 聚类过程
- 使用区域生长法将点归为不同的簇:
- 从点云中随机选择一个未分配的点 p i p_i pi 作为种子点,初始化一个新簇 C k C_k Ck。
- 将种子点的邻域 N ( p i ) \mathcal{N}(p_i) N(pi) 中的所有点加入簇 C k C_k Ck。
- 对每个新加入簇的点,继续搜索其邻域,重复步骤 2,直到没有符合条件的点。
- 处理剩余未分配的点,直到所有点都被分配到某个簇或标记为噪声点。
3. 噪声点处理
如果某个点的邻域大小小于一个最小点数阈值 n m i n n_{min} nmin,则将其标记为噪声点,不归属于任何簇。
目标函数
点云欧式聚类隐含地最小化了簇内点与簇中心的平均距离,并满足约束条件 ∣ p i − p j ∣ ≤ ϵ |p_i - p_j| \leq \epsilon ∣pi−pj∣≤ϵ:
J = ∑ k = 1 K ∑ p i ∈ C k ∥ p i − μ k ∥ 2 , J = \sum_{k=1}^K \sum_{p_i \in C_k} \|p_i - \mu_k\|^2, J=k=1∑Kpi∈Ck∑∥pi−μk∥2,
其中 μ k \mu_k μk 是簇 C k C_k Ck 的几何中心:
μ k = 1 ∣ C k ∣ ∑ p i ∈ C k p i . \mu_k = \frac{1}{|C_k|} \sum_{p_i \in C_k} p_i. μk=∣Ck∣1pi∈Ck∑pi.
然而,点云欧式聚类的实现并不直接优化上述目标函数,而是基于邻域搜索和生长过程间接完成聚类。
算法伪代码
Input: 点云 P, 距离阈值 ε, 最小点数 n_min
Output: 聚类结果 C, 噪声点集合 N1. 初始化:C = {}, N = {}, 未访问点集 V = P
2. while V 非空:2.1 随机选择一个种子点 p_i ∈ V2.2 如果邻域点数 |𝒩(p_i)| < n_min:标记为噪声点,N = N ∪ {p_i}2.3 否则:初始化新簇 C_k = {}使用区域生长法将 p_i 和其邻域点加入 C_kC = C ∪ {C_k}2.4 从 V 中移除已分配的点
3. 返回 C 和 N
复杂度分析
- 邻域搜索:
- 基于 k k k-d 树或其他空间分割数据结构,搜索单点邻域的复杂度为 O ( log N ) O(\log N) O(logN)。
- 聚类过程:
- 对每个点访问一次,总复杂度为 O ( N ⋅ log N ) O(N \cdot \log N) O(N⋅logN)。
优缺点
优点
- 简单直观,直接基于几何距离。
- 对无规则点云分布效果较好。
- 可通过调整参数 ϵ \epsilon ϵ 和 n m i n n_{min} nmin 控制聚类结果。
缺点
- 对参数敏感, ϵ \epsilon ϵ 和 n m i n n_{min} nmin 需要根据点云密度调整。
- 对于稀疏或密度变化大的点云可能效果不佳。
实际应用
点云欧式聚类广泛应用于:
- 3D 点云分割:如分离不同物体表面。
- 目标检测与跟踪:在点云中检测独立目标。
- 场景重建:划分不同的地形、建筑或物体。
在实践中,常用工具如 PCL(Point Cloud Library) 提供了高效的点云欧式聚类实现,函数为 pcl::EuclideanClusterExtraction
。
条件欧式聚类算法推导
条件欧式聚类(Conditioned Euclidean Clustering)在传统欧式距离聚类的基础上加入约束条件,解决了一些先验信息明确的问题。以下是算法的推导过程:
基础聚类模型
给定一个数据集 X = x 1 , x 2 , … , x N X = {x_1, x_2, \dots, x_N} X=x1,x2,…,xN,希望将其划分为 K K K 个簇 C = C 1 , C 2 , … , C K C = {C_1, C_2, \dots, C_K} C=C1,C2,…,CK,使得每个簇的紧密性(Intra-Cluster Compactness)最小化:
J = ∑ k = 1 K ∑ x i ∈ C k ∥ x i − μ k ∥ 2 , J = \sum_{k=1}^K \sum_{x_i \in C_k} \|x_i - \mu_k\|^2, J=k=1∑Kxi∈Ck∑∥xi−μk∥2,
其中:
- μ k \mu_k μk 是簇 C k C_k Ck 的中心: μ k = 1 ∣ C k ∣ ∑ x i ∈ C k x i . \mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i. μk=∣Ck∣1∑xi∈Ckxi.
条件约束引入
引入两种常见约束条件:
- Must-Link Constraint:
- 如果 x i x_i xi 和 x j x_j xj 有必须链接关系,则它们必须属于同一个簇: x i ∈ C k ⟺ x j ∈ C k . x_i \in C_k \iff x_j \in C_k. xi∈Ck⟺xj∈Ck.
- Cannot-Link Constraint:
- 如果 x i x_i xi 和 x j x_j xj 有不能链接关系,则它们必须属于不同的簇: x i ∈ C k ⟹ x j ∉ C k . x_i \in C_k \implies x_j \notin C_k. xi∈Ck⟹xj∈/Ck.
为了考虑这些约束条件,可以引入一个惩罚项到目标函数中:
J ′ = ∑ k = 1 K ∑ x i ∈ C k ∥ x i − μ k ∥ 2 + λ ⋅ P ( C ) , J' = \sum_{k=1}^K \sum_{x_i \in C_k} \|x_i - \mu_k\|^2 + \lambda \cdot P(C), J′=k=1∑Kxi∈Ck∑∥xi−μk∥2+λ⋅P(C),
其中:
- P ( C ) P(C) P(C) 是惩罚函数,定义为违反 Must-Link 和 Cannot-Link 条件的代价。
- λ \lambda λ 是权重因子,控制约束的重要性。
惩罚函数 P ( C ) P(C) P(C) 定义:
P ( C ) = ∑ Must-Link δ ( x i , x j ) + ∑ Cannot-Link ( 1 − δ ( x i , x j ) ) , P(C) = \sum_{\text{Must-Link}} \delta(x_i, x_j) + \sum_{\text{Cannot-Link}} (1 - \delta(x_i, x_j)), P(C)=Must-Link∑δ(xi,xj)+Cannot-Link∑(1−δ(xi,xj)),
其中 δ ( x i , x j ) = 1 \delta(x_i, x_j) = 1 δ(xi,xj)=1 表示 x i x_i xi 和 x j x_j xj 属于同一簇,否则 δ ( x i , x j ) = 0 \delta(x_i, x_j) = 0 δ(xi,xj)=0。
算法推导
1. 初始化
- 随机初始化 K K K 个簇的中心点 μ k \mu_k μk。
- 确定 Must-Link 和 Cannot-Link 的约束矩阵。
2. 分配数据点
对于每个数据点 x i x_i xi:
-
计算其到所有簇中心的距离:
d k ( x i ) = ∥ x i − μ k ∥ 2 . d_k(x_i) = \|x_i - \mu_k\|^2. dk(xi)=∥xi−μk∥2. -
考虑约束条件修正距离:
- 如果 Must-Link 约束要求 x i x_i xi 和 x j x_j xj 必须在同一簇,则将 d k ( x i ) d_k(x_i) dk(xi) 加权调整,使 x i x_i xi 更倾向于聚类到包含 x j x_j xj 的簇。
- 如果 Cannot-Link 约束要求 x i x_i xi 和 x j x_j xj 不在同一簇,则对 d k ( x i ) d_k(x_i) dk(xi) 增加惩罚,使其远离包含 x j x_j xj 的簇。
修正公式为:
d ~ k ( x i ) = d k ( x i ) + λ ⋅ Δ c o n s t r a i n t s , \tilde{d}_k(x_i) = d_k(x_i) + \lambda \cdot \Delta_{constraints}, d~k(xi)=dk(xi)+λ⋅Δconstraints,
其中 Δ c o n s t r a i n t s \Delta_{constraints} Δconstraints 表示违反 Must-Link 或 Cannot-Link 的代价。
3. 更新聚类中心
更新每个簇的中心:
μ k = 1 ∣ C k ∣ ∑ x i ∈ C k x i . \mu_k = \frac{1}{|C_k|} \sum_{x_i \in C_k} x_i. μk=∣Ck∣1xi∈Ck∑xi.
4. 迭代
重复步骤 2 和 3,直到满足以下条件之一:
- 聚类结果不再变化;
- 最大迭代次数达到。
实现注意事项
- 复杂度控制:
- 计算 Must-Link 和 Cannot-Link 的代价矩阵可能较耗时,需要优化数据结构或使用稀疏矩阵存储。
- 距离度量调整:
- 如果数据分布非球形,可以使用 Mahalanobis 距离或其他非欧式度量。
- 惩罚权重 λ \lambda λ 的调节:
- 根据问题的实际需求,调整 λ \lambda λ 的值以平衡距离优化与约束满足。
总结
条件欧式聚类通过引入先验约束条件,对传统的聚类方法进行改进,目标函数变为:
J ′ = ∑ k = 1 K ∑ x i ∈ C k ∥ x i − μ k ∥ 2 + λ ⋅ P ( C ) , J' = \sum_{k=1}^K \sum_{x_i \in C_k} \|x_i - \mu_k\|^2 + \lambda \cdot P(C), J′=k=1∑Kxi∈Ck∑∥xi−μk∥2+λ⋅P(C),
有效结合了数据点的几何分布和先验关系,适用于需要结合规则优化的聚类问题。
具体案例
在条件聚类中,如果一个数据点 x i x_i xi 与 x j x_j xj 和 x k x_k xk 存在 Must-Link 关系,但 x j x_j xj 和 x k x_k xk 与 x i x_i xi 被分配到不同的簇,那么在计算 x i x_i xi 的距离(如修正后的欧式距离 d ~ k ( x i ) \tilde{d}_k(x_i) d~k(xi))时,需要根据 Must-Link 约束的违反程度对标准的欧式距离进行修正。
计算修正后的距离
修正距离的公式为:
d ~ k ( x i ) = d k ( x i ) + λ ⋅ Δ c o n s t r a i n t s , \tilde{d}_k(x_i) = d_k(x_i) + \lambda \cdot \Delta_{constraints}, d~k(xi)=dk(xi)+λ⋅Δconstraints,
其中:
- d k ( x i ) d_k(x_i) dk(xi): x i x_i xi 到簇 C k C_k Ck 的标准欧式距离;
- Δ c o n s t r a i n t s \Delta_{constraints} Δconstraints:约束代价值(表示违反 Must-Link 和 Cannot-Link 的代价);
- λ \lambda λ:权重因子,决定约束代价的影响程度。
Must-Link 约束的违反代价
对于 Must-Link 约束 ( x i , x j ) (x_i, x_j) (xi,xj) 和 ( x i , x k ) (x_i, x_k) (xi,xk),如果 x j x_j xj 和 x k x_k xk 被分配到不同的簇:
-
如果 x i x_i xi 不与 x j x_j xj 或 x k x_k xk 同簇,违反 Must-Link 的代价为:
Δ M L ( x i , x j ) = 1 , Δ M L ( x i , x k ) = 1. \Delta_{ML}(x_i, x_j) = 1, \quad \Delta_{ML}(x_i, x_k) = 1. ΔML(xi,xj)=1,ΔML(xi,xk)=1.
总代价为 Δ M L = Δ M L ( x i , x j ) + Δ M L ( x i , x k ) = 2 \Delta_{ML} = \Delta_{ML}(x_i, x_j) + \Delta_{ML}(x_i, x_k) = 2 ΔML=ΔML(xi,xj)+ΔML(xi,xk)=2。 -
代价 Δ c o n s t r a i n t s \Delta_{constraints} Δconstraints 仅累计与 x i x_i xi 有 Must-Link 的点中实际违反约束的点。例如:
Δ c o n s t r a i n t s = ∑ ( x i , x j ) ∈ M L Δ M L ( x i , x j ) . \Delta_{constraints} = \sum_{(x_i, x_j) \in ML} \Delta_{ML}(x_i, x_j). Δconstraints=(xi,xj)∈ML∑ΔML(xi,xj).
修正距离的最终值
- 假设 x i x_i xi 的标准欧式距离为 d k ( x i ) d_k(x_i) dk(xi),修正后的距离为: d ~ k ( x i ) = d k ( x i ) + λ ⋅ Δ c o n s t r a i n t s \tilde{d}_k(x_i) = d_k(x_i) + \lambda \cdot \Delta_{constraints} d~k(xi)=dk(xi)+λ⋅Δconstraints.
- 如果 Must-Link 约束全部被违反, Δ c o n s t r a i n t s \Delta_{constraints} Δconstraints 将显著增大,使得 x i x_i xi 不倾向于分配到当前的簇 C k C_k Ck。
具体情况的示例
假设 x i x_i xi 在一个二维空间内,标准欧式距离为:
d k ( x i ) = ( x i ( 1 ) − μ k ( 1 ) ) 2 + ( x i ( 2 ) − μ k ( 2 ) ) 2 , d_k(x_i) = \sqrt{(x_i^{(1)} - \mu_k^{(1)})^2 + (x_i^{(2)} - \mu_k^{(2)})^2}, dk(xi)=(xi(1)−μk(1))2+(xi(2)−μk(2))2,
其中 μ k \mu_k μk 是簇 C k C_k Ck 的质心。
如果 x j x_j xj 和 x k x_k xk 必须与 x i x_i xi 同簇,但 x j x_j xj 和 x k x_k xk 不在 C k C_k Ck 中,那么修正项为:
d ~ k ( x i ) = d k ( x i ) + λ ⋅ 2 , \tilde{d}_k(x_i) = d_k(x_i) + \lambda \cdot 2, d~k(xi)=dk(xi)+λ⋅2,
表示每违反一个 Must-Link 约束,距离增加一个固定量。
总结
在条件聚类中, x i x_i xi 的修正距离结合了标准的欧式距离和约束代价。如果 Must-Link 约束被严重违反(如多个相关点被分配到不同簇),那么修正后的距离会显著增大,从而降低 x i x_i xi 分配到当前簇的概率。这种方法有效地将约束融入聚类过程。
相关文章:
点云欧式聚类,条件欧式聚类算法原理及推导
点云欧式聚类算法数学推导 点云欧式聚类(Euclidean Clustering for Point Clouds)是点云处理中常用的一种无监督聚类方法。它基于欧式距离将点云中的点划分为多个簇,常用于分割、目标检测等任务。以下是算法的数学推导和实现原理。 问题定义…...
每日十题八股-2024年11月27日
1.类型互转会出现什么问题吗? 2.为什么用bigDecimal 不用double ? 3.装箱和拆箱是什么? 4.Java为什么要有Integer? 5.Integer相比int有什么优点? 6.那为什么还要保留int类型? 7.说一下 integer的缓存 8.怎么…...
C++虚函数面试题及参考答案
什么是虚函数?它的作用是什么? 虚函数是在基类中使用关键字 virtual 声明的成员函数。当在派生类中重写(override)这个函数时,会根据对象的实际类型来调用相应的函数版本,而不是仅仅根据指针或引用的类型来…...
如何搭建C++环境--1.下载安装并调试Microsoft Visual Studio Previerw(Windows)
1.首先,打开浏览器 首先,搜索“Microsoft Visual Studio Previerw” 安装 1.运行VisualStudioSetup (1).exe 无脑一直点继续 然后就到 选择需要的语言 我一般python用pycharm Java,HTML用vscode(Microsoft Visual Studio cod…...
大数据新视界 -- Hive 函数应用:复杂数据转换的实战案例(下)(12/ 30)
💖💖💖亲爱的朋友们,热烈欢迎你们来到 青云交的博客!能与你们在此邂逅,我满心欢喜,深感无比荣幸。在这个瞬息万变的时代,我们每个人都在苦苦追寻一处能让心灵安然栖息的港湾。而 我的…...
深入理解 TypeScript:联合类型与交叉类型的应用
在 TypeScript 的世界里,类型系统是核心特性之一,它提供了强大的工具来帮助开发者编写更安全、更可靠的代码。今天,我们将深入探讨 TypeScript 中的两个高级类型特性:联合类型(Union Types)和交叉类型&…...
fiddler抓包工具与requests库构建自动化报告
一. Fiddler 抓包工具 1.1 Fiddler 工具介绍和安装 Fiddler 是一款功能强大的 HTTP 调试代理工具,能够全面记录并深入检查您的计算机与互联网之间的 HTTP 和 HTTPS 通信数据。其主界面布局清晰,主要包含菜单栏、工具栏、树形标签栏和内容栏。 1.2 Fid…...
数据结构——排序算法第二幕(交换排序:冒泡排序、快速排序(三种版本) 归并排序:归并排序(分治))超详细!!!!
文章目录 前言一、交换排序1.1 冒泡排序1.2 快速排序1.2.1 hoare版本 快排1.2.2 挖坑法 快排1.2.3 lomuto前后指针 快排 二、归并排序总结 前言 继上篇学习了排序的前面两个部分:直接插入排序和选择排序 今天我们来学习排序中常用的交换排序以及非常稳定的归并排序 快排可是有多…...
Vue-常用指令
🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来Vue篇专栏内容:Vue-常用指令 目录 1.1 v-cloak 1.2 双向数据绑定指令 v-model 1.3 v-once 1.4 绑定属性 v-bind…...
守护进程
目录 守护进程 前台进程 后台进程 session(进程会话) 前台任务和后台任务比较好 本质 绘画和终端都关掉了,那些任务仍然在 bash也退了,然后就托孤了 编辑 守护进程化---不想受到任何用户登陆和注销的影响编辑 如何…...
GPON原理
GPON网络架构 对于OLT来说,它就相当于一个指挥官,它指挥PON口下的ONU在指定的时间段内发送数据以及发起测距过程等 而ONU则是一个士兵,按照OLT的指挥做出相应 而ODN它主要就是提供一个传输通道,主要包括分光器和光纤组成 对于PO…...
华三(HCL)和华为(eNSP)模拟器共存安装手册
接上章叙述,解决同一台PC上同时部署华三(HCL)和华为(eNSP)模拟器。原因就是华三HCL 的老版本如v2及以下使用VirtualBox v5版本,可以直接和eNSP兼容Oracle VirtualBox,而其他版本均使用Oracle VirtualBox v6以上的版本,…...
类和对象--中--初始化列表(重要)、隐式类型转化(理解)、最后两个默认成员函数
1.初始化列表 1.1作用: 通过特定的值,来初始化对象。 1.2定义: 初始化列表,就相当于定义对象(开空间)。不管写不写初始化列表,每个成员变量都会走一遍初始化列表(开出对应的空间…...
clickhouse 使用global in 优化 in查询
文章目录 in例子使用global in in例子 SELECT uniq(UserID) FROM distributed_table WHERE CounterID 101500 AND UserID IN (SELECT UserID FROM distributed_table WHERE CounterID 34)对于in 查询来说,本来查询的就是分布式表,假设这个表有100 个…...
macos 14.0 Monoma 修改顶部菜单栏颜色
macos 14.0 设置暗色后顶部菜单栏还维持浅色,与整体不协调。 修改方式如下:...
鸿蒙动画开发07——粒子动画
1、概 述 粒子动画是在一定范围内随机生成的大量粒子产生运动而组成的动画。 动画元素是一个个粒子,这些粒子可以是圆点、图片。我们可以通过对粒子在颜色、透明度、大小、速度、加速度、自旋角度等维度变化做动画,来营造一种氛围感,比如下…...
Matlab 2016b安装教程附安装包下载
软件介绍 MATLAB(矩阵实验室)是MathWorks公司推出的用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境的商业数学软件。MATLAB具有数值分析、数值和符号计算、工程与科学绘图、控制系统的设计与仿真、数字图像处理、数字信…...
Container image .... already present on machine 故障排除
故障现象: Normal Pulled 12s (x2 over 15s) kubelet Container image “registry.cn-hangzhou.aliyuncs.com/yinzhengjie-k8s/apps:v1” already present on machine kubectl get pods NAME READY STATUS RESTARTS AGE two-pod 1/2 Error …...
力扣 二叉树的层序遍历-102
二叉树的层序遍历-102 class Solution { public:vector<vector<int>> levelOrder(TreeNode* root) {vector<vector<int>> res; // 二维数组用来存储每层节点if (root nullptr)return res;queue<TreeNode*> q; // 队列用来进行层序遍历q.push(r…...
Java 平衡二叉树 判断 详解
判断平衡二叉树的详解(Java 实现) 平衡二叉树的定义: 平衡二叉树(Balanced Binary Tree)是指一棵二叉树中任意节点的左右子树高度差不超过 1。即: ∣ h e i g h t ( l e f t ) − h e i g h t ( r i g h …...
Java设计模式笔记(一)
Java设计模式笔记(一) (23种设计模式由于篇幅较大分为两篇展示) 一、设计模式介绍 1、设计模式的目的 让程序具有更好的: 代码重用性可读性可扩展性可靠性高内聚,低耦合 2、设计模式的七大原则 单一职…...
【人工智能学习之yolov8改进的网络怎么指定规模】
yolov8改进的网络怎么指定规模 在你更换主干网络或者做了其他修改之后,发现模型总是默认使用的n规模,而n规模有可能无法完成任务,怎么办呢,有什么办法指定规模大小呢? WARNING ⚠️ no model scale passed. Assuming …...
网络安全概述
网络安全 物理安全 网络的物理安全是整个网络系统安全的前提。在 校园网工程建设中,由于网络系统属于 弱电工程,耐压值很低。因此,在 网络工程的设计和施工中,必须优先考虑保护人和 网络设备不受电、火灾和雷击的侵害࿱…...
[MySQL#2] 库 | 表 | 详解CRUD命令 | 字符集 | 校验规则
目录 一. 库操作 1. 创建数据库 2. 字符集和校验规则 校验规则对数据库的影响 显示创建数据库时对应的命令 3. 修改数据库 4. 数据库删除 备份和恢复 还原 查看连接情况 二. 表操作 1. 创建表(定义实例化格式 2. 创建表案例 (实例化数据类型…...
【Unity基础】如何查看当前项目使用的渲染管线?
在 Unity 中,你可以通过以下几种方式查看当前项目使用的是哪个渲染管线: 1. 检查 Graphics Settings 打开 Unity 编辑器,进入顶部菜单:Edit → Project Settings → Graphics。在 Graphics Settings 窗口中,找到 Scr…...
什么是域名监控?
域名监控是持续跟踪全球域名系统(DNS)中变化以发现恶意活动迹象的过程。组织可以对其拥有的域名进行监控,以判断是否有威胁行为者试图入侵其网络。他们还可以对客户的域名使用这种技术以执行类似的检查。 你可以将域名监控比作跟踪与自己实物…...
apache中的Worker 和 Prefork 之间的区别是什么?
文章目录 内存使用稳定性兼容性适用场景 Apache中的Worker和Prefork两种工作模式在内存使用、稳定性以及兼容性等方面存在区别 内存使用 Worker:由于使用线程,内存占用较少。Prefork:每个进程独立运行,内存消耗较大。 稳定性 W…...
解决SSL VPN客户端一直提示无法连接服务器的问题
近期服务器更新VPN后,我的win10电脑一致无法连接到VPN服务器, SSL VPN客户端总是提示无法连接到服务端。网上百度尝试了各种方法后,终于通过以下设置方式解决了问题: 1、首先,在控制面板中打开“网络和共享中心”窗口&…...
网络基础概念
1.网络协议 网络协议是一组标准和规则,用于定义电子设备如何在网络上通信。这些规则涵盖了数据如何格式化,传输,路由以及接收。网络协议确保了不同制造商的设备能够相互理解和交换数据 协议分层 协议也是软件,在设计上为了更好…...
sunshine和moonlight串流网络丢失帧高的问题(局域网)
注:此贴结果仅供参考 场景环境:单身公寓 路由器:2016年的路由器 开始:电脑安装sunshine软件,手机安装moonlight软件开始串流发现网络丢失帧发现巨高 一开始怀疑就是路由器问题,因为是局域网,而…...
远程视频验证如何改变商业安全
如今,商业企业面临着无数的安全挑战。尽管企业的形态和规模各不相同——从餐厅、店面和办公楼到工业地产和购物中心——但诸如入室盗窃、盗窃、破坏和人身攻击等威胁让安全主管时刻保持警惕。 虽然传统的监控摄像头网络帮助组织扩大了其态势感知能力,但…...
CTO 实际上是做什么的?
https://vadimkravcenko.com/shorts/what-cto-does/ 有刪節 本文旨在为软件工程师解密CTO的角色,并为那些渴望担任这一职位的人提供路线图。 “他们是技术团队与公司其他部门之间的桥梁,确保技术支持并推动业务发展。” CTO的角色经常被误解。CTO有时是…...
【软考速通笔记】系统架构设计师④——系统工程基础知识
文章目录 一、前言二、系统工程方法2.1 霍尔的三维结构2.2 切克兰德法2.3 并行工程2.4 综合集成法 三、系统工程生命周期四、系统生命周期方法五、系统性能5.1 计算机的性能指标5.2 路由器的性能指标5.3 交换机的性能指标5.4 网络的性能资料5.5 操作系统的性能指标5.6 数据库的…...
2024赣ctf-web -wp
1.你到底多想要flag??? 首先来解决第一关: 先了解一下stripos(); 并且此函数处理数组返回false。而且pre_match同样遇见数组是返回false(解释一下正则 i:这是正则表达式的修饰符,代表“不区…...
Android Framework AudioFlinge 面试题及参考答案
目录 请解释什么是 AudioFlinger? AudioFlinger 在 Android 系统中的位置是什么? AudioFlinger 的主要职责有哪些? AudioFlinger 如何管理音频流? 在 AudioFlinger 中,什么是音频会话? 请简述 AudioFlinger 的工作流程。 AudioFlinger 是如何与硬件交互的? 在 A…...
英语知识在线平台:Spring Boot技术应用
2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…...
Qt5.14.2的安装与环境变量及一些依赖库的配置
目录 1.Qt5.14.2安装 2.Qt环境变量及一些依赖库的配置 1.Qt5.14.2安装 QT从入门到入土(一)——Qt5.14.2安装教程和VS2019环境配置 - 唯有自己强大 - 博客园 2.Qt环境变量及一些依赖库的配置 假设QT安装目录为: D:\Qt\Qt5.14.2 将目录: D:\Qt\Qt5.14.…...
2024年9月中国电子学会青少年软件编程(Python)等级考试试卷(六级)答案 + 解析
一、单选题 1、下面代码运行后出现的图像是?( ) import matplotlib.pyplot as plt import numpy as np x np.array([A, B, C, D]) y np.array([30, 25, 15, 35]) plt.bar(x, y) plt.show() A. B. C. D. 正确答案:A 答案…...
go编程中yaml的inline应用
下列代码,设计 Config 和 MyConfig 是为可扩展 Config,同时 Config 作为公共部分可保持变化。采用了匿名的内嵌结构体,但又不希望 yaml 结果多出一层。如果 MyConfig 中的 Config 没有使用“yaml:",inline"”修饰,则读取…...
Springboot自带注解@Scheduled实现定时任务
基于Scheduled注解实现简单定时任务 原理 Spring Boot 提供了Scheduled注解,通过在方法上添加此注解,可以方便地将方法配置为定时任务。在应用启动时,Spring 会自动扫描带有Scheduled注解的方法,并根据注解中的参数来确定任务的…...
VSCode【下载】【安装】【汉化】【配置C++环境(超快)】(Windows环境)
目录 一、VSCode 下载 & 安装 二、VSCode 汉化 三、VSCode C配置 配置环境变量 如何验证是否成功 接着在VSCode中配置编辑 一、VSCode 下载 & 安装 VSCode 下载 & 安装-CSDN博客https://blog.csdn.net/applelin2012/article/details/144009210Download Visual St…...
【八股文】小米
文章目录 一、vector 和 list 的区别?二、include 双引号和尖括号的区别?三、set 的底层数据结构?四、set 和 multiset 的区别?五、map 和 unordered_map 的区别?六、虚函数和纯虚函数的区别?七、extern C …...
ABAP OOALV模板
自用模板,可能存在问题 一、主程序 *&---------------------------------------------------------------------* *& Report ZVIA_OO_ALV *&---------------------------------------------------------------------* REPORT ZVIA_OO_ALV.INCLUDE ZVI…...
qt QDateTime详解
1. 概述 QDateTime 是 Qt 框架中用于处理日期和时间的类。它将 QDate 和 QTime 组合在一起,提供了日期时间的统一处理方案。QDateTime 可以精确到毫秒,并支持时区处理。 2. 重要方法 构造函数: QDateTime() 构造无效的日期时间 QDateTime(const QDa…...
鸿蒙安全控件之位置控件简介
位置控件使用直观且易懂的通用标识,让用户明确地知道这是一个获取位置信息的按钮。这满足了授权场景需要匹配用户真实意图的需求。只有当用户主观愿意,并且明确了解使用场景后点击位置控件,应用才会获得临时的授权,获取位置信息并…...
决策树分类算法【sklearn/决策树分裂指标/鸢尾花分类实战】
决策树分类算法 1. 什么是决策树?2. DecisionTreeClassifier的使用(sklearn)2.1 算例介绍2.2 构建决策树并实现可视化 3. 决策树分裂指标3.1 信息熵(ID3)3.2 信息增益3.3 基尼指数(CART) 4. 代码…...
【Android】RecyclerView回收复用机制
概述 RecyclerView 是 Android 中用于高效显示大量数据的视图组件,它是 ListView 的升级版本,支持更灵活的布局和功能。 我们创建一个RecyclerView的Adapter: public class MyRecyclerView extends RecyclerView.Adapter<MyRecyclerVie…...
自制Windows系统(十)
上图 (真的不是Windows破解版) 开源地址:仿Windows...
Linux——初识操作系统(Operator System)
前言:大佬写博客给别人看,菜鸟写博客给自己看,我是菜鸟。 一、冯偌伊曼体系 图一: 在初识操作系统之前,我们需要对计算机的硬件组成做一定的了解。本篇优先对数据信号做初步分析,暂时不考虑控制信号(操作系…...
RuoYi(若依)框架的介绍与基本使用(超详细分析)
**RuoYi(若依)**是一个基于Spring Boot和Spring Cloud的企业级快速开发平台。它集成了多种常用的技术栈和中间件,旨在帮助企业快速构建稳定、高效的应用系统。以下是关于RuoYi框架的详细介绍和基本使用教程,涵盖了从环境搭建到核心…...