当前位置: 首页 > news >正文

边缘检测评估方法:FOM、RMSE、PSNR和SSIM对比实验和理论研究

图像分割与边缘检测是密切相关的计算机视觉任务。以下图1展示了一个海岸线分割模型的输出示例:

图1: 分割掩码到边缘图的转换过程(数据集:LICS)

模型将每个像素分类为陆地或海洋(分割掩码)。随后,海岸线被定义为分类发生变化的像素位置(边缘图)。边缘检测可以通过提取图像分割模型输出的边界来实现。

本文将研究这种关系来评估海岸图像分割模型。现有研究普遍采用基于混淆矩阵的指标,如准确率、精确率和召回率,这些指标将预测分割掩码中的所有像素与真实掩码进行比较。

但是这种方法可能会高估最关键区域——海岸线。

因为大多数像素位于海洋中心或被陆地完全包围,这使得它们比靠近海岸线的像素更容易分类。图2清晰地展示了这一点。这些错误可能会被大量正确分类的像素所掩盖。

图2: U-Net应用于LICS[2]的预测分割掩码示例。最后一幅图展示了预测结果,括号中的数字表示与真实掩码比较的准确率。红线表示真实海岸线边缘。可以观察到,仅有靠近海岸线的像素被错误分类。

通过将分割掩码转换为边缘图,我们可以应用专注于海岸线的评估指标。但是关于边缘检测模型评估的研究相对有限,尤其是在海岸线检测问题上的应用更是匮乏,所以本文进行了一项实验。

实验结果有助于理解哪些边缘检测评估指标最适合海岸线检测问题。值得注意的是,这一结论在一般边缘检测问题中同样适用。

边缘检测概述

边缘检测是计算机视觉中的基础技术,旨在识别图像中像素强度的边界或突变。这些边界或"边缘"可能代表物体轮廓、纹理过渡,或表面方向的显著变化。

需要注意的是,利用图像分割的边界只是边缘检测的一种方法。其他方法包括直接输出边缘图的深度学习模型,以及基于梯度的方法,如Sobel或Canny算子。这些方法通过计算图像中像素强度的梯度或变化率来检测边缘。

图3: 基于梯度的边缘检测算法输出示例

最佳方法的选择取决于检测过程的具体目标。在某些情况下,我们可能需要找出图像中所有显著边缘。在其他情况下,我们可能只关注特定边缘,例如识别两个不同区域之间的边界。边缘检测评估指标主要适用于后一种情况。

边缘检测评估指标

边缘检测算法的输出通常称为边缘图,这是一种二值图像,其中边缘像素为正类(1),非边缘像素为负类(0)。评估指标用于比较检测到的边缘图与真实边缘图。

本文首先回顾了相关综述论文[4, 5],这些论文建议使用基于混淆矩阵的指标。但是这些指标在应用于图像分割模型时的解释与边缘检测略有不同。例如:

  • 真正例(TPs): 预测的边缘像素与真实边缘位于相同位置的数量。
  • 准确率: 正确标记的边缘像素的百分比。

除此之外,综述论文还提到了一些更为专门的指标,这些指标旨在捕捉边缘检测问题的独特特征。

均方根误差(RMSE)和峰值信噪比(PSNR)

均方误差(MSE)是一个常用指标,已被改编用于评估边缘检测模型。基于MSE,我们可以得到RMSE和PSNR。

RMSE值越小表示性能越好,而PSNR值越大表示性能越好。由于这两个指标都基于MSE,我们可以预期它们会得出类似的结论。

结构相似性指数(SSIM)

SSIM是一种广泛用于评估图像质量的指标。它试图以更接近人类视觉系统识别对称性的方式比较图像[6]。SSIM包括三个组成部分:亮度(l)比较图像的亮度,对比度©测量像素变化的相似性,结构(s)比较图像中模式的相似性。

在将SSIM应用于边缘检测时,需要考虑我们处理的是二值图像。例如,亮度(l)现在将比较边缘像素的平均数量。结构(s)可能是最重要的组成部分,因为我们最终比较的是图像的结构。

优点图(FOM)

FOM[5]是一个相对较少使用的指标。它衡量检测到的边缘与真实边缘之间的平均距离。在海岸线检测问题中,这可以量化预测海岸线与实际海岸线的平均偏差。

