图像处理领域之►边缘检测大合集◄【应该是全网仅有的了吧】

news2024/11/17 15:49:58

概述 {\color{Brown}概述} 概述

边缘检测是图像处理和计算机视觉里的一个基本议题,它旨在辨识图像中亮度变换明显的点,用于定位图像中物体的边界或图像中的区域。边缘是图像中像素灰度值突然发生变化的区域,变化原因可能是由高像素值变成低像素值,也可能由低像素值变成高像素。通过计算得出的边缘信息会有正数和负数,因此要把计算结果采取绝对值,以便在图像中同时显现出这两种边缘信息。边缘检测在图像属性中的显著变化中起作用,包括深度上的不连续、表面方向不连续、物质属性变化和场景照明变化。

边缘检测的方法可以大致分为两类:基于查找的方法和基于零穿越的方法。基于查找的方法通过寻找图像一阶导数中的最大和最小值来检测边界,通常是将边界定位在梯度最大的方向。基于零穿越的方法通过寻找图像二阶导数零穿越来寻找边界,通常是Laplacian过零点或者非线性差分表示的过零点。

边缘检测在图像处理和计算机视觉中非常重要,它可以大幅度地减少数据量,并且剔除了可以认为不相关的信息,保留了图像重要的结构属性。因此,边缘检测在图像增强、特征提取、图像分割、物体识别等许多领域都有广泛的应用。

早期的边缘检测算法可以追溯到1947年至1950年,当时Prewitt和Kirsch已经开始研究带有方向性的边缘检测技术。后来,Robinson总结和发展了Prewitt和Kirsch的成果,他的理论贡献被收录在1977年的文章中。

随着技术的发展,边缘检测的应用范围不断扩大。例如,Marr在1980年发表的文章中提出了LoG算法,通过引入高斯滤波的方法来降低噪声的影响。这种算法成为了后来卫星成像和CT扫描等众多科技创新的基础。

在现代图像处理中,边缘检测仍然是一个重要的技术。例如,Prewitt的边缘检测算法被广泛应用在图像处理中,他的主要理论被收录在1970年出版的文献中,这部文献在后续涉及边缘检测内容的图像处理著作中被引用率极高。Sobel在1970年提出了Sobel算子,可以更好地检测出图像中的边缘。Canny在1986年提出了Canny边缘检测算法,该算法被认为是当时最优秀的边缘检测算法之一。随着小波变换理论的兴起,学者们也开始将其应用于边缘检测领域,提出了小波变换边缘检测算法。此外,随着深度学习技术的快速发展,研究者们开始利用深度学习模型进行边缘检测。其中,最具代表性的是基于卷积神经网络(CNN)的边缘检测算法。这类算法通过训练大量的图像数据,让神经网络自动学习出图像中的边缘特征,从而进行边缘检测。目前,基于深度学习的边缘检测算法已经成为了主流。

在这里插入图片描述
在这里借用一下我之前汇报过的PPT~

  • Roberts边缘检测算法(1970年):这是最早的边缘检测算法之一,它利用像素间方向上的差分来计算边缘强度。
  • Prewitt边缘检测算法(1970年):该算法使用像素周围的相邻像素来计算边缘强度,可以检测水平和垂直边缘。
  • Sobel边缘检测算法(1970年):该算法通过计算像素上下左右相邻像素的加权差来检测边缘,权重取决于像素距离。
  • Canny边缘检测算法(1986年):Canny算法被认为是当时最优秀的边缘检测算法之一,它遵循三个准则:最大强度原则、非极大值抑制和双阈值处理。
  • Laplacian边缘检测算法(1990年):该算法通过计算图像的Laplacian算子来检测边缘,对噪声较为敏感。
  • Frangi边缘检测算法(1998年):该算法基于多尺度滤波器来检测边缘,考虑了边缘的方向和幅度信息。
  • Wu边缘检测算法(2006年):该算法基于图像的纹理特征来检测边缘,能够更好地处理具有复杂纹理的图像。
  • He等人的边缘检测算法(2011年):该算法利用局部和全局像素信息来计算边缘强度,可以更好地处理低对比度图。
  • DeepEdge边缘检测算法(2016年):该算法利用深度学习模型来学习图像的边缘特征,能够自动检测出图像中的边缘。
  • U-Net边缘检测算法(2017年):该算法采用编码器和解码器结构,能够自动学习图像的特征并恢复图像的细节信息,同时具有较好的边缘检测效果。
  • RCN边缘检测算法(2019年): 优先考虑有效利用 ResNet 的高级抽象能力,获得最先进的边缘检测结果。 按照特定的顺序融合高、中、低级功能,将具有最高级别特征的张量设置为起点,将其与较低抽象级别的特征逐层组合,直到达到最低级别。 在修改后的 PASCAL VOC 2012 数据集上和 BSDS500 数据集进行精细训练,获得了最先进的边缘检测结果,ODS 为 0.824。
  • DSCD:Deep Structural Contour Detection(2020年):提出了一种新颖但非常有效的轮廓检测损失函数,它能够惩罚每对预测和地面实况之间轮廓结构相似性的距离。引入了一种新颖的卷积编码器-解码器网络,可以捕获高级特征之间的密集连接并产生有效的语义信息,进行信息逐渐传播并与低级特征融合。
  • Pidinet像素差分网络边缘检测器(2021年):提出一种简单、轻量级但有效的架构,名为像素差分网络(PiDiNet),用于高效边缘检测。 令人惊讶的是,当仅使用 BSDS500 和 VOC 数据集从头开始训练时,PiDiNet 可以超越人类在 BSDS500 数据集上以 100 FPS 和少于 1M 参数记录的感知结果(FODS 测量中为 0.807 与 0.803)。
  • MAMDD边缘检测器(2022年):使用一组多尺度各向异性形态方向导数来提取输入图像的边缘图,保持高边缘分辨率,同时减少噪声干扰。
  • UAED不确定性感知边缘检测器(2023年):提出一种新颖的不确定性感知边缘检测器(UAED),利用不确定性来研究不同注释的主观性和模糊性。

以上是一些具有代表性的边缘检测算法,每种算法都有其优缺点和适用场景。在实际应用中,需要根据具体情况选择合适的算法。

数据集 {\color{Purple}数据集} 数据集

用在图像处理之边缘检测中的数据集不外乎以下 十一 {\color{Brown}十一} 十一 种:

  1. BSDS300(Berkeley Segmentation Data Set 300):这是由伯克利大学计算机视觉研究组提供的数据集,可以用来进行图像分割和物体边缘检测。

    这项工作的目标是为图像分割和边界检测的研究提供实证基础。 为此,收集了来自 30 名人类受试者的 1,000 张科瑞尔数据集图像的 12,000 个手工标记分割。 一半的分割是通过向受试者呈现彩色图像获得的; 另一半来自呈现灰度图像。 基于此数据的公共基准包含 300 张图像的所有灰度和颜色分割。 图像分为200张图像的训练集和100张图像的测试集。

  2. BSDS500(Berkeley Segmentation Data Set 500):该数据集是 BSDS300 的扩展版本,包含200张训练图、100张验证图和200张测试图,所有真值用.mat文件保存,包含segmentation和boundaries。

