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

《图像边缘检测算法综述》

在当今的数字时代,图像处理技术在各个领域都发挥着至关重要的作用。其中,边缘检测作为图像处理中的一个关键任务,旨在识别图像中亮度变化显著的区域,进而提取出物体的轮廓和形状。边缘检测不仅是图像处理的基础技术,还在计算机视觉、多媒体处理、医学影像等多个应用场景中有着广泛的应用。

一、Sobel 算子

原理详解
Sobel 算子主要通过两个 3x3 的卷积核来计算图像中亮度的梯度。这两个卷积核分别用于检测水平和垂直方向上的亮度变化。在计算过程中,将图像中的每个像素点与卷积核进行卷积操作,得到该像素点在水平和垂直方向上的梯度值。然后,通过计算梯度幅值和方向来确定边缘的位置。

梯度幅值可以通过以下公式计算:

eq?G%20%3D%20%5Csqrt%7BG_x%5E2%20+%20G_y%5E2%7D
其中,和分别是水平和垂直方向上的梯度值。

梯度方向可以通过以下公式计算:

eq?%5Ctheta%20%3D%20%5Carctan%5Cleft%28%5Cfrac%7BG_y%7D%7BG_x%7D%5Cright%29

dfd1cfaab9e74efaa212bd93bbbe13f9.jpeg

应用场景
Sobel 算子适用于物体识别、边缘检测以及图像分割等基本图像处理任务。在物体识别中,通过检测物体的边缘,可以快速准确地识别出物体的形状和位置。在边缘检测中,Sobel 算子能够有效地检测出图像中的边缘信息,为后续的图像处理提供基础。在图像分割中,Sobel 算子可以将图像分割成不同的区域,方便对不同区域进行单独处理。

例如,在工业自动化领域,Sobel 算子可以用于检测产品的边缘,实现产品的自动检测和分类。在安防监控领域,Sobel 算子可以用于检测人体的边缘,实现人体的自动跟踪和识别。

二、Canny 边缘检测

原理详解
Canny 边缘检测是一个多步骤的过程,具有较高的准确性和可靠性。

首先,进行高斯滤波去噪。图像在采集和传输过程中往往会受到噪声的干扰,高斯滤波可以有效地去除噪声,提高边缘检测的准确性。高斯滤波是一种线性平滑滤波器,它通过对图像中的每个像素点进行加权平均来实现平滑效果。

接着,计算图像的梯度。与 Sobel 算子类似,Canny 边缘检测也通过计算图像的梯度来确定边缘的位置。不同的是,Canny 边缘检测使用了更复杂的梯度计算方法,可以更好地适应不同的图像特征。

然后,应用非极大值抑制。非极大值抑制的目的是去除那些不是局部最大值的像素点,只保留那些最有可能是边缘的像素点。通过非极大值抑制,可以进一步提高边缘检测的准确性。

接下来,进行双阈值处理。双阈值处理是 Canny 边缘检测的一个关键步骤,它通过设置两个阈值来确定边缘的位置。那些梯度值大于高阈值的像素点被确定为强边缘点,那些梯度值小于低阈值的像素点被确定为非边缘点,而那些梯度值介于高阈值和低阈值之间的像素点则根据其与强边缘点的连接情况来确定是否为边缘点。

最后,使用连接成分分析来确定最终的边缘。连接成分分析是一种图像处理技术,它可以将图像中的像素点连接成不同的成分,从而确定边缘的位置。

4c5569823e5d44d18a27161c75fa4268.jpeg

应用场景
由于其优良的边缘检测效果,Canny 边缘检测广泛应用于医学影像分析、物体识别、场景理解等领域。在医学影像分析中,Canny 边缘检测可以用于检测病变组织的边缘,为医生的诊断提供帮助。在物体识别中,Canny 边缘检测可以用于检测物体的边缘,实现物体的自动识别和分类。在场景理解中,Canny 边缘检测可以用于检测场景中的物体边缘,为机器人的导航和环境感知提供基础。

例如,在医学影像领域,Canny 边缘检测可以用于检测肿瘤的边缘,帮助医生确定肿瘤的大小和形状。在自动驾驶领域,Canny 边缘检测可以用于检测道路的边缘,为车辆的导航提供支持。

三、Prewitt 算子