由于FOM在Python中缺乏现成的实现,以下代码提供了一个FOM的实现示例:

 deffom(self,ref_img,img, alpha=1.0/9):  """  计算给定图像img的Pratt优点图,使用金标准图像作为理想边缘像素的参考。"""  # 计算金标准图像的距离变换  dist=distance_transform_edt(np.invert(ref_img))  fom=1.0/np.maximum(  np.count_nonzero(img),  np.count_nonzero(ref_img))  N, M=img.shape  foriinrange(N):  forjinrange(M):  ifimg[i, j]:  fom+=1.0/ ( 1.0+dist[i, j] *dist[i, j] *alpha)  fom/=np.maximum(  np.count_nonzero(img),  np.count_nonzero(ref_img))      returnfom

这些指标在各种边缘检测问题的评估中都有应用。例如:

  • SSIM用于比较图像降采样前后边缘检测算法的质量[7]。
  • PSNR和SSIM的组合用于评估医学图像中预测的边缘[8]。
  • FOM应用于X射线图像分析[9]。

尽管这些应用表明这些指标可能适用于海岸线检测问题,但我们仍需进行深入的实验研究来验证其有效性。

实验设计

为了深入理解这些评估指标,本文将它们应用于Sentinel-2水体边缘数据集(SWED)[3]。我们使用了包含49个测试位置的98张Sentinel-2卫星图像的测试集。每个样本包括12个光谱波段作为输入,以及一个二值分割掩码作为输出,其中每个像素被分类为陆地(0)或水体(1)。这些掩码随后被转换为边缘图以进行分析。

SWED测试集示例

光谱波段代表卫星记录的不同波长的电磁辐射。这包括常见的可见光波段(红、绿、蓝),以及人眼不可见的波长,如红外光。虽然我们考虑了所有波段,但本文重点关注近红外(NIR)波段,因为它在遥感问题中对水体提取特别重要[10]。

我们对每个图像的NIR波段应用了Canny边缘检测算法。选择Canny算法是因为其灵活性,特别是可以调整上(t1)和下(t2)滞后阈值。通过改变这些阈值,我们可以调整Canny算法对图像中边缘的敏感度。

理论上,随着阈值的增加,Canny算法应该对噪声边缘(如由海浪和陆地开发造成的)变得不那么敏感。在某个临界点,甚至显著的海岸边缘也会被排除。下图4展示了这种效果。

图4: Canny滞后阈值增加的效果示例。括号中给出了下(t2)和上(t1)阈值。

本实验使用了6个阈值水平: [50,100], [50,150], [100,200], [100,300], [200,400], [200,600],其中分别给出了t2和t1。实验的目标是评估边缘检测指标在选择最佳阈值水平方面的可靠性。这一评估通过视觉分析和趋势分析来完成。

视觉分析

在应用边缘检测指标之前,我们首先进行了视觉分析。对于98张海岸线图像中的每一张,我们选择了与真实边缘图最相似的检测边缘图,即选择了最佳的阈值水平。

然后应用RMSE、PSNR、SSIM和FOM,并记录产生这些指标最佳结果的阈值。这使我们能够将指标选择的检测边缘图与专家选择的进行比较。

下图5展示了这种分析的一些典型示例。可以看到随着阈值的增加(从左到右),检测到的边缘数量逐渐减少。对于每幅图像,每个指标的最佳值以粗体标出。RMSE、PSNR和SSIM倾向于选择具有更高阈值的边缘图,而FOM倾向于选择更接近真实边缘图的结果。

图5: FOM正确识别视觉上最接近真实值的检测边缘图的示例。每行代表一个不同的示例图像。列展示了使用递增滞后阈值检测的边缘图。粗体数字表示每个指标的最佳值。

分析结果表明,FOM是选择最佳阈值的最可靠指标。它能够在92.6%的情况下选择更好的阈值,在66.3%的情况下选择最佳阈值。相比之下,RMSE、PSNR和SSIM分别只能在6.3%、6.3%和11.6%的情况下选择最佳阈值。

这些结果为FOM作为最适合的指标提供了强有力的经验证据。但是这个过程仍然存在一定的主观性。

趋势分析

下图6中展示的趋势为FOM是最可靠指标提供了更客观的证据。这些图表展示了测试集中所有图像的指标平均值。