在这里插入图片描述
不同的标注者对数据进行了标注,训练时真值可采用平均值或者用来扩充数据。在评测代码中会依次对这五个真值进行对比。

  1. NYU Depth Dataset V2:该数据集由 Microsoft Kinect 的 RGB 和深度摄像头记录的各种室内场景的视频序列组成。该数据集有几个组成部分,带标签:视频数据的子集,带有密集的多类标签。 该数据还经过预处理以填充缺失的深度标签。原始数据:Kinect 提供的原始 RGB、深度和加速度计数据。工具箱:用于操作数据和标签的有用功能。

在这里插入图片描述

其特点有:

  • 1449 对对齐的 RGB 和深度图像进行密集标记,
  • 取自 3 个城市的 464 个新场景,
  • 407,024 个新的未标记帧,
  • 每个对象都标有一个类和一个实例号,
  1. MDBD (Multicue Dataset for Edge Detection):为了研究具有挑战性的自然场景中边界检测过程中几种早期视觉线索(亮度、颜色、立体、运动)的相互作用,作者构建了一个由自然场景的短双目视频序列组成的多线索视频数据集,考虑了各种地点(从大学校园到街景和公园)和季节,以尽量减少可能的偏差,尝试通过在每个镜头中以不同的外观取景来捕捉更具挑战性的场景以进行边界检测。 代表性示例关键帧如下图所示:

在这里插入图片描述

该数据集包含 100 个场景,每个场景由左视图和右视图短(10 帧)颜色序列组成。 每个序列以每秒 30 帧的速率进行采样。 每帧的分辨率为 1280 x 720 像素。

  1. DTU Robot Image Data Sets:该数据集(免费提供)旨在进行多视图立体(MVS)评估,并使用机器人实验室设置进行制作。工业机器人手臂上安装有结构光扫描仪。 这允许与数据集中的每个图像相对应的结构光扫描。 这些图像是由结构光扫描仪中的一台相机拍摄的。 可以在此处找到展示数据集的小视频。

在这里插入图片描述
该数据集由 124 个不同的场景组成,其中 80 个场景已用于上述论文的评估。 其余 44 个主要由以 90 度间隔旋转和扫描四次的场景组成,从而实现 360 度模型。 由于质量低下,一些已从评估中删除。

为了解决 MVS 问题,场景包含各种对象。 同时,数据集还包括具有非常相似物体的场景,例如 样板房,以便可以探索班级内的变异性。 每个场景均从 49 或 64 个位置拍摄,对应于每个场景或扫描中的 RGB 图像数量。 图像分辨率为 1600 x 1200。通过 matlab 校准工具箱可以高精度找到相机位置和相机内部参数,这也是检索这些参数所需的工具箱。 最后,场景是在所有 49 或 64 个场景中使用从定向到漫射的七种不同照明条件进行记录的。

  1. UDED: Unified Dataset for Edge Detection:该数据集是来自以下 1、2 或 3 个图像的集合:BIPED、BSDS500、BSDS300、DIV2K、WIRE-FRAME、CID、CITYSCAPES、ADE20K、MDBD、NYUD、THANGKA、PASCAL-Context、SET14、URBAN10 和相机 - 男人的形象。 图像选择过程包括计算所有图像的四分位距(IQR)强度值,不考虑大于720×720像素的图像。 在HR图像的数据集中,它们被剪切了。 该数据集仅用于边缘检测,不适用于轮廓或边界任务。

  2. BIPED (Barcelona Images for Perceptual Edge Detection):它包含 1280 个室外图像 250 个每个 720 像素。 这些图像已经由计算机视觉领域的专家仔细注释,因此没有考虑冗余。 尽管如此,所有结果都经过多次交叉检查,以纠正一名受试者可能出现的错误或错误边缘。 该数据集可作为评估边缘检测算法的基准公开使用。 该数据集的生成是由于缺乏边缘检测数据集,实际上,2016 年发布的边缘检测任务只有一个公开可用的数据集(MDBD:用于边界检测的 Multicue 数据集 - 边缘检测的子集)。

在这里插入图片描述
通过查看 GT 可以了解 BIPED 图像中边缘级别注释的详细程度,请参见上图。BIPED 数据集有 250 张高清图像。 这些图像已经被分割用于训练和测试。 200 个用于训练,50 个用于测试。

  1. Gun Detection Dataset:这是一个枪支检测数据集,其中包含从几个不同来源收集的 51K 张带注释的枪支图像(用于枪支检测)和其他 51K 个裁剪的枪支芯片图像(用于枪支分类)。

  2. Contour image database: CID :轮廓图像数据库 -contours.tar.gz,6.7 MB -包含 40 个大小为 512x512 像素的灰度图像,采用 PGM 格式。 每个图像代表一个自然图像场景,并附有由人类绘制的相关地面实况轮廓图。

在这里插入图片描述
11. PASCAL-Context Dataset:该数据集是 PASCAL VOC 2010 的一组附加注释。它通过提供整个场景的注释来超越原始的 PASCAL 语义分割任务。 统计部分有 400 多个标签的完整列表。

在这里插入图片描述
PASCAL Context 数据集是 PASCAL VOC 2010 检测挑战的扩展,它包含所有训练图像的像素级标签。 它包含 400 多个类(包括原始 20 个类加上 PASCAL VOC 分割的背景),分为三类(对象、东西和混合)。 该数据集的许多对象类别过于稀疏; 因此,通常选择使用 59 个频繁类的子集。

实践 {\color{Red}实践} 实践

针对常见的边检算法作了如下罗列:

深度学习方法 {\color{Blue} 深度学习方法} 深度学习方法

1.UAED:The Treasure Beneath Multiple Annotations: An Uncertainty-aware Edge Detector

  • 计划完成复现
  • 完成任务复现

该论文发表在2023年的CVPR上,作者为华人Caixia Zhou, Yaping Huang, Mengyang Pu, Qingji Guan, Li Huang and Haibin Ling

在这里插入图片描述
在文中,作者提出了一种新颖的不确定性感知边缘检测器(UAED),它利用不确定性来研究不同注释的主观性和模糊性。 首先将确定性标签空间转换为可学习的高斯分布,其方差衡量不同注释之间的模糊程度。 然后将学习到的方差视为预测边缘图的估计不确定性,不确定性较高的像素很可能是边缘检测的硬样本。 因此,设计了一个自适应权重损失来强调对那些具有高不确定性的像素的学习,这有助于网络逐渐集中在重要的像素上。 UAED 可以与各种编码器-解码器主干结合使用,大量实验表明,UAED 在多个边缘检测基准上一致地实现了卓越的性能。

该项目代码量较少:https://github.com/ZhouCX117/UAED
复现的大致步骤:
1.1 第一步