原理详解
与 Sobel 算子相似,Prewitt 算子也使用卷积核来计算图像的梯度。Prewitt 算子的卷积核设计与 Sobel 算子有所不同,它通常使用相同的权重来计算边缘的方向。

Prewitt 算子的水平卷积核为:

eq?G_x%20%3D%20%5Cbegin%7Bbmatrix%7D%20-1%20%26%200%20%26%201%20%5C%5C%20-1%20%26%200%20%26%201%20%5C%5C%20-1%20%26%200%20%26%201%20%5Cend%7Bbmatrix%7D

垂直卷积核为:

eq?G_y%20%3D%20%5Cbegin%7Bbmatrix%7D%201%20%26%201%20%26%201%20%5C%5C%200%20%26%200%20%26%200%20%5C%5C%20-1%20%26%20-1%20%26%20-1%20%5Cend%7Bbmatrix%7D

通过将图像中的每个像素点与卷积核进行卷积操作,得到该像素点在水平和垂直方向上的梯度值。然后,通过计算梯度幅值和方向来确定边缘的位置。

698bd643e21b49dfb18798b1f55371ba.jpeg

应用场景
Prewitt 算子应用于图像增强和边缘检测,适合那些对噪声不敏感的应用。在图像增强中,Prewitt 算子可以增强图像的边缘信息,使图像更加清晰。在边缘检测中,Prewitt 算子可以检测出图像中的边缘信息,为后续的图像处理提供基础。

例如,在卫星图像处理中,Prewitt 算子可以用于增强图像的边缘信息,提高图像的分辨率。在地质勘探领域,Prewitt 算子可以用于检测地质构造的边缘,为地质学家的研究提供帮助。

四、Laplace 算子

原理详解
Laplace 算子基于二阶导数,通过计算图像的拉普拉斯算子来检测边缘。拉普拉斯算子是一种二阶微分算子,它可以检测图像中的亮度变化率。通常先对图像进行高斯模糊处理以减少噪声影响,然后再计算拉普拉斯算子。

Laplace 算子的卷积核为:

eq?L%20%3D%20%5Cbegin%7Bbmatrix%7D%200%20%26%20-1%20%26%200%20%5C%5C%20-1%20%26%204%20%26%20-1%20%5C%5C%200%20%26%20-1%20%26%200%20%5Cend%7Bbmatrix%7D

通过将图像中的每个像素点与卷积核进行卷积操作,得到该像素点的拉普拉斯值。如果拉普拉斯值为零,则该像素点为平坦区域;如果拉普拉斯值为正,则该像素点为亮区域;如果拉普拉斯值为负,则该像素点为暗区域。边缘通常位于拉普拉斯值变化剧烈的区域。

be7002a8c9794a4eb750a78cb992123c.jpeg

应用场景
Laplace 算子适用于需要高精度边缘检测的应用,如纹理分割和图像分析。在纹理分割中,Laplace 算子可以用于检测纹理的边缘,将图像分割成不同的纹理区域。在图像分析中,Laplace 算子可以用于检测图像中的细节信息,为图像的分析和理解提供帮助。

例如,在纺织品检测中,Laplace 算子可以用于检测纺织品的纹理边缘,判断纺织品的质量。在文物修复领域,Laplace 算子可以用于检测文物的细节信息,为文物的修复提供参考。

五、Canny 边缘检测(改进版)

原理详解
改进的 Canny 算法可能结合机器学习技术,通过训练模型以适应更复杂的边缘检测任务。例如,可以使用深度学习算法来训练一个边缘检测模型,该模型可以自动学习图像中的边缘特征,并根据这些特征进行边缘检测。

在改进的 Canny 算法中,可能会使用一些新的技术来提高边缘检测的准确性和效率。例如,可以使用多尺度分析技术来检测不同尺度下的边缘信息,提高边缘检测的鲁棒性。还可以使用自适应阈值技术来根据图像的特征自动调整阈值,提高边缘检测的适应性。

应用场景
在各种计算机视觉任务中,如自动驾驶中的路障检测及目标跟踪。在自动驾驶中,准确检测路障和其他障碍物的边缘对于车辆的安全行驶至关重要。改进的 Canny 算法可以结合深度学习技术,自动学习路障和其他障碍物的边缘特征,提高检测的准确性和可靠性。在目标跟踪中,改进的 Canny 算法可以用于检测目标的边缘,实现目标的准确跟踪。