随着阈值的增加,Canny算法检测到的边缘数量减少。在这个过程中,可以观察到RMSE、PSNR和SSIM呈现单调改善的趋势。这表明这些指标可能倾向于选择边缘较少的图像,而不是最接近真实值的图像。相比之下FOM没有表现出这种单调改善的趋势。

图6: NIR光谱波段的平均RMSE、PSNR、SSIM和FOM,误差条表示标准偏差。

图6中的误差条代表每个阈值下指标值的标准偏差。我们可以观察到FOM值的相对变异性更大。这符合我们对能够识别最佳检测边缘图的指标的预期。

考虑到每幅图像中存在不同的条件,预计最佳阈值会有所不同。例如在某些图像中,由于海岸线与其他边缘的对比更加明显,可能能够使用更高的阈值。这导致在对所有图像进行评估时,某个阈值水平的变异性更高。

数学分析

为了深入理解这些结果,我们对RMSE、PSNR和SSIM的公式进行了详细分析。比较边缘图是比较两幅图像的特殊情况,其中像素值只能取1或0。

这意味着MSE中的值(Ei,j − Gi,j )²对于错误标记的像素将取值为1,否则为0。

基于这一观察,可以用基于混淆矩阵的度量重新表述MSE:

进一步分析表明,随着阈值的增加,被标记为边缘的像素数量减少。这导致假阳性(FP)减少而假阴性(FN)增加。这些变化对MSE产生了相反的影响。但是我们观察到FP的减少速度通常快于FN的增加速度。这解释了为什么随着阈值的增加,MSE(因此RMSE和PSNR)呈现单调改善的趋势。

SSIM的数学分析稍微复杂一些,但也可以用类似的方式重新表述。完整的推导可以在附录中找到。尽管SSIM的关系不如MSE那么直接,但它可能以类似的方式受到混淆矩阵度量单调变化的影响。

这些单调变化解释了本文中观察到的结果。随着Canny算法的阈值水平增加,检测到的边缘数量减少,导致RMSE、PSNR和SSIM的值单调改善。换言之这些指标倾向于选择产生较少边缘的阈值水平,而不是最接近真实边缘图的阈值水平。

这种效应并不一定存在于所有边缘检测问题中。其他方法如基于深度学习的方法,可能不会表现出这种敏感性机制。

MSE和SSIM的重新表述表明,这些指标相对于基于混淆矩阵的传统指标并没有显著优势。对于一般的边缘检测问题,使用这些复杂的指标可能会增加不必要的计算复杂性,而没有提供额外的洞察。

所有这些指标的一个共同缺点是,它们对错误标记的像素给予相同的权重,无论这些像素与真实边缘的距离如何。在海岸线检测的背景下,这意味着一个离实际海岸线几米远的像素与一个几公里远的像素会被同等对待。

相比之下,FOM通过纳入像素之间的距离提供了一个更有意义的度量。在海岸线检测问题中,FOM直接量化了检测到的海岸线与实际海岸线之间的平均距离。

FOM提供了检测到的边界和真实边界之间平均距离的度量。当与混淆矩阵指标结合使用时,FOM可以在评估边缘检测或图像分割模型时提供独特且有价值的信息。

讨论与总结

本文通过对RMSE、PSNR、SSIM和FOM这四种边缘检测评估指标的深入分析,揭示了它们在评估边缘检测算法性能时的优缺点。尽管研究的初始动机来自海岸线检测的具体问题,但所得出的结论对广泛的边缘检测应用都具有重要意义。

主要发现

  1. FOM的优越性: 实验结果明确表明,FOM在选择最佳边缘检测参数方面显著优于其他指标。FOM能够在92.6%的情况下选择更好的阈值,在66.3%的情况下选择最佳阈值。这一性能远远超过了RMSE、PSNR和SSIM。
  2. RMSE、PSNR和SSIM的局限性: 这些指标表现出对低边缘密度图像的偏好,这可能导致对实际边缘检测性能的错误评估。它们倾向于选择产生较少边缘的参数设置,而不是最准确反映真实边缘的设置。
  3. 距离信息的重要性: FOM的优势主要源于其考虑了预测边缘与真实边缘之间的空间距离。这一特性在评估边缘检测算法的准确性时至关重要,尤其是在如海岸线检测等应用中,边缘的精确位置非常关键。
  4. 指标的数学基础: 对RMSE、PSNR和SSIM的数学分析揭示了它们实质上是基于混淆矩阵的度量的变体。这解释了为什么它们可能不比传统的分类评估指标(如准确率、精确率和召回率)提供更多信息。

