Halcon 瑕疵检测原理及应用

摘要: 本文详细阐述了 Halcon 在瑕疵检测领域的原理、相关技术以及广泛的应用场景。首先介绍了 Halcon 软件的基本概况及其在机器视觉领域的重要地位,接着深入剖析了瑕疵检测所涉及的图像采集、预处理、特征提取与分析以及分类与判定等核心原理,随后探讨了不同类型瑕疵检测的具体应用案例,包括表面瑕疵、尺寸瑕疵和装配瑕疵等,并对 Halcon 瑕疵检测的优势与局限性进行了分析,最后对其未来发展趋势进行了展望,旨在使读者全面深入地了解 Halcon 瑕疵检测技术及其在工业生产等领域的关键作用。

一、引言

随着现代制造业的高速发展,产品质量控制的要求日益严格。瑕疵检测作为保证产品质量的重要环节,传统的人工检测方式由于效率低、主观性强、易疲劳等缺点,已难以满足大规模、高精度生产的需求。机器视觉技术应运而生,Halcon 作为一款领先的机器视觉软件,在瑕疵检测领域发挥着极为重要的作用。它能够快速、准确地识别产品表面的各种瑕疵,为提高生产效率和产品质量提供了强有力的技术支持。

二、Halcon 概述

Halcon 是德国 MVTec 公司开发的一套功能强大的机器视觉软件库。它涵盖了丰富的图像处理、分析和机器视觉算法,可用于开发各种复杂的视觉应用程序。Halcon 支持多种编程语言,如 C++、C#、Python 等,方便用户根据自身需求进行集成开发。其具有高度的灵活性和可扩展性,能够适应不同行业、不同场景下的视觉检测任务,在工业自动化、电子制造、汽车生产、包装印刷等众多领域都有着广泛的应用。

三、瑕疵检测原理

(一)图像采集

  1. 相机与镜头选择
    • 相机的类型(如面阵相机、线阵相机)和参数(分辨率、帧率、像素尺寸等)需要根据被检测物体的特征、检测精度要求和检测速度要求来确定。例如,对于高速运动的产品检测,可能需要选择高帧率的相机;对于微小瑕疵检测,则需要高分辨率的相机。
    • 镜头的焦距、光圈等参数影响着成像的视野范围、景深和清晰度。合适的镜头能够确保被检测物体在相机传感器上清晰成像,准确捕捉瑕疵信息。
  2. 照明系统设计
    • 照明是图像采集的关键因素之一。不同的照明方式(如背光源、前光源、环形光源、穹顶光源等)会产生不同的光照效果,凸显不同类型的瑕疵。例如,背光源对于检测透明物体内部的瑕疵效果较好,环形光源能够均匀照亮物体表面,突出表面的划痕、污渍等瑕疵。通过合理设计照明系统,可以增强瑕疵与正常区域的对比度,提高瑕疵检测的准确性和可靠性。

(二)图像预处理

  1. 灰度化处理
    • 将彩色图像转换为灰度图像,减少数据量的同时保留图像的基本轮廓和纹理信息。灰度化的方法有多种,如加权平均法等,通过对彩色图像的红、绿、蓝三个通道进行特定的加权求和计算,得到灰度值。
  2. 滤波去噪
    • 图像在采集和传输过程中会受到噪声干扰,影响瑕疵检测的精度。常用的滤波方法包括高斯滤波、中值滤波等。高斯滤波通过对图像像素邻域内的值进行加权平均运算,平滑图像,去除高斯噪声;中值滤波则是将像素邻域内的灰度值排序,取中间值作为该像素的新灰度值,对于椒盐噪声有较好的去除效果。
  3. 图像增强
    • 为了更清晰地凸显瑕疵特征,需要对图像进行增强处理。例如,对比度拉伸可以扩大图像的灰度范围,使原本对比度较低的瑕疵与背景之间的差异更加明显;直方图均衡化通过调整图像的直方图分布,使图像的灰度分布更加均匀,增强图像的整体对比度。