例如,在智能交通系统中,改进的 Canny 算法可以用于检测道路上的车辆和行人的边缘,为交通管理和安全提供支持。在机器人视觉领域,改进的 Canny 算法可以用于检测环境中的物体边缘,为机器人的导航和操作提供基础。

六、基于深度学习的边缘检测

原理详解
通过深度卷积神经网络(CNN)进行端到端的训练,自动学习特征并生成边缘图。网络结构可能是 U-Net 或其他变体。

在深度学习的边缘检测中,首先需要准备大量的标注数据,即带有边缘标注的图像。然后,将这些图像输入到深度卷积神经网络中进行训练。网络通过不断调整参数,学习图像中的边缘特征,并输出预测的边缘图。

U-Net 是一种常用的深度学习网络结构,它由收缩路径和扩张路径组成。收缩路径用于提取图像的特征,扩张路径用于恢复图像的分辨率并生成边缘图。通过这种结构,U-Net 可以有效地学习图像中的边缘特征,并生成高质量的边缘图。

应用场景
尤其在复杂场景和图像中,深度学习方法能够更加有效地检测边缘,常用于图像分割、物体检测等领域。在图像分割中,深度学习的边缘检测可以用于确定图像中不同物体的边界,实现准确的图像分割。在物体检测中,边缘信息可以作为重要的特征之一,帮助检测模型准确地定位和识别物体。

例如,在医学影像领域,深度学习的边缘检测可以用于检测病变组织的边缘,为医生的诊断提供更准确的信息。在安防监控领域,深度学习的边缘检测可以用于检测人体和物体的边缘,实现更准确的目标检测和跟踪。

综上所述,边缘检测在图像处理中具有重要的地位,不同的边缘检测方法适用于不同的需求和场景。Sobel 算子、Canny 边缘检测、Prewitt 算子和 Laplace 算子是传统的边缘检测方法,它们具有简单、快速的优点,但在复杂场景下的检测效果可能不够理想。改进的 Canny 算法结合了机器学习技术,提高了边缘检测的准确性和适应性。基于深度学习的边缘检测方法则通过自动学习特征,能够在复杂场景和图像中更加有效地检测边缘。在实际应用中,你需要根据具体的需求和场景选择合适的边缘检测算法,以显著提升实际任务的效果。

七、算法对比

一、Sobel 算子

优点:

  1. 计算简单快速

    • Sobel 算子通过两个 3x3 的卷积核分别计算水平和垂直方向的梯度,计算过程相对简单,运算速度较快,适用于对实时性要求较高的图像处理任务。
    • 在一些需要快速处理图像的场景,如工业自动化生产线上的产品检测,可以及时地检测出物体的边缘,提高生产效率。
  2. 对噪声有一定的抑制能力

    • 虽然不如一些专门的去噪算法效果明显,但在一定程度上能够减少噪声对边缘检测的影响。因为在计算梯度时,会对局部区域的像素值进行加权平均,一定程度上平滑了噪声。
    • 例如在一些低质量的图像中,可能存在少量的随机噪声,Sobel 算子能够在检测边缘的同时,降低这些噪声的干扰。

缺点:

  1. 检测精度有限

    • 由于只使用了两个固定方向的卷积核,对于复杂图像中的边缘,尤其是斜向边缘的检测精度不高。可能会出现边缘模糊、不连续的情况。
    • 比如在检测具有复杂形状的物体边缘时,可能无法准确地捕捉到所有的细节。
  2. 对弱边缘检测能力不足

    • Sobel 算子主要依赖梯度幅值来确定边缘,对于那些梯度幅值较小的弱边缘,很容易被忽略。
    • 在一些图像中,弱边缘可能包含着重要的信息,但 Sobel 算子可能无法有效地检测出来。

二、Canny 边缘检测算法