尽管本文的实验集中在海岸线检测上,但其结论对各种边缘检测应用都有重要意义:

  1. 医学图像分析: 在诊断图像中准确定位器官或肿瘤边界至关重要。FOM可以提供更准确的评估,因为它考虑了预测边缘与真实边界的距离。
  2. 计算机视觉: 在物体识别和场景理解任务中,准确的边缘检测可以显著提高性能。使用FOM评估这些系统可以更好地反映它们在实际应用中的效果。
  3. 遥感: 除了海岸线检测,FOM可以应用于其他遥感任务,如森林边界检测、城市扩张监测等。
  4. 工业应用: 在质量控制和缺陷检测等领域,边缘检测的精度直接影响系统的可靠性。FOM提供了一种更合适的方法来评估这些系统的性能。

未来研究方向

  1. FOM的改进: 尽管FOM表现优异,但仍有改进空间。未来的研究可以探索如何更好地权衡距离误差和边缘检测的其他方面。
  2. 计算效率: 对于大规模数据集,FOM的计算可能比RMSE或PSNR更耗时。研究如何提高FOM的计算效率将有助于其在实际应用中的广泛采用。
  3. 与深度学习的结合: 随着深度学习在边缘检测中的应用越来越广泛,研究如何将FOM整合到神经网络的损失函数中可能会带来有趣的结果。
  4. 多指标评估框架: 虽然FOM在许多情况下表现优异,但综合使用多个指标可能会提供更全面的评估。开发一个能够智能结合多个指标的评估框架是一个有价值的研究方向。

总结

本文通过理论分析和实证实验,明确展示了FOM在边缘检测评估中的优越性。相比之下,RMSE、PSNR和SSIM在这一任务中表现出明显的局限性。这一发现不仅对海岸线检测具有直接意义,还可广泛应用于各种需要精确边缘定位的计算机视觉任务。

研究结果强调了在选择评估指标时考虑任务特定需求的重要性。对于边缘检测这样的任务,仅仅依赖于像素级比较的指标可能无法充分反映算法的实际性能。FOM通过考虑空间距离信息,提供了一个更加合理和实用的评估标准。

本文代码:

https://github.com/conorosully/edge-detection-metrics

引用

[1] C. O’Sullivan, S. Coveney, X. Monteys and S. Dev, “The Effectiveness of Edge Detection Evaluation Metrics for Automated Coastline Detection,” 2023 Photonics & Electromagnetics Research Symposium (PIERS) https://arxiv.org/abs/2405.11498

[2] O’Sullivan, C., Kashyap, A., Coveney, S., Monteys, X. and Dev, S., 2024. **Enhancing coastal water body segmentation with Landsat Irish Coastal Segmentation (LICS) dataset.**Remote Sensing Applications: Society and Environment, p.101276. https://arxiv.org/abs/2409.15311

[3] C. Seale, T. Redfern, P. Chatfield, C. Luo, and K. Dempsey. Coastline detection in satellite imagery: A deep learning approach on new benchmark data. Remote Sensing of Environment, 278:113044, 2022.

[4] D. Sadykova and A. P. James. Quality assessment metrics for edge detection and edge-aware filtering: A tutorial review. In 2017 International Conference on Advances in Computing, Communications and Informatics (ICACCI), pages 2366–2369. IEEE, 2017.

[5] N. Tariq, R. A. Hamzah, T. F. Ng, S. L. Wang, and H. Ibrahim. Quality assessment methods to evaluate the performance of edge detection algorithms for digital image: A systematic literature review. IEEE Access, 9:87763–87776, 2021.

[6] Z. Wang, A. Bovik, H. Sheikh, and E. Simoncelli. Image quality assessment: from error visibility to structural similarity. IEEE Transactions on Image Processing, 13(4):600–612, 2004.

[7] Y. W. Kim and A. V. Krishna. A study on the effect of canny edge detection on down-scaled images. Pattern Recognition and Image Analysis, 30:372–381, 2020.