(三)特征提取与分析

  1. 基于灰度值的特征提取
    • 计算图像的灰度均值、方差等统计特征。灰度均值反映了图像整体的亮度水平,方差则体现了图像灰度值的离散程度。瑕疵区域的灰度均值和方差往往与正常区域存在差异,通过设定合适的阈值,可以初步筛选出可能存在瑕疵的区域。
    • 灰度共生矩阵是一种常用的纹理特征描述方法。它通过统计图像中不同灰度值像素对在特定方向和距离上的出现频率,提取图像的纹理信息。瑕疵的存在可能会改变图像的纹理特征,如划痕会使纹理的方向性发生变化,通过分析灰度共生矩阵的相关参数(如能量、对比度、熵等),可以识别出这些纹理变化,从而检测到瑕疵。
  2. 基于形状的特征提取
    • 对于一些具有特定形状的瑕疵,如圆形的孔洞、矩形的缺角等,可以通过形状分析算法进行检测。首先对图像进行边缘检测,常用的边缘检测算子有 Sobel 算子、Canny 算子等,得到物体的边缘轮廓。然后对边缘轮廓进行形状拟合,如采用最小二乘法拟合椭圆、矩形等形状,如果拟合误差超过一定阈值,则可能存在形状瑕疵。此外,还可以计算形状的面积、周长、圆形度、矩形度等几何特征,与标准形状的特征进行对比,判断是否存在瑕疵。
  3. 基于频域的特征提取
    • 将图像从空间域转换到频域,如通过傅里叶变换。在频域中,图像的瑕疵信息会以不同的频率成分表现出来。例如,高频成分往往对应着图像中的细节和边缘信息,瑕疵通常会导致高频能量的变化。通过分析频域图像的频谱特性,如频谱峰值、频谱分布等,可以检测到瑕疵的存在。例如,对于表面有周期性纹理的产品,当出现局部瑕疵时,频域中的纹理频率成分会发生改变,通过监测这种变化可以实现瑕疵检测。

(四)分类与判定

  1. 模板匹配法
    • 事先建立无瑕疵产品的标准模板图像,在检测时将待检测图像与模板图像进行匹配。匹配的方法有基于灰度值的模板匹配和基于形状的模板匹配等。通过计算匹配度,如归一化互相关系数等,如果匹配度低于设定的阈值,则判定存在瑕疵。这种方法适用于产品形状和外观相对固定,且瑕疵类型相对单一的检测场景。
  2. 机器学习法
    • 收集大量包含瑕疵和无瑕疵的样本图像,提取图像的各种特征(如上述的灰度值特征、形状特征等),然后利用机器学习算法(如支持向量机、神经网络等)进行训练。训练后的模型能够根据输入的待检测图像的特征,自动判断是否存在瑕疵以及瑕疵的类型。机器学习方法具有较强的适应性和泛化能力,能够处理复杂的瑕疵检测任务,尤其是对于多种瑕疵类型并存且难以用传统模板匹配方法检测的情况效果较好。
  3. 深度学习法
    • 深度学习在瑕疵检测领域近年来取得了显著的成果。例如,卷积神经网络(CNN)可以直接对原始图像进行处理,自动学习图像中的特征表示。通过构建深度神经网络架构,如 LeNet、AlexNet、ResNet 等,对大量的图像数据进行训练,网络能够准确地识别出图像中的瑕疵区域和类型。深度学习方法不需要人工设计复杂的特征提取算法,能够自动学习到高度抽象和有效的特征,在处理复杂纹理、形状多变的瑕疵检测任务中表现出卓越的性能。

四、Halcon 瑕疵检测的应用