优点:

  1. 检测精度高

    • Canny 边缘检测是一个多步骤的过程,包括高斯滤波去噪、计算梯度、非极大值抑制、双阈值处理和连接成分分析等。这些步骤使得 Canny 算法能够更准确地检测出图像中的边缘,尤其是对于弱边缘和复杂形状的边缘也有较好的检测效果。
    • 例如在医学影像分析中,能够清晰地检测出病变组织的边缘,为医生的诊断提供更准确的信息。
  2. 抗噪性强

    • 首先通过高斯滤波去除噪声,有效地减少了噪声对边缘检测的影响。同时,双阈值处理和连接成分分析等步骤也进一步提高了算法的抗噪性。
    • 在一些噪声较大的图像中,Canny 算法仍然能够准确地检测出边缘,而不会被噪声干扰。
  3. 边缘定位准确

    • 非极大值抑制步骤能够准确地定位边缘的位置,使得检测出的边缘更加清晰、准确。
    • 在物体识别和场景理解等领域,准确的边缘定位对于后续的处理非常重要。

缺点:

  1. 计算复杂度高

    • 由于 Canny 算法包含多个步骤,计算过程相对复杂,运算速度较慢。尤其是对于高分辨率的图像,处理时间可能会比较长。
    • 在一些对实时性要求较高的应用场景中,可能不太适用。
  2. 参数选择较困难

    • Canny 算法中有一些参数需要手动设置,如高斯滤波器的标准差、高阈值和低阈值等。这些参数的选择对边缘检测的结果有很大的影响,需要根据具体的图像特点进行调整,这增加了算法的使用难度。
    • 如果参数选择不当,可能会导致边缘检测结果不理想。

 

八、如何提高边缘检测算法的准确性和鲁棒性?

一、数据预处理

  1. 图像去噪

    • 噪声会干扰边缘检测的结果,因此在进行边缘检测之前,需要对图像进行去噪处理。可以采用高斯滤波、中值滤波等方法去除图像中的噪声。
    • 例如,高斯滤波通过对图像中的每个像素点进行加权平均,有效地平滑了图像中的噪声,同时保留了图像的边缘信息。中值滤波则是将图像中的每个像素点的值替换为其邻域内像素点的中值,对于去除椒盐噪声等效果显著。
  2. 图像增强

    • 通过增强图像的对比度和亮度,可以使图像中的边缘更加明显,从而提高边缘检测的准确性。可以采用直方图均衡化、拉普拉斯变换等方法进行图像增强。
    • 直方图均衡化可以调整图像的灰度分布,使图像的对比度增强。拉普拉斯变换则是通过对图像进行二阶微分运算,突出图像中的边缘和细节信息。

二、算法改进

  1. 多尺度分析

    • 不同尺度下的边缘信息可能不同,因此可以采用多尺度分析的方法,在不同尺度下对图像进行边缘检测,然后将结果进行融合。这样可以提高边缘检测的准确性和鲁棒性。
    • 例如,可以使用高斯金字塔对图像进行多尺度分解,然后在不同尺度下使用边缘检测算法进行检测,最后将结果进行融合。
  2. 自适应阈值

    • 传统的边缘检测算法通常使用固定的阈值来确定边缘,但是对于不同的图像,最佳的阈值可能不同。因此,可以采用自适应阈值的方法,根据图像的局部特征自动调整阈值。
    • 例如,可以使用局部自适应阈值法,根据图像中每个像素点的邻域信息来确定该像素点的阈值。这样可以更好地适应不同图像的特点,提高边缘检测的准确性。
  3. 结合机器学习算法

    • 可以将机器学习算法与传统的边缘检测算法相结合,通过训练模型来自动学习图像中的边缘特征,从而提高边缘检测的准确性和鲁棒性。
    • 例如,可以使用深度学习算法,如卷积神经网络(CNN),对大量的标注图像进行训练,学习图像中的边缘特征。然后,将训练好的模型应用于新的图像进行边缘检测。

三、后处理

  1. 边缘连接

    • 边缘检测算法可能会检测出一些不连续的边缘,因此需要进行边缘连接处理,将这些不连续的边缘连接起来,形成完整的边缘。
    • 可以采用边缘跟踪、区域生长等方法进行边缘连接。边缘跟踪是从一个已知的边缘点开始,沿着边缘的方向逐步搜索相邻的边缘点,直到形成一条完整的边缘。区域生长则是从一个种子点开始,逐步将与种子点具有相似特征的像素点加入到区域中,直到形成一个完整的区域。
  2. 形态学处理

    • 形态学处理可以进一步优化边缘检测的结果,去除噪声和小的孤立区域,使边缘更加平滑和连续。
    • 例如,可以使用膨胀和腐蚀操作对边缘进行形态学处理。膨胀操作可以使边缘变粗,连接一些不连续的边缘。腐蚀操作则可以使边缘变细,去除一些小的孤立区域。