需要准备深度学习及Python开发环境,参考:
Ubuntu18.04安装Nvidia驱动【全网不坑,超全步骤】(亲测~)
Ubuntu18.04安装cuda10.1+cudnn8.0.5+pytorch1.8.1【亲测~】
最好使用Pycharm编辑器来管理你的代码。

1.2 准备数据

在这里插入图片描述

BSD数据包括了数据增强后的处理数据,此文件夹包含训练集但不包含有效集:

在这里插入图片描述

1.3 修改训练代码和相对路径,即可开始训练或测试:

在这里插入图片描述

2.EDTER: Edge Detection with Transformer

  • 计划完成复现
  • 完成任务复现

同样该篇论文也发表在2022年的CVPR论文集里面,作者为
在这里插入图片描述

为了处理感受野的扩大,导致局部细节逐渐被抑制的问题。 最近,视觉转换器在捕获远程依赖性方面表现出了出色的能力。 受此启发,作者提出了一种新颖的基于变压器的边缘检测器——TransformER(EDTER),通过同时利用完整的图像上下文信息和详细的局部线索来提取清晰明快的对象边界和有意义的边缘。 EDTER 的工作分两个阶段:

在这里插入图片描述
在第一阶段,全局变换器编码器用于捕获粗粒度图像块上的远程全局上下文。
在第二阶段,本地变压器编码器对细粒度补丁进行工作,以挖掘短程本地线索。

每个变压器编码器后面都有一个精心设计的双向多级聚合解码器,以实现高分辨率功能。 最后,全局上下文和局部线索由特征融合模块组合,并输入决策头进行边缘预测。

在这里插入图片描述

BSDS500、NYUDv2 和 Multicue 上的大量实验证明了 EDTER 与最先进技术相比的优越性。

该项目代码量较庞大:https://github.com/MengyangPu/EDTER

操作过程和结果锁定我的博客待补充ing…

3.Pixel Difference Networks for Efficient Edge Detection

  • 计划完成复现
  • 完成任务复现

该文章发表在ICCV 2021录中,作者是华人:

在这里插入图片描述
深度卷积神经网络(CNN)凭借丰富而抽象的边缘表示能力,可以在边缘检测方面实现人类水平的性能。 然而,基于 CNN 的边缘检测的高性能是通过大型预训练 CNN 主干来实现的,这会消耗内存和能量。 此外,在快速发展的深度学习时代,传统边缘检测器(例如 Canny、Sobel 和 LBP)的先前智慧很少被研究。 为了解决这些问题,提出了一种简单、轻量级但有效的架构,名为像素差分网络(PiDiNet),用于高效边缘检测。 在 BSDS500、NYUD 和 Multicue 数据集上进行了大量实验,证明了其有效性以及高训练和推理效率。 令人惊讶的是,当仅使用 BSDS500 和 VOC 数据集从头开始训练时,PiDiNet 可以超越人类在 BSDS500 数据集上以 100 FPS 和少于 1M 参数记录的感知结果(FODS 测量中为 0.807 与 0.803)。 参数少于 0.1M 的更快版本的 PiDiNet 仍然可以达到与 200 FPS 的最先进技术相当的性能。 NYUD 和 Multicue 数据集的结果显示了类似的观察结果。

PiDiNet架构,没有使用任何归一化层,因为训练图像的分辨率不统一, 获得的架构是基线, 通过用 PDC (Pixel Difference Convolution) 替换残差块中 3 × 3 深度卷积层中的普通卷积,得到了所提出的 PiDiNet,详细的结构信息如下图所示:
在这里插入图片描述
在这里插入图片描述
全文的贡献有三方面:
第一,推导了像素差分卷积,它融合了传统边缘检测器的智慧和深度 CNN 的优点,从而实现稳健且准确的边缘检测。
第二,提出了一种基于像素差分卷积的高效架构PiDiNet,该架构内存友好且推理速度快。 此外,PiDiNet 可以仅使用有限的数据样本从头开始训练,同时实现人类水平的性能,打破了基于 CNN 的高性能边缘检测器通常需要在大规模数据集上预训练主干的惯例。
第三,在 BSDS500、NYUD 和 Multicue 数据集上进行了广泛的边缘检测实验。 作者相信,考虑到准确性和效率,PiDiNet 已经创造了新的最先进的性能。

该项目代码量较大:https://github.com/hellozhuo/pidinet
复现的大致步骤:
3.1 使用命令下载数据集:

wget http://mftp.mmcheng.net/liuyun/rcf/data/HED-BSDS.tar.gz
wget http://mftp.mmcheng.net/liuyun/rcf/data/PASCAL.tar.gz
wget http://mftp.mmcheng.net/liuyun/rcf/data/NYUD.tar.gz

在这里插入图片描述

3.2 根据不同数据集进行操作:
3.2.1 BSDS数据集

1.create a folder /path/to/BSDS500,
2.extract HED-BSDS.tar.gz to /path/to/BSDS500/HED-BSDS,
3.extract PASCAL.tar.gz to /path/to/BSDS500/PASCAL,
4.if you want to evaluate on BSDS500 val set, the val images can be downloaded from this link, please extract it to /path/to/BSDS500/HED-BSDS/val,
5.cp the *.lst files in data/BSDS500/HED-BSDS to /path/to/BSDS500/HED-BSDS/, cp the *.lst files in data/BSDS500 to /path/to/BSDS500/.

3.2.2 NYUD数据集

1.create a folder /path/to/NYUD,
2.extract NYUD.tar.gz to /path/to/NYUD,
3.cp the *.lst files in data/NYUD to /path/to/NYUD/.

3.3 开始训练,生成或测试

# train, the checkpoints will be save in /path/to/table5_pidinet/save_models/ during training
python main.py --model pidinet --config carv4 --sa --dil --resume --iter-size 24 -j 4 --gpu 0 --epochs 20 --lr 0.005 --lr-type multistep --lr-steps 10-16 --wd 1e-4 --savedir /path/to/table5_pidinet --datadir /path/to/BSDS500 --dataset BSDS

# generating edge maps using the original model
python main.py --model pidinet --config carv4 --sa --dil -j 4 --gpu 0 --savedir /path/to/table5_pidinet --datadir /path/to/BSDS500 --dataset BSDS --evaluate /path/to/table5_pidinet/save_models/checkpointxxx.pth

# generating edge maps using the converted model, it should output the same results just like using the original model
# the process will convert pidinet to vanilla cnn, using the saved checkpoint
python main.py --model pidinet_converted --config carv4 --sa --dil -j 4 --gpu 0 --savedir /path/to/table5_pidinet --datadir /path/to/BSDS500 --dataset BSDS --evaluate /path/to/table5_pidinet/save_models/checkpointxxx.pth --evaluate-converted

# test FPS on GPU
python throughput.py --model pidinet_converted --config carv4 --sa --dil -j 1 --gpu 0 --datadir /path/to/BSDS500 --dataset BSDS

在这里插入图片描述

暂时给出近三年的文献和实践操作步骤。

机器学习方法 {\color{Blue} 机器学习方法} 机器学习方法