[8] R. Menaka, C. Chellamuthu, and R. Karthik. Efficient feature point detection in ct images using discrete curvelet transform. 2013.

[9] W.-C. Lin and J.-W. Wang. Edge detection in medical images with quasi-high-pass filter based on local statistics. Biomedical Signal Processing and Control, 39:294–302, 2018.

[10] J. P. Mondejar and A. F. Tongco. Near infrared band of landsat 8 as water index: a case study around cordova and lapu-lapu city, cebu, philippines. Sustainable Environment Research, 29:1–15, 2019.

作者:Conor O’Sullivan

https://avoid.overfit.cn/post/28d6097646cb4ef2bb6d7380431952b9

相关文章:

边缘检测评估方法:FOM、RMSE、PSNR和SSIM对比实验和理论研究

图像分割与边缘检测是密切相关的计算机视觉任务。以下图1展示了一个海岸线分割模型的输出示例: 图1: 分割掩码到边缘图的转换过程(数据集:LICS) 模型将每个像素分类为陆地或海洋(分割掩码)。随后,海岸线被定义为分类发生变化的像素位置(边缘图)。边缘检测可以通过提取图像分割…...

MySql 多表查询

多表查询:指从多张表中查询数据。 笛卡儿积:笛卡儿积是指在数学中,两个集合(A集合 和 B集合)的所有组合情况。 连接查询 内连接:相当于查询A、B交集部分数据外连接 左外连接:查询左表所有数据…...

数学建模算法与应用 第11章 偏最小二乘回归及其方法