四、评估和优化

  1. 评估指标

    • 选择合适的评估指标来衡量边缘检测算法的性能,如准确率、召回率、F1 值等。通过比较不同算法在这些指标上的表现,可以选择出性能最佳的算法。
    • 准确率是指检测出的正确边缘像素点与总像素点的比例。召回率是指检测出的正确边缘像素点与实际边缘像素点的比例。F1 值是准确率和召回率的调和平均数,综合考虑了算法的准确性和完整性。参数调整
      • 对于一些需要调整参数的边缘检测算法,如 Canny 边缘检测算法中的高阈值和低阈值,可以通过实验和优化来确定最佳的参数值。
      • 可以采用网格搜索、随机搜索等方法来自动调整参数,以提高算法的性能。
  2. 对比分析

    • 将不同的边缘检测算法应用于相同的图像数据集,进行对比分析,了解不同算法的优缺点。然后,根据具体的应用需求选择最合适的算法。
    • 例如,可以比较 Sobel 算子、Canny 边缘检测算法、基于深度学习的边缘检测算法等在不同图像上的表现,选择出最适合特定任务的算法。

以下是几种边缘检测的代码c++:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace std;
using namespace cv;int main() {// 读取图像Mat image = imread("your_image.jpg", IMREAD_GRAYSCALE);if (image.empty()) {cout << "无法读取图像" << endl;return -1;}// Sobel 边缘检测Mat sobelX, sobelY, sobel;Sobel(image, sobelX, CV_16S, 1, 0);Sobel(image, sobelY, CV_16S, 0, 1);convertScaleAbs(sobelX, sobelX);convertScaleAbs(sobelY, sobelY);addWeighted(sobelX, 0.5, sobelY, 0.5, 0, sobel);// Canny 边缘检测Mat canny;Canny(image, canny, 100, 200);// Prewitt 边缘检测Mat prewittX, prewittY, prewitt;int kernelX[] = {-1, 0, 1, -1, 0, 1, -1, 0, 1};int kernelY[] = {-1, -1, -1, 0, 0, 0, 1, 1, 1};filter2D(image, prewittX, CV_16S, Mat(3, 3, CV_16S, kernelX));filter2D(image, prewittY, CV_16S, Mat(3, 3, CV_16S, kernelY));convertScaleAbs(prewittX, prewittX);convertScaleAbs(prewittY, prewittY);addWeighted(prewittX, 0.5, prewittY, 0.5, 0, prewitt);// Laplace 边缘检测Mat laplace;Laplacian(image, laplace, CV_16S, 3);convertScaleAbs(laplace, laplace);// 显示结果imshow("Original Image", image);imshow("Sobel Edge Detection", sobel);imshow("Canny Edge Detection", canny);imshow("Prewitt Edge Detection", prewitt);imshow("Laplace Edge Detection", laplace);waitKey(0);return 0;
}

喜欢这些内容的关注我哦,每天都会有新的更新,希望志同道合的算法同志们,还在上学的小伙伴们一起互相学习,相互进步哟。 

 

 

相关文章:

《图像边缘检测算法综述》

在当今的数字时代&#xff0c;图像处理技术在各个领域都发挥着至关重要的作用。其中&#xff0c;边缘检测作为图像处理中的一个关键任务&#xff0c;旨在识别图像中亮度变化显著的区域&#xff0c;进而提取出物体的轮廓和形状。边缘检测不仅是图像处理的基础技术&#xff0c;还…...

Git 使用指南:从基础到实战

Git 是目前最流行的分布式版本控制系统&#xff0c;广泛应用于软件开发、项目协作和版本管理。本文详细介绍 Git 的基础操作、工作流程、分支管理、常见问题解决方法以及进阶技巧&#xff0c;帮助开发者在日常工作中高效地使用 Git。 目录 一、Git 基础概念1.1 版本控制1.2 Git…...

新生代对象垃圾回收如何避免全堆扫描

新生代垃圾回收如何避免全堆扫描&#xff1a;通过卡表 写屏障避免全堆扫描 卡表&#xff1a; 在做YGC的时候&#xff0c;需要判断年轻代里面的对象哪些是垃圾&#xff0c;这些对象可能被老年代的对象引用&#xff0c; 这时候判断年轻代的某个对象是不是垃圾的时候&#xff0…...