1.RINDNet: Edge Detection for Discontinuity in Reflectance, Illumination, Normal and Depth

  • 计划完成复现
  • 完成任务复现

作为计算机视觉中的基本构建块,边缘可以根据表面反射率、照明度、表面法线或深度的不连续性分为四种类型。 虽然在检测通用或个别类型的边缘方面已经取得了巨大进展,但对所有四种边缘类型的综合研究仍待探索。 在文中,作者提出了一种新颖的神经网络解决方案 RINDNet,联合检测所有四种类型的边缘。 考虑到每种类型边的独特属性以及它们之间的关系,RINDNet 学习每种边的有效表示,并分三个阶段工作。
第一阶段,RINDNet 使用公共主干来提取所有边缘共享的特征。
第二阶段,它分支以通过相应的解码器为每种边缘类型准备判别特征。
第三阶段,每种类型的独立决策头聚合前一阶段的特征来预测初始结果。
此外,注意力模块学习所有类型的注意力图以捕获它们之间的潜在关系,并将这些图与初始结果相结合以生成最终的边缘检测结果。

在这里插入图片描述
图中包含RINDNet 的三阶段架构。 第一阶段:输入图像被输入主干以提取与所有边缘类型共享的特征。 第二阶段:不同级别的特征通过权重层(WL)融合,并转发到两个集群中的四个解码器:RE-Decoder/IE-Decoder 和 NE-Decoder/DE-Decoder。 第三阶段:四位决策负责人预测四种类型的初始结果。 此外,注意力模块学习到的注意力图被整合到最终的预测中(A b 仅在训练中使用)。 (彩色效果最佳)

该项目代码量较大:https://github.com/MengyangPu/RINDNet
复现的大致步骤:
1.1 克隆仓库

git clone https://github.com/MengyangPu/RINDNet.git

在这里插入图片描述
1.2 下载增强数据集,保存到data文件夹
1.3 利用命令运行训练脚本

python train_rindnet.py
or
python train_rindnet_edge.py

在这里插入图片描述

BDCN的imagenet预训练vgg16 pytorch模型可以在vgg16.pth下载,密匙:ab4g。

在这里插入图片描述

HED 的 imagenet 预训练 vgg16 pytorch 模型可以在 5stage-vgg.py36pickle 中下载,密匙:9po1。
或者在HED主页面也可找到:

在这里插入图片描述
1.4 测试,下载预训练模型
RINDNet modeling/rindnet run/rindnet, code:ef18
1.5 设置evaluate.py 或者 evaluate_edge.py代码中的路径
1.6 运行评价脚本

python evaluate.py
or
python evaluate_edge.py

或者MATLAB代码:

cd eval
run eval.m

在这里插入图片描述
2. Fast edge detection using structured forests

  • 计划完成复现
  • 完成任务复现

该文章发表在TPAMI 2015中,作者只有两个人(Microsoft):

在这里插入图片描述
在这里插入图片描述

边缘检测是许多视觉系统的关键组成部分,包括目标检测器和图像分割算法。 边缘斑块表现出众所周知的局部结构形式,例如直线或 T 形接头。 在文中,利用局部图像块中存在的结构来学习准确且计算高效的边缘检测器,提出了在应用于随机决策森林的结构化学习框架中预测局部边缘掩模的问题。 学习决策树的新颖方法将结构化标签稳健地映射到可以评估标准信息增益度量的离散空间。 结果是这种方法获得的实时性能比许多最先进的竞争方法快几个数量级,同时还在 BSDS500 分割数据集和纽约大学深度数据集上实现了最先进的边缘检测结果。 最后,通过展示我们学习的边缘模型在数据集中的泛化能力,展示了方法作为通用边缘检测器的潜力。

该项目代码量不大:https://github.com/pdollar/edges
复现的大致步骤:
1.1 准备工作

最好在MATLAB R2013a-2013b上进行,同时需要具备the Matlab Image Processing Toolbox。

在这里插入图片描述

1.2 还需要 Piotr 的 Matlab Toolbox(版本 3.26 或更高版本)
可以在以下地址下载:https://pdollar.github.io/toolbox/

1.3 从 Matlab 中编译 mex 代码(注意:包括 win64/linux64 二进制文件):

  mex private/edgesDetectMex.cpp -outdir private [OMPPARAMS]
  mex private/edgesNmsMex.cpp    -outdir private [OMPPARAMS]
  mex private/spDetectMex.cpp    -outdir private [OMPPARAMS]
  mex private/edgeBoxesMex.cpp   -outdir private

这里的 [OMPPARAMS] 是 OpenMP 的参数,与操作系统和编译器相关。

  Windows:  [OMPPARAMS] = '-DUSEOMP' 'OPTIMFLAGS="$OPTIMFLAGS' '/openmp"'
  Linux V1: [OMPPARAMS] = '-DUSEOMP' CFLAGS="\$CFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"
  Linux V2: [OMPPARAMS] = '-DUSEOMP' CXXFLAGS="\$CXXFLAGS -fopenmp" LDFLAGS="\$LDFLAGS -fopenmp"

要在不使用 OpenMP 的情况下进行编译,只需省略 [OMPPARAMS]; 注意:在这种情况下,代码将是单线程的。

1.4 将边缘检测代码添加到Matlab路径中(先切换到当前目录):
addpath(pwd); savepath;

最后,可选择下载 BSDS500 数据集(训练/评估所需),下载后 BSR/ 应包含 BSDS500、工作台和文档。

在这里插入图片描述

基于传统方法 {\color{Blue} 基于传统方法} 基于传统方法

1.A Computational Approach to Edge Detection

  • 计划完成复现
  • 完成任务复现

由Canny提出的边缘检测算法,发表在TPAMI顶级会议上,作者为IEEE会员——John.Canny一人。
在这里插入图片描述
在这里插入图片描述
文中描述了一种边缘检测的计算方法。 该方法的成功取决于边缘点计算的一组全面目标的定义。 这些目标必须足够精确,以界定检测器的所需行为,同时对解决方案的形式做出最少的假设。 定义了一类边缘的检测和定位标准,并将这些标准的数学形式呈现为算子脉冲响应的泛函。 然后添加第三个标准,以确保检测器仅对单个边缘有一个响应。 使用数值优化中的标准来导出几个常见图像特征的检测器,包括阶梯边缘。 在专门对阶梯边缘进行分析时,发现检测和定位性能(这是两个主要目标)之间存在天然的不确定性原理。 根据这一原则,得出了在任何规模下都是最佳的单一算子形状。 最佳检测器具有简单的近似实现,其中在高斯平滑图像的梯度幅度的最大值处标记边缘。 使用多种宽度的算子来扩展这个简单的检测器,以应对图像中不同的信噪比。 提出了一种称为特征合成的通用方法,用于对不同尺度的操作员的信息进行精细到粗略的集成。 最后,随着算子点扩散函数沿边缘扩展,阶梯边缘检测器的性能显着提高。