目录 11.1 偏最小二乘回归概述 11.2 Matlab 偏最小二乘回归命令 Matlab代码示例:偏最小二乘回归 11.3 案例分析:化学反应中的偏最小二乘回归 Matlab代码示例:光谱数据的PLS回归 习题 11 总结 偏最小二乘回归(Partial Least …...

【MATLAB代码】TDOA定位,4个基站、3个时间差、三维定位(可直接复制粘贴到MATLAB上运行)

文章目录 程序结构源代码运行结果代码结构输入输出解析该MATLAB代码实现了基于时间差定位(TDOA, Time Difference of Arrival)的方法,使用最小二乘法在三维空间中估计一个未知点的位置。该算法利用一个主锚点和三个副锚点的已知位置,通过计算信号传播时间差来推算出目标位置…...

uniapp引入ThorUI的方法

1、下载文件 2、复制相应的文件除了pages 3、往项目中复制即可 4、引入即可实现 5、添加easycome自动引入...

面试官:手写一个New

在JavaScript中,new操作符主要用于创建一个对象示例。通过new操作符,可以创建一个新的对象,并将这个对象的原型链只想一个构造函数的原型对象,然后执行构造函数中的代码初始化这个新对象。 常见的new的使用为 new Array() new Set…...

merlion的dashboard打开方法

安装好merlion包后,在anaconda prompt中进行如下图操作: 先进入创建好的虚拟环境:conda activate merlion再执行命令:python -m merlion.dashboard在浏览器中手动打开图中的地址: http://127.0.0.1:8050 打开后的界面…...

自监督学习:引领机器学习的新革命

引言 自监督学习(Self-Supervised Learning)近年来在机器学习领域取得了显著进展,成为人工智能研究的热门话题。不同于传统的监督学习和无监督学习,自监督学习通过利用未标注数据生成标签,从而大幅降低对人工标注数据…...

Web安全常用工具 (持续更新)

前言 本文虽然是讲web相关工具,但在在安全领域,没有人是先精通工具,再上手做事的。鉴于web领域繁杂戎多的知识点(工具是学不完的,哭),如果你在本文的学习过程中遇到没有学过的知识点&#xff0…...

不踩坑,青龙面板小问题解决方案~

好久没写了,随手记录一下。 1. 新建目录 很多人跟我一样入坑的手机免root青龙面板,一般用的都是2.10.13版本。这个版本比较早,似乎没有新建目录的功能(也可能是我不会用哈哈),以下是对比图: 大家…...

2025秋招倒计时---招联金融

【投递方式】 直接扫下方二维码,或点击内推官网https://wecruit.hotjob.cn/SU61025e262f9d247b98e0a2c2/mc/position/campus,使用内推码 igcefb 投递) 【招聘岗位】 后台开发 前端开发 数据开发 数据运营 算法开发 技术运维 软件测试 产品策…...

基于yolov8、yolov5的果蔬检测系统(含UI界面、数据集、训练好的模型、Python代码)

项目介绍 项目中所用到的算法模型和数据集等信息如下: 算法模型:     yolov8、yolov8 SE注意力机制 或 yolov5、yolov5 SE注意力机制 , 直接提供最少两个训练好的模型。模型十分重要,因为有些同学的电脑没有 GPU&#xff0…...

出海快报 | “三消+短剧”手游横空出世,黄油相机“出圈”日本市场,从Q1看日本手游市场趋势和机会

编者按:TopOn出海快报栏目为互联网出海从业者梳理出海热点,供大家了解行业最新发展态势。 1.“三消短剧”横空出世,融合创新手游表现亮眼 随着竞争的加剧,新产品想要突出重围,只能在游戏中加入额外的元素。第一次打开…...

Linux高效查日志命令介绍

说明:之前介绍Linux补充命令时,有介绍使用tail、grep命令查日志; Linux命令补充 今天发现仅凭这两条命令不够,本文扩展介绍一下。 命令一:查看日志开头 head -n 行数 日志路径如下,可以查看程序启动是否…...

非线性关卡设计

【GDC】如何设计完全非线性的单人关卡_DOOM (bilibili.com) 本文章算是此视频的简单笔记,更详细还请看视频 设计完全非线性关卡强调自由移动和沙盒式玩法,鼓励玩家进行不可预测的移动和空间探索。讲解者分享了设计此类关卡的具体步骤,包括明…...

Qt-链接数据库可视化操作

1. 概述 Qt 能够支持对常见数据库的操作,例如: MySQL、Oracle、SqlServer 等等。 Qt SQL模块中的API分为三层:驱动层、SQL接口层、用户接口层。 驱动层为数据库和SQL接口层之间提供了底层的桥梁。 SQL接口层提供了对数据库的访问&#xff0…...

萤火php端: 查询数据的时候报错: “message“: “Undefined index: pay_status“,

代码&#xff1a;getGoodsFromHistory <?php // ---------------------------------------------------------------------- // | 萤火商城系统 [ 致力于通过产品和服务&#xff0c;帮助商家高效化开拓市场 ] // -----------------------------------------------------…...

程序人生-2024我的个人总结

可能现在写个人总结比较早&#xff0c;但是眼看着还有三个月&#xff0c;今年就过去了&#xff0c;所以决定提前写写&#xff0c;今年对于我来说是不平凡的一年&#xff0c;先是加薪&#xff0c;之后求婚&#xff0c;以为快要走上人生巅峰的时候&#xff0c;被裁员&#xff0c;…...

SQL自学:什么是联结,如何编写使用联结的SELECT语句

在 SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;的世界里&#xff0c;联结&#xff08;JOIN&#xff09;是一个强大且至关重要的概念。它允许我们从多个表中检索数据&#xff0c;从而实现更复杂的查询和数据分析。本文将深入探讨联结的概念…...

【C++】函数重载+引用

大家好&#xff0c;我是苏貝&#xff0c;本篇博客带大家了解C的函数重载和引用&#xff0c;如果你觉得我写的还不错的话&#xff0c;可以给我一个赞&#x1f44d;吗&#xff0c;感谢❤️ 目录 一. 预处理、编译、汇编、链接二. 函数重载1 概念2 C支持函数重载的原理—名字修饰…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

Leetcode 3577. Count the Number of Computer Unlocking Permutations

Leetcode 3577. Count the Number of Computer Unlocking Permutations 1. 解题思路2. 代码实现 题目链接&#xff1a;3577. Count the Number of Computer Unlocking Permutations 1. 解题思路 这一题其实就是一个脑筋急转弯&#xff0c;要想要能够将所有的电脑解锁&#x…...

srs linux

下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935&#xff0c;SRS管理页面端口是8080&#xff0c;可…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

.Net Framework 4/C# 关键字(非常用,持续更新...)

一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...

算法笔记2

1.字符串拼接最好用StringBuilder&#xff0c;不用String 2.创建List<>类型的数组并创建内存 List arr[] new ArrayList[26]; Arrays.setAll(arr, i -> new ArrayList<>()); 3.去掉首尾空格...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...