[论文阅读] | 智能体长期记忆

更新记录&#xff1a; 2024.11.2 人大高瓴长期记忆综述 文章目录 人大高瓴长期记忆综述智能体与环境交互记忆的来源/形式/操作来源&#xff1a;(1)当前任务历史信息 (2)其他任务的信息 (3)外部知识形式&#xff1a;如何表达记忆的内容&#xff0c;通过(1)文本 (2)参数(训练到模…...

Vue2.0 通过vue-pdf-signature@4.2.7和pdfjs-dist@2.5.207实现PDF预览

1.安装依赖 npm install pdfjs-dist2.5.207 --savenpm install vue-pdf-signature4.2.7 --save2.在.vue文件中 script 部分引入 <script> import * as PDFJS from pdfjs-dist PDFJS.GlobalWorkerOptions.workerSrc require(pdfjs-dist/build/pdf.worker.js);//解决pdf…...

gradle的安装及其配置

1、下载网址 Gradle | Releases 2、 3、配置环境变量 4、 5、cmd输入gradle-v查看版本...

qt QImage详解

1、概述 QImage是Qt框架中用于处理图像数据的一个核心类。与QPixmap不同&#xff0c;QImage是在内存中直接存储图像像素数据的&#xff0c;这使得它适用于需要直接访问和修改像素的应用场景&#xff0c;比如图像处理算法、图像绘制以及图像分析等。QImage支持多种图像格式&…...

数据分析与效果评估的有效方法与实践探讨

内容概要 在现代社会中&#xff0c;数据分析与效果评估已成为各类项目管理和决策制定中的重要组成部分。首先&#xff0c;数据分析为我们提供了一种系统化的方法&#xff0c;以深入了解所收集数据的内涵与趋势。通过对数据进行整理、分类和分析&#xff0c;我们能够发现潜在的…...

Langchain调用模型使用FAISS

1.导包 from langchain_community.document_loaders import TextLoader from langchain_community.vectorstores import FAISS from langchain_openai.embeddings import OpenAIEmbeddings from langchain_text_splitters import RecursiveCharacterTextSplitter2.加载数据 l…...

双向链表的实现

一.概念与结构 双向链表区别于单链表不同的地方在于&#xff0c;双链表多出于一个指针能指向前面结点&#xff0c;使得整个链表得以首位相连。带头链表里的头结点称为哨兵位&#xff0c;哨兵位结点不储存任何有效元素&#xff0c;只是放哨功能。 二.实现双链表 2.1双链表结构…...

Charles简单压力测试

1.接口请求次数&#xff0c;并发量&#xff0c;请求延迟时间均可配置 1.1选中需要进行测试的接口&#xff0c;鼠标右键选中【repeat advance】 2.设置并发参数 下面的图中&#xff0c;选择了1个接口&#xff0c;每次迭代中1个接口同时请求&#xff0c;迭代1000次&#xff08;…...

MMSegmentation测试阶段推理速度非常慢的一种可能原因

问题背景 测试集约1000张图片。训练阶段在测试集上推理时&#xff0c;速度正常&#xff0c;推理速度约为30fps&#xff1b;而使用tools/test.py进行推理时&#xff0c;速度非常慢&#xff0c;推理速度不到0.1fps。 解决方案 检查配置文件中是否启用了visualizer&#xff0c;…...

数据结构之链式结构二叉树的实现(初级版)

本文内容将主会多次用到函数递归知识&#xff01;&#xff01;&#xff01; 本节内容需要借助画图才能更好理解&#xff01;&#xff01;&#xff01; 和往常一样&#xff0c;还是创建三个文件 这是tree.h #pragma once #include<stdio.h> #include<stdlib.h> …...

day01-MybatisPlus

目录 1.快速入门 1.2.快速开始 1.2.1引入依赖 1.2.2.定义Mapper 1.2.3.测试 1.3.常见注解 1.3.1.TableName 1.3.2.TableId 1.3.3.TableField 1.4.常见配置 2.核心功能 2.1.条件构造器 2.1.1.QueryWrapper 2.1.2.UpdateWrapper 2.1.3.LambdaQueryWrapper 2.2.自…...

Postgresql源码(137)执行器参数传递与使用