他的实现方式(计算机语言)也被翻译成了多种代码:

  • Python代码(在 Python 中,Canny 边缘检测通常使用 scikit-image 或 OpenCV-Python 完成。 这是使用 numpy/scipy 的方法:)
  • C代码(以下程序读取每像素 8 位灰度 BMP 文件并将结果保存到“out.bmp”。 使用“-lm”进行编译。)
  • Java代码(使用单个 Java 类实现的)
  • Go代码(在 Linux 上,示例图像文件名的扩展名需要从 .PNG 更改为 .png,以便用于识别它的库。)
  • PHP代码(算是一种PHP应用)

而在Matlab中则是直接使用封装好的函数:

BWImage = edge(GrayscaleImage,'canny');

关于C++的Canny实现,可以参考这篇文章:
Canny边缘检测算法(C++实现)

在这里展示python终端运行的操作:
1.1 利用Shell打开代码

在这里插入图片描述
编辑代码或图片路径:
在这里插入图片描述
1.2 修改好可以直接run也可以利用终端
在这里插入图片描述
1.3 相应的Sobel算子和算法也可以找到
Sobel Derivatives

2.1. Noise-robust edge detector combining isotropic and anisotropic Gaussian kernels

  • 计划完成复现
  • 完成任务复现

发表在PR(Pattern Recognition)期刊上:

在这里插入图片描述
提出了一种新的抗噪声边缘检测器,它结合了小尺度各向同性高斯核和大规模各向异性高斯核(ANGK)来获得图像的边缘图。 其主要优点是在保持高边缘分辨率的同时实现降噪。 从 ANGK 中导出各向异性方向导数 (ANDD) 以捕获图像的局部方向变化。 构建基于 ANDD 的边缘强度图 (ESM)。 其噪声鲁棒性仅由尺度决定,其边缘分辨率由尺度与各向异性因子的比率决定。 此外,揭示了各向异性平滑中的边缘拉伸效应。 基于 ANDD 的 ESM 和具有小尺度各向同性高斯核的基于梯度的 ESM 被融合成具有高边缘分辨率和小边缘拉伸的抗噪声 ESM。 将融合的 ESM 嵌入到 Canny 检测器的例程中,开发了一种抗噪声边缘检测器,其中包括两个附加修改:对比度均衡和噪声相关下阈值。 通过大量实验,使用聚合测试接收器操作特性(ROC)曲线和普拉特品质因数(FOM)来评估所提出的探测器。 实验结果表明,所提出的检测器可以获得无噪声和噪声图像的高质量边缘图。

该代码在仓库Edge-detection-tool可以找到。
具体利用MATLAB可以直接运行:

在这里插入图片描述

PS:后续还会有基于Halcon工业软件或VMaster海康的边缘检测教程产生(期待吧~)

有关评价指标 {\color{Tan} 有关评价指标} 有关评价指标

关于曲线:

把正例正确分类为正例,表示为TP(true positive),把正例错误分类为负例,表示为FN(false negative),
把负例正确分类为负例,表示为TN(true negative), 把负例错误分类为正例,表示为FP(false positive)。
精确率和召回率可以从混淆矩阵中计算而来,precision = TP/(TP + FP), recall = TP/(TP +FN)。
以recall作为横坐标轴,precision作为纵坐标轴,画出PR曲线。而ROC曲线:

在这里插入图片描述

1.PR曲线

Windows版本代码
Linux版本代码:

在这里插入图片描述
2.ROC曲线

predict ——分类器对于测试集的分类结果;
ground_truth——测试集的正确标签,即为0和1;
auc——范湖ROC曲线下的面积。
MATLAB代码

predict = [0.9,0.8,0.7,0.6,0.55,0.54,0.53,0.52,0.51,0.505,0.4,0.39,0.38,0.37,0.36,0.35,0.34,0.33,0.3,0.1];
ground_truth = [1,1,0,1,1,1,0,0,1,0,1,0,1,0,0,0,1,0,1,0];
auc = plot_roc(predict,ground_truth)
 
function auc = plot_roc(predict,ground_truth)
pos_num = sum(ground_truth==1);
neg_num = sum(ground_truth==0);
 
m = size(ground_truth,2);
[pre,Index] = sort(predict);
ground_truth = ground_truth(Index);
x = zeros(m+1,1);
y = zeros(m+1,1);
auc = 0;
x(1) = 1; y(1) = 1; %当阈值为0.1时,都被分类为了正类,所以真阳率和假阳率都为1.
for i = 2:m
    TP = sum(ground_truth(i:m) == 1); %大于x(i)的标签为1的都是真阳,大于x(i)的标签为0的都是假阳
    FP = sum(ground_truth(i:m) == 0);
    x(i) = FP/neg_num;
    y(i) = TP/pos_num;
    auc = auc + (y(i)+y(i-1))*(x(i-1)-x(i))/2;
end
 
x(m+1) = 0; y(m+1) = 0;
auc = auc + y(m)*x(m)/2;%这句多余
plot(x,y);

Python代码

from sklearn.metrics import roc_curve, auc
import matplotlib.pyplot as plt
 
y_label = ([1, 1, 1, 2, 2, 2])  # 非二进制需要pos_label
y_pre = ([0.3, 0.5, 0.9, 0.8, 0.4, 0.6])
fpr, tpr, thersholds = roc_curve(y_label, y_pre, pos_label=2)
 
for i, value in enumerate(thersholds):
    print("%f %f %f" % (fpr[i], tpr[i], value))
 
roc_auc = auc(fpr, tpr)
 
plt.plot(fpr, tpr, 'k--', label='ROC (area = {0:.2f})'.format(roc_auc), lw=2)
 