(一)表面瑕疵检测

  1. 金属表面瑕疵检测
    • 在金属加工行业,如钢板、铝板的生产过程中,表面可能会出现划痕、氧化、凹坑等瑕疵。Halcon 可以通过图像采集系统获取金属表面的图像,经过预处理去除噪声和增强对比度后,利用基于灰度值和纹理的特征提取方法,如灰度共生矩阵分析纹理变化,检测出划痕等瑕疵。对于凹坑等形状瑕疵,可以采用基于形状的特征提取和分析方法,通过边缘检测和形状拟合判断凹坑的存在和大小。通过实时的瑕疵检测,可以及时发现并剔除有瑕疵的产品,提高金属产品的质量和生产效率。
  2. 塑料表面瑕疵检测
    • 塑料产品在注塑成型过程中,可能会出现飞边、气泡、流痕等表面瑕疵。Halcon 能够针对塑料表面的光泽度和纹理特点,设计合适的照明系统采集图像。在图像分析阶段,利用灰度值差异检测飞边等与背景有明显灰度差的瑕疵,通过纹理分析检测流痕等影响表面纹理的瑕疵。例如,对于透明塑料产品,可以采用特殊的背光源照明,使内部气泡在图像中清晰可见,然后通过图像分析算法准确识别气泡的位置和大小,保证塑料产品的外观质量,满足电子、汽车等行业对塑料零部件高精度外观的要求。

(二)尺寸瑕疵检测

  1. 机械零件尺寸检测
    • 在机械制造领域,各种机械零件的尺寸精度至关重要。Halcon 可以通过相机采集机械零件的图像,对图像进行边缘检测得到零件的轮廓。然后根据零件的设计尺寸要求,计算轮廓的几何特征,如长度、直径、孔径等。通过与标准尺寸进行对比,判断是否存在尺寸过大或过小的瑕疵。例如,对于轴类零件,可以精确测量其直径,对于孔类零件,可以测量孔径和孔深等尺寸参数,及时发现加工过程中的尺寸偏差,避免不合格零件进入下一道工序,减少废品率,提高生产效益。
  2. 电子元器件尺寸检测
    • 电子元器件如芯片、电阻、电容等,尺寸微小且精度要求极高。Halcon 借助高分辨率相机和精密的图像采集系统,能够清晰地获取电子元器件的图像。利用亚像素级的边缘检测技术,可以精确地定位元器件的边缘,从而准确测量其尺寸。例如,对于芯片引脚的间距和长度检测,通过对图像进行细致的分析和计算,确保引脚的尺寸符合设计规范,保证电子设备的正常组装和性能可靠性,在电子制造行业的质量控制环节发挥着关键作用。

(三)装配瑕疵检测

  1. 汽车零部件装配检测
    • 在汽车生产线上,众多零部件需要精确装配。Halcon 可以对装配后的汽车零部件进行视觉检测,如检测螺栓是否拧紧、零件是否安装到位等。通过图像采集和分析,利用形状匹配和位置关系判断等方法,检查各个零部件之间的相对位置和连接状态。例如,检测发动机缸盖螺栓是否按照规定的力矩拧紧,通过识别螺栓头部的形状和位置,与标准装配模型进行对比,若发现螺栓位置偏差或未拧紧的情况,及时发出警报,避免因装配瑕疵导致的汽车安全隐患,提高汽车的整体质量和安全性。
  2. 电子产品装配检测
    • 在电子产品组装过程中,如手机、电脑主板的装配,需要检测芯片、电容、电阻等元器件是否正确安装以及焊接是否良好。Halcon 可以对装配后的主板图像进行分析,通过模板匹配检测元器件的位置和型号是否正确,利用灰度值和纹理分析检测焊接点的质量,如是否存在虚焊、桥接等瑕疵。例如,对于 BGA(球栅阵列)封装芯片的焊接检测,通过分析焊接点的灰度和形状特征,判断焊接点是否饱满、均匀,确保电子产品的组装质量和性能稳定性,降低产品的故障率。

五、Halcon 瑕疵检测的优势与局限性