参考 《Postgresql源码&#xff08;127&#xff09;投影ExecProject的表达式执行分析》 0 总结速查 prepare p_04(int,int) as select b from tbl_01 where a $1 and b $2为例。 custom计划中&#xff0c;在表达式计算中使用参数的值&#xff0c;因为custom计划会带参数值&…...

韩国恋爱游戏:阿西, 美女室友竟然…?百度网盘下载

​ 故事情节/出场人物 [阿西, 美女室友竟然…&#xff1f;]是一款 FMV 真人视频恋爱游戏&#xff0c;你将以第一人称与5位美女室友一起体验别样合租生活。 在本作中&#xff0c;您将扮演合租公寓的房东男主 吴宥万(直译:牛奶男)&#xff0c;一直独来独往的你&#xff0c;生活…...

一个运维牛人对运维规则的10个总结

一个运维牛人对运维规则的10个总结 在运维领域&#xff0c;经验和流程往往决定了系统的稳定性与可靠性。一个运维人&#xff0c;总结出了以下10条运维规则&#xff0c;涵盖了从基础管理到高级策略的全面内容&#xff0c;旨在帮助运维人员更好地应对各种挑战&#xff0c;确保系…...

Istio基本概念及部署

一、Istio架构及组件 Istio服务网格在逻辑上分为数据平面和控制平面。 控制平面&#xff1a;使用全新的部署模式&#xff1a;Istiod&#xff0c;这个组件负责处理Sidecar注入&#xff0c;证书颁发&#xff0c;配置管理等功能&#xff0c;替代原有组件&#xff0c;降低复杂度&…...

基于 Python 的 Django 框架开发的电影推荐系统

项目简介&#xff1a;本项目是基于 Python 的 Django 框架开发的电影推荐系统&#xff0c;主要功能包括&#xff1a; 电影信息爬取&#xff1a;获取并更新电影数据。数据展示&#xff1a;提供电影数据的列表展示。推荐系统&#xff1a;基于协同过滤算法实现个性化推荐。用户系…...

离线数仓开发SQL编写和调试的最佳实践(如何又快又好完成任务,学会几条就不用当很辛苦的牛马)

目录 在开发阶段对数据进行抽样 理论基础 实践应用 使用Hive进行数据采样 使用Spark进行数据采样 采用CTE模块化设计 逐步验证 逐步验证案例实践: 验证sales_data CTE: 验证ranked_sales CTE: 验证top_sales CTE: 结论 用Doris或Impala等更快查询的代替Hive …...

解锁数据库简洁之道:FastAPI与SQLModel实战指南

在构建现代Web应用程序时&#xff0c;与数据库的交互无疑是核心环节。虽然传统的数据库操作方式&#xff08;如直接编写SQL语句与psycopg2交互&#xff09;赋予了我们精细的控制权&#xff0c;但在面对日益复杂的业务逻辑和快速迭代的需求时&#xff0c;这种方式的开发效率和可…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者

抖音增长新引擎&#xff1a;品融电商&#xff0c;一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中&#xff0c;品牌如何破浪前行&#xff1f;自建团队成本高、效果难控&#xff1b;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r&#xff0c;求圆的面积。圆的面积应精确到小数点后5位。 例子&#xff1a; 输入&#xff1a;r 5 输出&#xff1a;78.53982 解释&#xff1a;由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982&#xff0c;因为我们只保留小数点后 5 位数字。 输…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

MySQL 知识小结(一)

一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库&#xff0c;分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷&#xff0c;但是文件存放起来数据比较冗余&#xff0c;用二进制能够更好管理咱们M…...

【网络安全】开源系统getshell漏洞挖掘

审计过程&#xff1a; 在入口文件admin/index.php中&#xff1a; 用户可以通过m,c,a等参数控制加载的文件和方法&#xff0c;在app/system/entrance.php中存在重点代码&#xff1a; 当M_TYPE system并且M_MODULE include时&#xff0c;会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

MySQL 部分重点知识篇

一、数据库对象 1. 主键 定义 &#xff1a;主键是用于唯一标识表中每一行记录的字段或字段组合。它具有唯一性和非空性特点。 作用 &#xff1a;确保数据的完整性&#xff0c;便于数据的查询和管理。 示例 &#xff1a;在学生信息表中&#xff0c;学号可以作为主键&#xff…...