plt.xlim([-0.05, 1.05])  # 设置x、y轴的上下限,以免和边缘重合,更好的观察图像的整体
plt.ylim([-0.05, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')  # 可以使用中文,但需要导入一些库即字体
plt.title('ROC Curve')
plt.legend(loc="lower right")
plt.show()

关于数值:
1. F {\color{Violet}F} F测量

根据上述提到的精确率和召回率可以得到:
F = ( λ 2 + 1 ) P p r e c i s i o n ∙ R r e c a l l λ 2 P p r e c i s i o n + R r e c a l l { F=\frac{(\lambda^{2}+1)P_{precision}\bullet R_{recall} }{\lambda^{2}P_{precision}+R_{recall}} } F=λ2Pprecision+Rrecall(λ2+1)PprecisionRrecall

TP表示正确且匹配的边缘点的数量,而FN表示错误匹配的边缘点的数量。 从宏观层面理解,TN代表正确匹配的非边缘点的数量,FP描述匹配但不正确的边缘点的数量。 获得这些变量还远远不足以评估边缘检测方法的质量。 因此,需要制作横轴为R、纵轴为P的图表。 引入了F-measure指标,通过精确率和召回率的权重调和平均值计算。

2. F O M {\color{Violet}FOM} FOM品质因子

当没有 G T GT GT可用于图像时,经验ROC曲线不能用于评估。 另一种选择是Pratt的品质因数( F O M FOM FOM),它考虑了三个因素:真实边缘丢失,杂散边缘和边缘定位误差。让 N e N_e Ne是理想边缘图中边缘像素的数量, N d N_d Nd是 检测到的边缘像素的数量, d ( k ) d(k) d(k)是从第 k k k个检测到的边缘像素到理想边缘图的距离。 检测到的边缘图的 F O M FOM FOM由定义

F O M = 1 m a x ( N e , N d ) ∑ k = 1 N d 1 1 + γ d 2 ( k ) FOM=\frac{1}{max(N_{e},N_{d})} \sum_{k=1}^{N_{d}} \frac{1}{1+\gamma d^{2}(k) } FOM=max(Ne,Nd)1k=1Nd1+γd2(k)1

其中 γ γ γ是偏置边缘像素的惩罚因子(这里 γ γ γ= 1/4)。完美的边缘图产生: F O M FOM FOM = 1。

3.均方误差 ( M S E , M e a n S q u a r e E r r o r ) {\color{Green}(MSE,Mean Square Error)} MSEMeanSquareError

均方误差损失又称为二次损失、L2损失,常用于回归预测任务中。均方误差函数通过计算预测值和实际值之间距离(即误差)的平方来衡量模型优劣。即预测值和真实值越接近,两者的均方差就越小。

M S E = 1 n ∑ i = 1 n ( y i − y ^ i ) 2 MSE=\frac{1}{n}\sum_{i=1}^{n} (y_{i}-\hat{y} _{i})^{2} MSE=n1i=1n(yiy^i)2
假设真实目标值为100,预测值在-10000到10000之间,绘制MSE函数曲线如图所示:

在这里插入图片描述
可以看到,当预测值越接近100时,MSE损失值越小。MSE损失的范围为0到无穷。

4.最小均方误差 ( M M S E ) {\color{Green}(MMSE)} MMSE

在这里插入图片描述

MMSE是一种方法,让接到的数据尽可能更加接近发送的数据,所以MMSE的目的就是找一个矩阵G,来让GY更加接近x。
加权最小均方误差算法(WMMSE)代码

5.交并比 ( I O U , I n t e r s e c t i o n o v e r U n i o n ) {\color{Green}(IOU,Intersection over Union)} IOUIntersectionoverUnion

目标检测中使用的一个概念,IOU计算的是 预测的边框 和 真实的边框 的交叠率,即它们的交集和并集的比值。最理想情况是完全重叠,即比值为1。数值等于“预测的边框”和“真实的边框”之间交集和并集的比值。IoU计算如下图,B1为真实边框,B2为预测边框。

在这里插入图片描述

代码(Python):

def iou(box1, box2):
    '''
    两个框(二维)的 iou 计算
    
    注意:边框以左上为原点
    
    box:[x1,y2,x2,y2],依次为左上右下坐标
    '''
    h = max(0, min(box1[2], box2[2]) - max(box1[0], box2[0]))
    w = max(0, min(box1[3], box2[3]) - max(box1[1], box2[1]))
    area_box1 = ((box1[2] - box1[0]) * (box1[3] - box1[1]))
    area_box2 = ((box2[2] - box2[0]) * (box2[3] - box2[1]))
    inter = w * h
    union = area_box1 + area_box2 - inter
    iou = inter / union
    return iou

box1 = [0,0,2,2]
box2 = [1,1,3,3]
IoU = iou(box1,box2)
print(IoU)

参考文献 {\color{Violet}参考文献} 参考文献

在这里插入图片描述
[ 1 ] A r b e l a e z P , M a i r e M , F o w l k e s C , e t a l . C o n t o u r d e t e c t i o n a n d h i e r a r c h i c a l i m a g e s e g m e n t a t i o n [ J ] . I E E E t r a n s a c t i o n s o n p a t t e r n a n a l y s i s a n d m a c h i n e i n t e l l i g e n c e , 2010 , 33 ( 5 ) : 898 − 916. {\color{Blue} [1] Arbelaez P, Maire M, Fowlkes C, et al. Contour detection and hierarchical image segmentation[J]. IEEE transactions on pattern analysis and machine intelligence, 2010, 33(5): 898-916.} [1]ArbelaezP,MaireM,FowlkesC,etal.Contourdetectionandhierarchicalimagesegmentation[J].IEEEtransactionsonpatternanalysisandmachineintelligence,2010,33(5):898916.
[ 2 ] G u p t a S , A r b e l a e z P , M a l i k J . P e r c e p t u a l o r g a n i z a t i o n a n d r e c o g n i t i o n o f i n d o o r s c e n e s f r o m R G B − D i m a g e s [ C ] / / P r o c e e d i n g s o f t h e I E E E c o n f e r e n c e o n c o m p u t e r v i s i o n a n d p a t t e r n r e c o g n i t i o n . 2013 : 564 − 571. {\color{Brown} [2] Gupta S, Arbelaez P, Malik J. Perceptual organization and recognition of indoor scenes from RGB-D images[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2013: 564-571.} [2]GuptaS,ArbelaezP,MalikJ.PerceptualorganizationandrecognitionofindoorscenesfromRGBDimages[C]//ProceedingsoftheIEEEconferenceoncomputervisionandpatternrecognition.2013:564571.
[ 3 ] M e ˊ l y D A , K i m J , M c G i l l M , e t a l . A s y s t e m a t i c c o m p a r i s o n b e t w e e n v i s u a l c u e s f o r b o u n d a r y d e t e c t i o n [ J ] . V i s i o n r e s e a r c h , 2016 , 120 : 93 − 107. {\color{Orange} [3] Mély D A, Kim J, McGill M, et al. A systematic comparison between visual cues for boundary detection[J]. Vision research, 2016, 120: 93-107.} [3]MeˊlyDA,KimJ,McGillM,etal.Asystematiccomparisonbetweenvisualcuesforboundarydetection[J].Visionresearch,2016,120:93107.
[ 4 ] X u e N , W u T , B a i S , e t a l . H o l i s t i c a l l y − a t t r a c t e d w i r e f r a m e p a r s i n g [ C ] / / P r o c e e d i n g s o f t h e I E E E / C V F C o n f e r e n c e o n C o m p u t e r V i s i o n a n d P a t t e r n R e c o g n i t i o n . 2020 : 2788 − 2797. {\color{Purple} [4] Xue N, Wu T, Bai S, et al. Holistically-attracted wireframe parsing[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2020: 2788-2797.} [4]XueN,WuT,BaiS,etal.Holisticallyattractedwireframeparsing[C]//ProceedingsoftheIEEE/CVFConferenceonComputerVisionandPatternRecognition.2020:27882797.
[ 5 ] Z h o u C , H u a n g Y , P u M , e t a l . T h e T r e a s u r e B e n e a t h M u l t i p l e A n n o t a t i o n s : A n U n c e r t a i n t y − a w a r e E d g e D e t e c t o r [ C ] / / P r o c e e d i n g s o f t h e I E E E / C V F C o n f e r e n c e o n C o m p u t e r V i s i o n a n d P a t t e r n R e c o g n i t i o n . 2023 : 15507 − 15517. {\color{Tan}[5] Zhou C, Huang Y, Pu M, et al. The Treasure Beneath Multiple Annotations: An Uncertainty-aware Edge Detector[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2023: 15507-15517.} [5]ZhouC,HuangY,PuM,etal.TheTreasureBeneathMultipleAnnotations:AnUncertaintyawareEdgeDetector[C]//ProceedingsoftheIEEE/CVFConferenceonComputerVisionandPatternRecognition.2023:1550715517.
[ 6 ] P u M , H u a n g Y , L i u Y , e t a l . E d t e r : E d g e d e t e c t i o n w i t h t r a n s f o r m e r [ C ] / / P r o c e e d i n g s o f t h e I E E E / C V F c o n f e r e n c e o n c o m p u t e r v i s i o n a n d p a t t e r n r e c o g n i t i o n . 2022 : 1402 − 1412. {\color{Yellow}[6] Pu M, Huang Y, Liu Y, et al. Edter: Edge detection with transformer[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2022: 1402-1412.} [6]PuM,HuangY,LiuY,etal.Edter:Edgedetectionwithtransformer[C]//ProceedingsoftheIEEE/CVFconferenceoncomputervisionandpatternrecognition.2022:14021412.
[ 7 ] S u Z , L i u W , Y u Z , e t a l . P i x e l d i f f e r e n c e n e t w o r k s f o r e f f i c i e n t e d g e d e t e c t i o n [ C ] / / P r o c e e d i n g s o f t h e I E E E / C V F i n t e r n a t i o n a l c o n f e r e n c e o n c o m p u t e r v i s i o n . 2021 : 5117 − 5127. {\color{Blue} [7] Su Z, Liu W, Yu Z, et al. Pixel difference networks for efficient edge detection[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 5117-5127.} [7]SuZ,LiuW,YuZ,etal.Pixeldifferencenetworksforefficientedgedetection[C]//ProceedingsoftheIEEE/CVFinternationalconferenceoncomputervision.2021:51175127.
[ 8 ] X i e S , T u Z . H o l i s t i c a l l y − n e s t e d e d g e d e t e c t i o n [ C ] / / P r o c e e d i n g s o f t h e I E E E i n t e r n a t i o n a l c o n f e r e n c e o n c o m p u t e r v i s i o n . 2015 : 1395 − 1403. {\color{Brown} [8] Xie S, Tu Z. Holistically-nested edge detection[C]//Proceedings of the IEEE international conference on computer vision. 2015: 1395-1403.} [8]XieS,TuZ.Holisticallynestededgedetection[C]//ProceedingsoftheIEEEinternationalconferenceoncomputervision.2015:13951403.
[ 9 ] P u M , H u a n g Y , G u a n Q , e t a l . R i n d n e t : E d g e d e t e c t i o n f o r d i s c o n t i n u i t y i n r e f l e c t a n c e , i l l u m i n a t i o n , n o r m a l a n d d e p t h [ C ] / / P r o c e e d i n g s o f t h e I E E E / C V F i n t e r n a t i o n a l c o n f e r e n c e o n c o m p u t e r v i s i o n . 2021 : 6879 − 6888. {\color{Orange} [9] Pu M, Huang Y, Guan Q, et al. Rindnet: Edge detection for discontinuity in reflectance, illumination, normal and depth[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 6879-6888.} [9]PuM,HuangY,GuanQ,etal.Rindnet:Edgedetectionfordiscontinuityinreflectance,illumination,normalanddepth[C]//ProceedingsoftheIEEE/CVFinternationalconferenceoncomputervision.2021:68796888.
[ 10 ] D o l l a ˊ r P , Z i t n i c k C L . F a s t e d g e d e t e c t i o n u s i n g s t r u c t u r e d f o r e s t s [ J ] . I E E E t r a n s a c t i o n s o n p a t t e r n a n a l y s i s a n d m a c h i n e i n t e l l i g e n c e , 2014 , 37 ( 8 ) : 1558 − 1570. {\color{Purple} [10] Dollár P, Zitnick C L. Fast edge detection using structured forests[J]. IEEE transactions on pattern analysis and machine intelligence, 2014, 37(8): 1558-1570.} [10]DollaˊrP,ZitnickCL.Fastedgedetectionusingstructuredforests[J].IEEEtransactionsonpatternanalysisandmachineintelligence,2014,37(8):15581570.
[ 11 ] C a n n y J . A c o m p u t a t i o n a l a p p r o a c h t o e d g e d e t e c t i o n [ J ] . I E E E T r a n s a c t i o n s o n p a t t e r n a n a l y s i s a n d m a c h i n e i n t e l l i g e n c e , 1986 ( 6 ) : 679 − 698. {\color{Tan}[11] Canny J. A computational approach to edge detection[J]. IEEE Transactions on pattern analysis and machine intelligence, 1986 (6): 679-698.} [11]CannyJ.Acomputationalapproachtoedgedetection[J].IEEETransactionsonpatternanalysisandmachineintelligence,1986(6):679698.
[ 12 ] S h u i P L , Z h a n g W C . N o i s e − r o b u s t e d g e d e t e c t o r c o m b i n i n g i s o t r o p i c a n d a n i s o t r o p i c G a u s s i a n k e r n e l s [ J ] . P a t t e r n R e c o g n i t i o n , 2012 , 45 ( 2 ) : 806 − 820. {\color{Blue} [12] Shui P L, Zhang W C. Noise-robust edge detector combining isotropic and anisotropic Gaussian kernels[J]. Pattern Recognition, 2012, 45(2): 806-820.} [12]ShuiPL,ZhangWC.NoiserobustedgedetectorcombiningisotropicandanisotropicGaussiankernels[J].PatternRecognition,2012,45(2):806820.
[ 13 ] Y u X , W a n g X , L i u J , e t a l . M u l t i s c a l e A n i s o t r o p i c M o r p h o l o g i c a l D i r e c t i o n a l D e r i v a t i v e s f o r N o i s e − R o b u s t I m a g e E d g e D e t e c t i o n [ J ] . I E E E A c c e s s , 2022 , 10 : 19162 − 19173. {\color{Yellow}[13] Yu X, Wang X, Liu J, et al. Multiscale Anisotropic Morphological Directional Derivatives for Noise-Robust Image Edge Detection[J]. IEEE Access, 2022, 10: 19162-19173.} [13]YuX,WangX,LiuJ,etal.MultiscaleAnisotropicMorphologicalDirectionalDerivativesforNoiseRobustImageEdgeDetection[J].IEEEAccess,2022,10:1916219173.

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

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

相关文章

如何隐藏或修改Docker容器中的Nginx响应头中的Server

背景介绍 现在大部分项目通过Nginx作为反向代理,实际由于安全审计要求需要隐藏或修改响应头的Server信息,传统的项目直接部署在nginx服务器中,只需要在nginx服务器安装ngx_http_headers_more_filter_module插件,然后通过修改ngin…

Linux服务器占用处理手记

磁盘占用定位处理 查看磁盘占用情况: df -h 查看每个目录的占用情况: du -h -x --max-depth1 查找大文件和目录 du -sh /* du -sh /home/* 可参考: Linux垃圾清理指北_linux 清理垃圾_智商二五零_的博客-CSDN博客 查看CPU和内存占用情…

SpringBoot底层原理----配置优先级/Bean管理/springboot原理

配置优先级 最终得到以下配置优先级:(从低到高) Bean管理 获取bean bean作用域 第三方bean Springboot原理 起步依赖 原理就是依赖传递-通过引入web依赖将所有必要的都同时引入 自动配置--面试高频题目 即:在pom文件中引入依赖后,他是如何自动配置给IOC容器的 springboot采…

Xilinx SDK编译完成自动生成SREC文件(适用于ISE、Vivado、Vitis)

把elf转换成srec格式的常规方式,是打开Program Flash Memory界面,选择elf文件,点击Convert ELF to SREC 会在hardware目录下的cache文件夹下生产srec文件。 可以通过配置编译后执行命令,在每次编译完成自动生产srec文件。 会在…

安卓备份基带分区 备份字库 步骤解析 以免误檫除分区或者“格机” 后悔莫及

玩机搞机---安卓机型mtk和高通芯片查看分区 导出分区 备份分区的一些工具分析 修复基带 改串码 基带qcn 改相关参数 格机危害 手机基带的重要性前面几期博文我都有相关的说明。他区别于别的分区。而且目前手机的安全性越来越高。基带分区基本都是专机专用。而不像早期机型一…

小皮面板配置Xdebug,调用单个php文件

小皮面板配置Xdebug 首先下载phpstrom,和小皮面板 打开小皮面板,选中好要使用的php版本 然后点击【管理】> 【php扩展】> 【xdebug】 然后打开选中好版本的php位置 D:\Program_Files\phpstudy_pro\Extensions\php\php7.4.3nts打开php.ini文件…

【数据结构】—从直接插入排序升级到希尔排序究极详解(含C语言实现)

食用指南:本文在有C基础的情况下食用更佳 🔥这就不得不推荐此专栏了:C语言 ♈️今日夜电波:透明で透き通って何にでもなれそうで—HaKU 2:05 ━━━━━━️💟──────── 5:38 …

干货分享 | 关于同星硬件接口卡及TSMaster软件常见问题QA指南

TSMaster是同星智能开发的一款国产汽车总线工具链软件平台,是全方位汽车总线设计、仿真、分析、诊断和标定的专业工具,支持从需求分析到系统实现的整个系统开发过程。同星智能硬件接口卡可以提供CAN, CAN FD, LIN, FlexRay, 与Ethernet等网络的开发、仿真…

李宏毅-hw7-利用Bert完成QA

一、查漏补缺、熟能生巧: 只有熬过不熟练的时期,反复琢磨,才会有熟练之后,藐视众生的时刻 1.关于transformers中的tokenizer的用法的简单介绍: from transformers import BertTokenizerFast# 加载预训练的BERT模型to…

uniapp Echart X轴Y轴文字被遮挡怎么办,或未能铺满整个容器

有时候布局太小,使用echarts,x轴y轴文字容易被遮挡,怎么解决这个问题呢,或者是未能铺满整个容器。 方法1: 直接设置 containLabel 字段 options: { grid: { containLabel: true, },} 方法2: 间接设置,但是…

微信小程序页面栈超出导致页面卡死

微信小程序页面栈不能超出10个 超出10个之后无法进行点击选择跳转 解决方法: 跳转的时候,判断之前页面栈里是否存在要跳转的页面, 如果存在之前页面,就navigateBack返回之前页面, 如果不存在之前页面,判断…

RocketMQ 核心编程模型以及生产环境最佳实践

文章目录 1、RocketMQ的消息模型2、深入理解RocketMQ的消息模型2.1、RocketMQ客户端基本流程2.2、消息确认机制2.2.1、 发送消息的方式第一种称为单向发送第二种称为同步发送第三种称为异步发送 2.2.2、状态确认机制2.2.3、消费者也可以自行指定起始消费位点 2.3、广播消息2.4、…

nginx 报错[emerg]: unknown directive “锘? in E:\nginx-1.18.0/conf/nginx.conf:3

报错:nginx 报错[emerg] 32408#14080: unknown directive "锘? in E:\nginx-1.18.0/conf/nginx.conf:3 原因:使用nginx服务时,用txt记事本打开编辑了nginx.conf文件,类似WINDOWS自带的记事本等软件,在保存一个以…

mysql触发器triggers

文章目录 1、创建触发器2、 查看触发器3、删除触发器 1、创建触发器 语法: CREATE TRIGGER 触发器名称 BEFORE/AFTER INSERT/UPDATE/DELETE ON 表名 FOR EACH ROW BEGIN SQL逻辑 END;BEFORE 或 AFTER 表示之前 还是 之后触发 INSERT 或 UPDATE 或 DELETE 表示监听…

PostgreSQL 查询某个属性相同内容出现的次数

查询某个数据库表属性 name 相同内容出现出现的次数,并按次数从大到小排序 SELECT name, COUNT(*) AS count FROM your_table GROUP BY name ORDER BY count DESC;示例 select project_id, COUNT(*) AS count from app_ads_positions group by project_id order b…

(WRF/Chem)在大气环境领域实践技术应用

随着我国经济快速发展,我国面临着日益严重的大气污染问题。近年来,严重的大气污染问题已经明显影响国计民生,引起政府、学界和人们越来越多的关注。大气污染是工农业生产、生活、交通、城市化等方面人为活动的综合结果,同时气象因…

智能报修管理系统的作用和功能

智能报修管理系统针对不同的服务对象、不同的服务内容、不同的紧急情况,不同的区域,自定义设定响应指标,承诺客户在多长时间内响应或是解决问题,保障服务质量。随着报修、后勤、运维等规模日趋庞大,许多单位每日需处理…

echarts-根据数据大小实现折线渐变色

先看示例图: 这几年一直在做大数据可视化前端开发,接下来把近几年用到的比较经典案例给大家分享下,主要用到的可视化库为Echarts、Threejs、Element、D3、fabricjs等。 这个案例是Echarts,Echarts算是学习成本比较低的一个很好的…

Java下打印一个等腰三角型

想达到这个结果,通常的做法是通过拼结两个三角型达到,但是实际上还有最右边的第三个三角型没有处理,这个拼结的方法总让人看起来有一点不完美的感觉,于是我自创了一个思路,一气合成,代码如下(本…

想要提高客户留资率?一个留资机器人就够了!

随着移动互联网进入“下半场”,用户在线参与率持续上升,导致企业的获客成本不断攀升。特别是近年来新型营销场景如直播销售、内容推广和短视频引流等的不断涌现,企业在多个渠道和平台上的广告支出激增,试图吸引更多潜在客户。然而…