(一)优势

  1. 算法丰富且高效
    • Halcon 提供了大量成熟的图像处理和分析算法,涵盖了从图像预处理到特征提取、分类判定的各个环节。这些算法经过了广泛的测试和优化,具有高效性和准确性,能够快速处理大规模的图像数据,满足工业生产中高速、高精度的检测需求。
  2. 跨平台兼容性好
    • 支持多种操作系统(如 Windows、Linux 等)和编程语言(如 C++、C#、Python 等),方便用户在不同的开发环境和项目需求下进行集成。无论是在工业控制计算机上运行的自动化生产线检测系统,还是在普通 PC 机上开发的实验室检测软件,都可以方便地使用 Halcon 进行瑕疵检测开发。
  3. 可视化开发界面友好
    • Halcon 提供了可视化的开发界面,如 HDevelop,用户可以在该界面中快速进行算法原型设计、调试和优化。无需编写大量的代码即可实现基本的瑕疵检测功能,大大缩短了开发周期。同时,在可视化界面中可以直观地查看图像数据在各个处理阶段的变化情况,方便用户理解和调整算法参数。

(二)局限性

  1. 对硬件要求较高
    • 由于 Halcon 处理的图像数据量较大,尤其是在处理高分辨率图像或进行复杂的深度学习算法运算时,对计算机的 CPU、GPU 和内存等硬件资源有较高的要求。这可能会增加企业在硬件设备方面的投资成本,对于一些小型企业或资源有限的项目来说可能存在一定的限制。
  2. 算法复杂性与专业性
    • 虽然 Halcon 提供了丰富的算法,但要充分发挥其优势,需要用户具备一定的图像处理、机器视觉和编程知识。对于一些没有相关专业背景的用户来说,学习和掌握 Halcon 的使用方法可能存在一定的难度,需要花费较多的时间和精力进行培训和学习,这在一定程度上限制了 Halcon 的广泛应用。
  3. 深度学习模型训练数据需求大
    • 当使用深度学习方法进行瑕疵检测时,需要大量的标注样本数据进行模型训练。收集和标注这些数据往往需要耗费大量的人力、物力和时间。而且,如果训练数据的质量不高或代表性不足,可能会导致训练出的模型泛化能力差,在实际检测中出现误判或漏判的情况。

六、结论与展望

Halcon 在瑕疵检测领域具有重要的地位和广泛的应用价值。其基于先进的图像处理、分析和机器视觉原理,能够有效地实现对各种产品的表面瑕疵、尺寸瑕疵和装配瑕疵等的检测,在众多行业中为提高产品质量和生产效率发挥了关键作用。尽管存在一些局限性,如对硬件要求较高、算法复杂以及深度学习模型训练数据需求大等,但随着计算机硬件技术的不断发展和人工智能算法的持续进步,这些问题有望得到逐步解决。未来,Halcon 可能会在以下几个方面进一步发展:一是与更先进的硬件加速技术(如新型 GPU 架构)深度结合,提高算法的运行速度;二是开发更加智能化、自动化的算法开发工具,降低用户的使用门槛;三是在深度学习领域,进一步优化模型训练算法,减少对大量标注数据的依赖,提高模型的泛化能力和检测精度,从而在瑕疵检测以及整个机器视觉领域继续保持领先地位,为工业 4.0 和智能制造的发展提供更强大的技术支撑。

七、示例代码

以下分别给出几个使用 Halcon 进行不同类型瑕疵检测相关操作的示例代码,示例代码基于 Halcon 的 HDevelop 编程环境风格,你可以根据实际需求进一步调整并集成到具体的项目中(使用的是 Halcon 常见的基本操作,实际复杂应用可按需拓展)。

示例一:基于灰度阈值进行表面瑕疵检测(简单模拟检测图像中较暗的瑕疵区域)

* 关闭窗口
dev_close_window ()
* 读取图像(这里假设图像名为test_image.jpg,你需替换为实际图像路径及文件名)
read_image (Image, 'test_image.jpg')
* 获取图像尺寸
get_image_size (Image, Width, Height)
* 打开合适大小的窗口用于显示图像
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 在窗口中显示原始图像
dev_display (Image)
* 将彩色图像转换为灰度图像
rgb1_to_gray (Image, GrayImage)
* 设置阈值,这里示例以较低灰度值(可根据实际瑕疵特征调整)来检测可能的瑕疵区域
Threshold := 100
* 进行阈值分割,低于阈值的像素设为黑色(表示瑕疵区域,可根据实际调整),高于阈值设为白色(正常区域)
threshold (GrayImage, Region, 0, Threshold)
* 对分割出的瑕疵区域进行形态学操作(比如闭运算,填充小孔等,使区域更完整,可按需调整)
closing_circle (Region, ClosedRegion, 3.0)
* 在窗口中显示检测出的瑕疵区域(以红色高亮显示)
dev_set_color ('red')
dev_display (ClosedRegion)

这个示例代码的主要思路是先读取一张图像,转换为灰度图后,通过设定一个灰度阈值来分割出可能是瑕疵的较暗区域,然后进行简单的形态学处理让瑕疵区域更规整,最后将检测出的瑕疵区域显示出来。

示例二:利用形状特征检测机械零件尺寸瑕疵(简单模拟检测圆形零件是否尺寸合规)

* 关闭所有窗口
dev_close_window ()
* 读取机械零件图像(替换为实际图像路径及文件名)
read_image (PartImage, 'part_image.jpg')
* 获取图像尺寸信息
get_image_size (PartImage, Width, Height)
* 打开窗口用于显示图像
dev_open_window (0, 0, Width, Width, 'black', WindowHandle)
* 显示原始图像
dev_display (PartImage)
* 对图像进行灰度化(假设零件图像本身颜色不影响形状检测,可按需调整)
rgb1_to_gray (PartImage, GrayPartImage)
* 进行边缘检测,采用 Canny 算子获取边缘轮廓
edges_sub_pix (GrayPartImage, Edges, 'canny', 1, 20, 40)
* 选择轮廓中符合圆形形状特征的轮廓(这里简单示例找圆形轮廓,设置一定的圆形度等参数范围,实际需更精细调整)
select_shape (Edges, Circles, ['circularity'], 'and', [0.8], [1])
* 如果找到符合圆形的轮廓,测量其半径等尺寸信息(这里仅示例测量半径)
if (count_obj (Circles) > 0)
    area_center (Circles, Area, Row, Column)
    radius := sqrt(Area[0] / PI)
    * 假设标准半径为100(单位根据实际情况定,这里仅示例),判断是否尺寸合规
    StandardRadius := 100
    if (abs(radius - StandardRadius) > 5)
        disp_message (WindowHandle, '零件尺寸存在瑕疵', 'window', 10, 10, 'red', 'true')
    else
        disp_message (WindowHandle, '零件尺寸合格', 'window', 10, 10, 'green', 'true')
    endif
else
    disp_message (WindowHandle, '未检测到圆形零件轮廓', 'window', 10, 10, 'red', 'true')
endif

在这个代码中,先是读取机械零件图像,经过灰度化后利用边缘检测算子获取边缘轮廓,接着筛选出圆形的轮廓,若有符合的圆形轮廓就测量其半径并与标准半径对比,以此判断零件尺寸是否存在瑕疵,最后将结果通过文字提示显示在窗口中。

示例三:使用模板匹配检测电子产品装配瑕疵(简单模拟检测芯片是否安装在正确位置)

* 关闭窗口
dev_close_window ()
* 读取标准模板图像(无瑕疵正确装配时芯片的图像,替换为实际路径及文件名)
read_image (TemplateImage, 'template_image.jpg')
* 读取待检测的装配后图像(含芯片装配情况,替换为实际路径及文件名)
read_image (TestImage, 'test_image.jpg')
* 获取模板图像尺寸
get_image_size (TemplateImage, TemplateWidth, TemplateHeight)
* 打开合适大小的窗口用于显示图像
dev_open_window (0, 0, TemplateWidth, TemplateHeight, 'black', WindowHandle)
* 在窗口中显示待检测图像
dev_display (TestImage)
* 进行基于灰度的模板匹配
create_template_model (TemplateImage, 'auto', -rad(360), rad(360), 'auto', 'auto', ModelID)
find_template_model (TestImage, ModelID, -rad(360), rad(360), 0.8, 1, 0.5, 'least_squares', 0, 0.9, Row, Column, Angle, Score)
* 判断匹配得分是否满足要求(这里示例阈值设为 0.8,可根据实际调整)
if (Score >= 0.8)
    disp_message (WindowHandle, '芯片装配位置正确', 'window', 10, 10, 'green', 'true')
else
    disp_message (WindowHandle, '芯片装配存在瑕疵', 'window', 10, 10, 'red', 'true')
endif
* 清除模板模型资源
clear_template_model (ModelID)

上述代码的逻辑是先分别读取标准的芯片模板图像以及实际待检测的电子产品装配图像,然后创建模板模型,通过模板匹配算法在待检测图像中查找与模板匹配的区域,根据匹配得分来判断芯片是否安装在正确位置,也就是检测是否存在装配瑕疵,最后释放模板模型占用的资源。

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

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

相关文章

开发手札:Win+Mac下工程多开联调

最近完成一个Windows/Android/IOS三端多人网络协同项目V1.0版本,进入测试流程了。为了方便自测,需要用unity将一个工程打开多次,分别是Win/IOS/Android版本,进行多角色联调。 在Win开发机上,以Windows版本为主版…

云原生数据库 PolarDB

PolarDB 是阿里云推出的一款云原生数据库,旨在为企业提供高性能、高可靠性的数据库解决方案。它基于云计算环境设计,特别适用于云上的大规模数据处理和存储需求。PolarDB 是一种兼具关系型数据库(RDS)和分布式数据库特性的新型数据…

状态模式的理解和实践

在软件开发中,我们经常遇到需要根据对象的不同状态执行不同行为的情况。如果直接将这些状态判断和行为逻辑写在同一个类中,会导致该类变得臃肿且难以维护。为了解决这个问题,状态模式(State Pattern)应运而生。状态模式…

【Linux篇】权限管理 - 用户与组权限详解

一. 什么是权限? 首先权限是限制人的。人 真实的人 身份角色 权限 角色 事物属性 二. 认识人–用户 Linux下的用户分为超级用户和普通用户 root :超级管理员,几乎不受权限的约束普通用户 :受权限的约束超级用户的命令提示符是#,普通用…

Java刷题常见的集合类,各种函数的使用以及常见的类型转化等等

前言 相信大家在刷算法题的过程中,好不容易想出来大概的思路,也知道去用哪个集合类,但各个集合类的一些命令都长得太像,很容易将他们弄错,并且在各集合之间的转化也是特别烦人,还有很多实用的函数都知道可…

cgo内存泄漏排查

示例程序&#xff1a; package main/* #include <stdlib.h> #include <string.h> #include <stdio.h> char* cMalloc() {char *mem (char*)malloc(1024 * 1024 * 16);return mem; } void cMemset(char* mem) {memset(mem, -, 1024 * 1024 * 16); } int arr…

【算法】【优选算法】位运算(下)

目录 一、&#xff1a;⾯试题 01.01.判定字符是否唯⼀1.1 位图1.2 hash思路1.3 暴力枚举 二、268.丢失的数字2.1 位运算&#xff0c;异或2.2 数学求和 三、371.两整数之和四、137.只出现⼀次的数字 II五、⾯试题 17.19.消失的两个数字 一、&#xff1a;⾯试题 01.01.判定字符是…

Tomcat 都有哪些核心组件

优质博文&#xff1a;IT-BLOG-CN 【1】Server&#xff1a;Server元素在最顶层&#xff0c;代表整个 Tomcat容器&#xff0c;因此他必须是 server.xml中唯一一个最外层的元素。一个 Server元素可以有一个或多个 Service元素。 <Server port"8005" shutdown"…

前端开发 之 15个页面加载特效中【附完整源码】

前端开发 之 15个页面加载特效中【附完整源码】 文章目录 前端开发 之 15个页面加载特效中【附完整源码】八&#xff1a;圆环百分比加载特效1.效果展示2.HTML完整代码 九&#xff1a;毒药罐加载特效1.效果展示2.HTML完整代码 十&#xff1a;无限圆环加载特效1.效果展示2.HTML完…

单张照片生成3D互动场景:李飞飞团队AI 3D技术引领未来

近日,由斯坦福大学教授李飞飞领导的团队推出了一项革命性的AI 3D重建技术,该技术能够从多张未知姿态的照片中自动生成高质量的3D互动场景。这项技术不仅标志着计算机视觉领域的一大进步,也为元宇宙虚拟空间、沉浸式看房、XR(扩展现实)+文旅等应用带来了新的可能性。 技术…

洛谷P2670扫雷游戏(Java)

三.P2670 [NOIP2015 普及组] 扫雷游戏 题目背景 NOIP2015 普及组 T2 题目描述 扫雷游戏是一款十分经典的单机小游戏。在 n 行 m列的雷区中有一些格子含有地雷&#xff08;称之为地雷格&#xff09;&#xff0c;其他格子不含地雷&#xff08;称之为非地雷格&#xff09;。玩…

【机器学习】机器学习的基本分类-监督学习-决策树-CART(Classification and Regression Tree)

CART&#xff08;Classification and Regression Tree&#xff09; CART&#xff08;分类与回归树&#xff09;是一种用于分类和回归任务的决策树算法&#xff0c;提出者为 Breiman 等人。它的核心思想是通过二分法递归地将数据集划分为子集&#xff0c;从而构建一棵树。CART …

商汤完成组织架构调整,改革完成的商汤未来何在?

首先&#xff0c;从核心业务的角度来看&#xff0c;商汤科技通过新架构明确了以AI云、通用视觉模型等为核心业务的战略方向。这一举措有助于商汤科技集中资源&#xff0c;加强在核心业务领域的研发和市场拓展&#xff0c;提高市场竞争力。同时&#xff0c;坚定生成式AI为代表的…

python学opencv|读取视频(二)制作gif

【1】引言 前述已经完成了图像和视频的读取学习&#xff0c;本次课学习制作gif格式动图。 【2】教程 实际上想制作gif格式动图是一个顺理成章的操作&#xff0c;完成了图像和视频的处理&#xff0c;那就自然而然会对gif的处理也产生兴趣。 不过在opencv官网、matplotlib官网…

【Pytorch】torch.reshape与torch.Tensor.reshape区别

问题引入&#xff1a; 在Pytorch文档中&#xff0c;有torch.reshape与torch.Tensor.reshape两个reshape操作&#xff0c;他们的区别是什么呢&#xff1f; 我们先来看一下官方文档的定义&#xff1a; torch.reshape&#xff1a; torch.Tensor.reshape: 解释&#xff1a; 在p…

ArcGIS对地区进行筛选提取及投影转换

首先我们需要对坐标系和投影这些概念做进一步的解释。 1、基本概念&#xff1a; 想要理解坐标系和投影的概念&#xff0c;首先我们需要先理解什么是坐标。顾名思义&#xff0c;坐标就是指我们所在的位置&#xff0c;比如我在离旗杆东北部50m处&#xff0c;其实就是离旗杆东边…

qt QRadialGradient详解

1、概述 QRadialGradient是Qt框架中QGradient的一个子类&#xff0c;它用于创建径向渐变效果。径向渐变是从一个中心点向外扩散的颜色渐变&#xff0c;通常用于模拟光源或创建类似于高光和阴影的效果。QRadialGradient允许你定义渐变的中心点、焦距&#xff08;控制渐变扩散的…

Docker--Docker Image(镜像)

什么是Docker Image&#xff1f; Docker镜像&#xff08;Docker Image&#xff09;是Docker容器技术的核心组件之一&#xff0c;它包含了运行应用程序所需的所有依赖、库、代码、运行时环境以及配置文件等。 简单来说&#xff0c;Docker镜像是一个轻量级、可执行的软件包&…

《C++ Primer Plus》学习笔记|第1章 预备知识 (24-12-2更新)

文章目录 1.2.4 1.4 程序创建1.4.2 编译和链接 1.2.4 泛型编程 它允许程序员在编写代码时不指定具体的数据类型&#xff0c;而是使用一种通用的模板来处理多种不同的数据类型。以提高代码的复用性 C模板提供了完成这种任务的机制。 1.4 程序创建 使用文本编辑器编写程序&…

string类函数的手动实现

在上一篇文章中&#xff0c;我们讲解了一些string类的函数&#xff0c;但是对于我们要熟练掌握c是远远不够的&#xff0c;今天&#xff0c;我将手动实现一下这些函数~ 注意&#xff1a;本篇文章中会大量应用复用&#xff0c;这是一种很巧妙的方法 和以往一样&#xff0c;还是…