halcon 入门教程(五) 缺陷检测

news/2025/3/21 17:29:37/文章来源:https://www.cnblogs.com/DOMLX/p/18785484

原文作者:aircraft

原文链接:https://www.cnblogs.com/DOMLX/p/18785484

 

 

 有兴趣可以多看其他的halcon教程

 halcon 学习教程目录

 

 

 

 

          本篇主要讲一些常见的缺陷检测方法,目前只会讲一些,后面有空的话会不断的补充完整。因为缺陷的种类实在太多太多了,各种各样的缺陷可能都要用各种不同的检测方法去检测,所以想要精通缺陷检测特别难,基本大家都是熟悉自己经常遇到的缺陷领域。

 

第一种:就是最常见的Blob分析加上特征提取(本篇也会多给一些这个示例。因为确实是最基础也是最常用的,用的好你可能百分之八九十的缺陷都可以检测,主要还是看对这块的理解

 

第二种:图像匹配定位后再加Blob分析,可以结合本篇的Blob分析和我下一篇的:halcon 入门教程(六) 图像匹配(基于形状的模板匹配)与缺陷检测区域定位

 

第三种:建立模板区域的差异模型,原理就是后面所有的产品都与一个标准品做差异模型,可以差异的程度对其判断NG,OK。可以看我这篇博客理解:halcon 入门教程 (七) halcon中是怎么实现半导体/Led中的GoldenDie的检测方法的 基于局部可变形模板匹配 variation_model模型

 

第四种:光度立体法(基本属于2.5d的视觉范围了,适用于一些物体表面有凹凸情况下的检测,通过多个角度方向的打光图片,来获取伪3d的信息进行缺陷检测)

 

第五种:图像匹配定位后再加测量(比如一些钢管,或者元器件表面的某个东西的长度,宽度,厚度,半径之类的达不达标),可以结合halcon 入门教程(六) 图像匹配(基于形状的模板匹配)与缺陷检测区域定位 和 halcon 入门教程(三) 测量量测相关(点到线距离,线到线距离,轮廓线距离,一维测量,圆形测量,矩形测量等)这两篇来看,组合起来基本就是这种检测方法了。

 

第六种:机器学习和深度学习的缺陷检测(基本都是通过标记好的和坏的训练集,给神经网络程序训练学习,学习成功后,后面只要传入该产品图,或者某个区域图,便可以直接给出判断好坏,甚至处理一下可以把具体缺陷都标注显示出来)

有兴趣可以看看我这篇博客:halcon 深度学习教程(一)分类检测 (工业里如何使用halcon深度学习去检测分类产品)

 

第七种:空域和频域分析(适用于一些像皮革,木材,纹理石板之类的对比度低的产品上去进行检测)

 

第八种:三维重建后再加特征提取(属于3d视觉的领域了,会多一些诸如高度或者说深度信息)

 

 

 

 

   下面一些算子的原型我就不介绍了,有看过前面教程的应该都认识这些常用的算子了。而且每个示例代码我都打了非常详细的注释,基本看着注释应该是可以理解的吧。

 

一.Blob分析加上特征提取

 

示例1:榛子威化饼的质量检测   

 

 

OK图:

 

NG图:

 

示例代码:

* ​*************************************************************
* 本程序演示针对榛子威化饼的质量检测
* 检测方法:基于形态学处理提取目标区域,通过孔洞面积和矩形度进行缺陷判断
* 工业应用:食品包装完整性检测(破损、变形检测)
* 检测标准:孔洞面积>300 或 矩形度<0.92 判定为不合格
* ​************************************************************** 初始化图像和显示窗口
read_image (Image, 'food/hazelnut_wafer_01')
* 关闭可能存在的旧窗口
dev_close_window ()
* 创建自适应图像尺寸的显示窗口
dev_open_window_fit_image (Image, 0, 0, -1, -1, WindowHandle)
* 禁止窗口自动更新(提升执行效率)
dev_update_window ('off')* 设置可视化参数
* 线宽3像素用于突出显示轮廓
dev_set_line_width (3)
* 轮廓显示模式(节省显示资源)
dev_set_draw ('margin')
* 设置等宽字体便于字符对齐
set_display_font (WindowHandle, 20, 'mono', 'true', 'false')* 处理24张连续拍摄的威化饼图像
for Index := 1 to 2 by 1* 读取序列图像(文件名格式:1~2.bmp)read_image (Image, Index+'.bmp')* 图像预处理* 使用直方图平滑法进行二值化(适合低对比度场景)binary_threshold (Image, Foreground, 'smooth_histo', 'light', UsedThreshold)* 8.5像素半径开运算去除毛刺和小孔洞opening_circle (Foreground, FinalRegion, 8.5)* 特征提取* 计算区域内部孔洞总面积(关键缺陷指标)area_holes (FinalRegion, AreaHoles)* 计算区域矩形度(1为完美矩形,值越小变形越严重)rectangularity (FinalRegion, Rectangularity)* 显示原始图像dev_display (Image)* 质量判定逻辑* 孔洞超标或形状变形时显示红色报警if (AreaHoles > 300 or Rectangularity < 0.92)dev_set_color ('red')Text := 'Not OK'* 合格产品显示绿色轮廓elsedev_set_color ('forest green')Text := 'OK'endif* 显示检测结果dev_display (FinalRegion)* 在窗口左上角显示OK/NG状态disp_message (WindowHandle, Text, 'window', 12, 12, '', 'false')* 非最后一张图像时暂停观察if (Index < 2)* 显示继续检测提示disp_continue_message (WindowHandle, 'black', 'true')stop ()  * 模拟产线节拍控制endif
endfor

 

示例2:鳍片检测程序(fin.hdev)  利用形态学分析与差异模型检测

 

 

两张边缘有凸出的图片:

 

 

 通过提取白色背景区域,然后进行闭运算将区域边缘小凸出闭合,然后与原始区域做个差异,得到缺陷位置,在进行开运算,消除多提出来的边的区域。

 

结果图:

 

 

实例代码:

* ​*************************************************************
* 鳍片检测程序(fin.hdev)
* 功能:通过形态学处理检测金属鳍片缺陷
* 检测逻辑:
*   1. 二值化分离前景
*   2. 闭运算填充结构间隙
*   3. 差异检测潜在缺陷区域
*   4. 开运算去除噪声
* 工业应用:散热器制造质检
* ​************************************************************** 关闭窗口自动刷新(提升执行效率)
dev_update_window ('off')* 读取鳍片图像序列(fin2, fin3)
read_image (Fins, 'fin' + [2:3])* 初始化显示窗口
get_image_size (Fins, Width, Height)
dev_close_window ()
* 创建与图像等大的黑色背景窗口
dev_open_window (0, 0, Width[0], Height[0], 'black', WindowID)
* 设置等宽字体便于信息对齐
set_display_font (WindowID, 14, 'mono', 'true', 'false')* 遍历处理3个检测对象(实际图像为2张,索引从1开始)
for I := 1 to 2 by 1* 选择当前处理对象select_obj (Fins, Fin, I)* 显示原始图像dev_display (Fin)* 步骤1:二值化分割(最大化前景背景可分性)binary_threshold (Fin, Background, 'max_separability', 'light', UsedThreshold)* 蓝色显示初始分割结果dev_set_color ('blue')dev_set_draw ('margin')dev_set_line_width (4)dev_display (Background)disp_continue_message (WindowID, 'black', 'true')stop ()  * 质检员确认阶段结果* 步骤2:大半径闭运算填充结构间隙closing_circle (Background, ClosedBackground, 250)* 绿色显示填充后区域dev_set_color ('green')dev_display (ClosedBackground)disp_continue_message (WindowID, 'black', 'true')stop ()  * 确认形态学处理效果* 步骤3:差异检测(理想结构与实际结构对比)difference (ClosedBackground, Background, RegionDifference)* 步骤4:开运算去除微小噪声opening_rectangle1 (RegionDifference, FinRegion, 5, 5)* 显示最终检测结果dev_display (Fin)        * 原始图像背景dev_set_color ('red')    * 红色高亮缺陷dev_display (FinRegion)  * 叠加缺陷区域* 计算缺陷区域特征area_center (FinRegion, FinArea, Row, Column)* 非最后一张图像时暂停if (I < 2)disp_continue_message (WindowID, 'black', 'true')stop ()  * 模拟产线节拍等待endif
endfor

 

示例3:塑料网缺陷检测程序   使用动态阈值检测塑料网中的异常纹理区域     原图与均值图比对 提取出比均值图还暗的多的缺陷区域出来

 

两张测试的原图:

 

 

实例代码:

* ​*************************************************************
* 塑料网缺陷检测程序
* 功能:使用动态阈值检测塑料网中的异常纹理区域
* 检测逻辑:
*   1. 图像平滑处理消除纹理干扰
*   2. 动态阈值分割异常区域
*   3. 连通域分析与面积筛选
* 工业应用:塑料编织品质量检测
* ​************************************************************** 关闭窗口自动更新(提升执行效率)
dev_update_window ('off')* 读取塑料网基准图像(用于窗口初始化)
read_image (Image, 'plastic_mesh_'+[1])* 初始化显示窗口
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window_fit_image (Image, 0, 0, Width, Height, WindowHandle)* 设置可视化参数
* 等宽字体便于信息对齐
set_display_font (WindowHandle, 18, 'mono', 'true', 'false')
* 轮廓显示模式(节省显示资源)
dev_set_draw ('margin')
* 设置检测结果轮廓线宽
dev_set_line_width (3)* 处理两张塑料网图像序列
for J := 1 to 2 by 1* 读取当前检测图像(文件名格式:plastic_mesh_1.bmp~plastic_mesh_2.bmp)read_image (Image, 'plastic_mesh_' + J+'.bmp')* 图像预处理:49x49均值滤波(消除高频纹理干扰)mean_image (Image, ImageMean, 49, 49)* 动态阈值分割(检测比背景暗5个灰度级的异常区域)dyn_threshold (Image, ImageMean, RegionDynThresh, 5, 'dark')* 连通域分析(分离独立缺陷区域)connection (RegionDynThresh, ConnectedRegions)* 面积筛选(过滤500像素以下的噪声)select_shape (ConnectedRegions, ErrorRegions, 'area', 'and', 500, 99999)* 统计缺陷数量count_obj (ErrorRegions, NumErrors)* 显示原始图像和检测结果dev_display (Image)dev_set_color ('red')  * 红色高亮缺陷dev_display (ErrorRegions)* 判定结果输出if (NumErrors > 0)* 显示NG标识(位置:第24行,第12列)disp_message (WindowHandle, 'Mesh not OK', 'window', 24, 12, 'black', 'true')else* 显示OK标识disp_message (WindowHandle, 'Mesh OK', 'window', 24, 12, 'black', 'true')endif* 非最后一张图像时显示继续提示if (J < 2)disp_continue_message (WindowHandle, 'black', 'true')stop ()  * 模拟产线节拍控制endif
endfor

 

结果图:

 

 

 

OK,这里先写这几个,还有更多的都在halcon的官方案例集里,右边那一堆都是。

 

 

 

 

二.空域和频域结合的缺陷检测

这里主要的案例都来自halcon程序集的快速傅里叶变换,有兴趣详细了解的,就可以去看看。就如我一直在说的,halcon里的实例就是自己最好的老师。

 

 

先大概了解一下这个东西:

 

一、图像的两个视角:空间域 vs 频域

1. 空间域(你看到的图像)​

  • 是什么:图像由像素组成,每个像素代表某个位置的亮度值。
  • 直观理解:就像你看到的一张照片,每个点直接显示颜色或明暗。
  • 工业应用:直接观察表面划痕、颜色异常等(但复杂纹理中的小缺陷难以直接看到)。

2. 频域(图像的“成分分析”)​

  • 是什么:将图像分解为不同频率的波(高频=细节/边缘,低频=整体形状)。
  • 直观理解:像把音乐分解成不同频率的音符,高频是鼓点,低频是贝斯。
  • 工业应用:检测周期性纹理中的异常(如织物瑕疵、注塑件表面缺陷)。

二、快速傅里叶变换(FFT)是什么?

  • 核心作用:快速将图像从空间域转换到频域(反之亦可)。
  • 为什么快:优化算法,计算复杂度从O(n²)降到O(n log n),适合实时检测。

三、HALCON中的FFT操作步骤(以检测塑料表面缺陷为例)​

1. 读取图像

read_image (Image, 'plastics_01.jpg')  * 读取塑料件表面图像

2. 转换到频域

* 执行FFT(空间域→频域)
fft_image (Image, ImageFFT)  * 输出是复数图像(实部+虚部)

3. 频域滤波(增强缺陷)​

 

* 生成高斯低通滤波器(抑制背景纹理)
gen_gauss_filter (Filter, 20, 20, 0, 'none', 'rft', Width, Height)
* 频域相乘(保留高频=缺陷,抑制低频=背景)
convol_fft (ImageFFT, Filter, FilteredFFT)

4. 转换回空间域

* 逆FFT(频域→空间域)
fft_image_inv (FilteredFFT, ImageFiltered)  * 得到增强后的图像

5. 缺陷检测

threshold (ImageFiltered, Defects, 120, 255)  * 阈值分割
connection (Defects, ConnectedRegions)       * 连通区域分析

四、频域分析在工业中的典型应用

1. 周期性纹理检测(如织物、金属网)​

  • 问题:直接观察难以发现断丝、孔洞。
  • 解决:通过FFT找到异常频率成分。

2. 表面微小缺陷增强

  • 问题:划痕与背景纹理对比度低。
  • 解决:抑制背景纹理(低频),增强缺陷(高频)。

3. 振动分析

  • 问题:机械振动导致图像模糊。
  • 解决:在频域分离振动频率成分并修复。

五、关键注意事项

1. 图像尺寸要求

  • FFT对图像尺寸敏感,最佳性能要求尺寸为2的幂次(如512x512)。
  • HALCON会自动填充optimize_rft_speed函数优化处理速度。

2. 滤波器设计

  • 低通滤波gen_gauss_filter(抑制高频噪声)。
  • 高通滤波gen_derivative_filter(增强边缘)。
  • 带阻滤波:组合高低通滤波器(去除特定频率噪声)。

3. 结果可视化

  • 查看频谱图
power_real (ImageFFT, PowerSpectrum)  * 计算功率谱
dev_display (PowerSpectrum)           * 显示频域能量分布

亮点表示强频率成分(如周期性纹理)。

六、完整代码示例(塑料表面缺陷检测)​

dev_update_off ()
read_image (Image, 'plastics_01.jpg')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)* FFT转换到频域
fft_image (Image, ImageFFT)* 设计高斯滤波器(抑制低频背景)
gen_gauss_filter (Filter, 15, 15, 0, 'none', 'rft', Width, Height)
convol_fft (ImageFFT, Filter, FilteredFFT)* 逆FFT转回空间域
fft_image_inv (FilteredFFT, ImageFiltered)* 缺陷分割与显示
threshold (ImageFiltered, Defects, 100, 255)
connection (Defects, ConnectedRegions)
dev_display (Image)
dev_set_color ('red')
dev_display (ConnectedRegions)

七、总结

  • FFT在工业中的价值:将肉眼难见的纹理异常转化为可检测的信号。
  • 学习建议:从简单滤波开始,逐步尝试带通/带阻滤波,观察频域图的变化。
  • 调试技巧:通过power_real可视化频域,调整滤波器参数观察缺陷检测效果。
  • 适用于具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现。
  • 适用于需要提取对比度低或者信噪比低的特征。

 

 

 

 

OK,接下来学习一下主要运用到的算子

 

 

 

 

1.空域转频域算子fft_image(Image : ImageFFT : : )详解:

  • 输入参数
    • Image:输入图像(必须为单通道灰度图像)。
  • 输出参数
    • ImageFFT:频域图像(复数形式,包含实部和虚部)。

工作原理

  1. 复数图像结构

    • ImageFFT包含两个通道:可通过get_image_size查看通道数:Channels := 2
      • 第一个通道:实部(Real Part)
      • 第二个通道:虚部(Imaginary Part)
  2. 频域特性

    • 低频分量集中在图像中心(整体形状、背景纹理)。
    • 高频分量分布在四周(细节、边缘、噪声)。

工业应用示例(塑料表面缺陷检测)​

场景描述

  • 问题:注塑件表面有微小划痕,但背景有周期性纹理干扰。
  • 目标:通过FFT抑制背景纹理,增强缺陷。

代码流程

* 1. 读取图像并预处理
read_image (Image, 'plastics_01.jpg')
rgb1_to_gray (Image, GrayImage)  * 确保输入是灰度图* 2. 优化FFT计算速度(关键步骤!)
optimize_rft_speed (Width, Height, 'standard')  * 自动填充至最优尺寸* 3. 执行FFT转换到频域
fft_image (GrayImage, ImageFFT)* 4. 频域滤波(示例:高斯带阻滤波)
gen_gauss_filter (GaussFilter, 15, 15, 0, 'none', 'rft', Width, Height)
convol_fft (ImageFFT, GaussFilter, FilteredFFT)* 5. 逆FFT转回空间域
fft_image_inv (FilteredFFT, ImageFiltered)* 6. 缺陷检测
threshold (ImageFiltered, Defects, 100, 255)
connection (Defects, ConnectedRegions)

关键注意事项

1. 图像尺寸优化

  • 问题:FFT对图像尺寸敏感,非2的幂次时速度慢。
  • 解决:使用optimize_rft_speed自动填充至最优尺寸。
get_image_size (Image, Width, Height)
optimize_rft_speed (Width, Height, 'standard')  * 第三个参数可选:* 'standard'(平衡速度/内存)* 'explore'(深度优化)

2. 输入数据类型

  • 必须:输入图像为byteuint2real类型。
  • 建议:转换到real类型避免精度损失:
convert_image_type (GrayImage, ImageReal, 'real')
fft_image (ImageReal, ImageFFT)

3. 滤波器设计

  • 低频抑制​(去背景):
* 大σ值高斯滤波器(σ=20)
gen_gauss_filter (LowPassFilter, 20, 20, 0, 'none', 'rft', Width, Height)

高频增强​(提取缺陷):

* 高斯带阻滤波(抑制特定频率)
gen_gauss_filter (BandStopFilter, 10, 10, 0, 'none', 'rft', Width, Height)

4. 结果可视化

power_real (ImageFFT, PowerSpectrum)  * 计算功率谱(实部² + 虚部²)
dev_display (PowerSpectrum)           * 显示亮度表示能量强度

常见问题解答

Q1:直接显示ImageFFT为什么是乱码?

  • 原因:频域图像是复数,无法直接显示。
  • 正确方法:需计算幅度谱或功率谱:
fft_image (Image, ImageFFT)
power_real (ImageFFT, PowerSpectrum)
dev_display (PowerSpectrum)

Q2:如何检测周期性缺陷?

  • 步骤
    1. 在功率谱中查找对称亮斑。
    2. 设计带阻滤波器消除对应频率。
    3. 逆FFT后检测剩余异常区域。

Q3:处理速度慢怎么办?

  • 优化措施
    • 使用optimize_rft_speed优化尺寸。
    • 选择fft_generic的快速模式:
fft_generic (Image, ImageFFT, 'to_freq', 'explore', 'complex', Width)

总结

  • 核心价值fft_image将图像转换到频域,使周期性纹理和微小缺陷更易分离。
  • 典型应用
    • 消除背景纹理干扰(如金属网、织物)
    • 增强低对比度缺陷(如塑料划痕)
    • 振动模糊校正(如高速生产线图像修复)

通过合理设计滤波器,您可以在频域中“过滤”掉不需要的信息,显著提升缺陷检测的准确性。

 

 

2.生成高斯滤波器算子gen_gauss_filter( : ImageGauss : Sigma1Sigma2PhiNormModeWidthHeight : )详解:

功能描述

  • 作用:生成高斯滤波器(或高斯导数滤波器),用于频域或空域滤波。
  • 典型应用
    • 抑制周期性背景纹理(如金属网、织物)
    • 增强微小缺陷(如塑料划痕、电子元件焊点缺陷)
    • 图像平滑去噪(保留边缘)

参数

类型说明工业检测调参建议
ImageGauss 输出对象 生成的高斯滤波器图像 -
Sigma1 实数 X方向的标准差(控制滤波器的横向扩展) 根据目标特征尺寸设置(例:缺陷宽度=20像素 → Sigma1=10)
Sigma2 实数 Y方向的标准差(控制滤波器的纵向扩展) 通常与Sigma1相同(各向同性滤波)
Phi 实数 滤波器的旋转角度(弧度) 0(无旋转)或根据纹理方向设置(如45°=0.785 rad)
Norm 字符串 标准化模式:
'none':不标准化
'n':归一化到单位能量
频域滤波用'none',空域滤波用'n'
Mode 字符串 滤波器模式:
'rft':频域滤波器(复数)
'dc_center':空域滤波器
频域处理必选'rft'
Width 整数 滤波器宽度(需与待处理图像等宽) 通过get_image_size获取原图尺寸
Height 整数 滤波器高度(需与待处理图像等高) 同上


    • (例:划痕宽度6像素 → Sigma=2)

2. Mode='rft'

    • 频域滤波器特性:​必须与图像等尺寸
      • 生成复数滤波器(实部+虚部),直接用于FFT频域乘法
      • 滤波器中心在图像左上角(FFT标准布局)
get_image_size (Image, Width, Height)
gen_gauss_filter(..., Width, Height)

3. Norm='none'

  • 频域滤波不推荐归一化
    • 保持滤波器的绝对强度
    • 避免频域相乘后能量损失

工业应用案例:塑料表面划痕检测

场景描述

  • 问题:塑料件表面有细微划痕,但存在网状纹理背景干扰。
  • 目标:抑制网状纹理,增强划痕特征。

解决方案

  1. 生成带阻高斯滤波器​(抑制特定频率的网状纹理)
  2. 频域滤波后检测缺陷

代码示例

* 1. 读取图像并转换为灰度
read_image (Image, 'plastic_mesh_01.jpg')
rgb1_to_gray (Image, GrayImage)* 2. 获取图像尺寸
get_image_size (GrayImage, Width, Height)* 3. 生成高斯带阻滤波器(抑制网状纹理)
Sigma1 := 25.0  * 抑制低频(对应网状纹理周期50像素)
Sigma2 := 3.0    * 保留高频(划痕特征)
gen_gauss_filter (GaussFilter, Sigma1, Sigma2, 0, 'none', 'rft', Width, Height)* 4. 频域滤波处理
fft_image (GrayImage, ImageFFT)
convol_fft (ImageFFT, GaussFilter, FilteredFFT)
fft_image_inv (FilteredFFT, ImageFiltered)* 5. 检测划痕
threshold (ImageFiltered, Scratches, 50, 255)
dev_display (Scratches)

滤波器效果可视化

* 查看频域滤波器形状
power_real (GaussFilter, PowerSpectrum)
dev_display (PowerSpectrum)  * 显示为中央暗区(抑制低频)+周边亮环(保留高频)

参数调优技巧

1. 确定Sigma值

  • 步骤
    1. 对正常样本做FFT,观察功率谱中的亮斑(背景纹理频率)
    2. 测量亮斑到中心的距离D(像素)
    3. 设置Sigma = D/2

2. 方向性滤波(Phi调整)​

  • 应用场景:当缺陷具有方向性时(如平行划痕)
  • 设置方法
* 检测到划痕方向为60度
Phi := rad(60)  * 转换为弧度
gen_gauss_filter(..., Phi, ...)  * 生成旋转滤波器

3. 多尺度滤波

* 组合不同Sigma值检测多尺寸缺陷
for Sigma := [5, 10, 20] dogen_gauss_filter(..., Sigma, Sigma, ...)convol_fft(...)* 各尺度结果融合
endfor

常见问题解决

Q1:滤波器处理后图像变暗

  • 原因:低频成分被过度抑制。
  • 解决:使用带通滤波(高斯相减):
* 生成两个高斯滤波器相减
gen_gauss_filter (Gauss1, 30, 30, ...)
gen_gauss_filter (Gauss2, 10, 10, ...)
sub_image (Gauss1, Gauss2, BandPassFilter, 1, 0)

Q2:处理后出现振铃效应

  • 原因:滤波器边缘陡峭导致吉布斯现象。
  • 解决:增大Sigma值使滤波器过渡平滑。

Q3:滤波后缺陷丢失

  • 原因:Sigma设置过小导致缺陷频率被滤除。
  • 调试:逐步增大Sigma值,观察频域功率谱变化。

总结

参数调整策略
Sigma1 根据背景纹理周期设置,越大抑制的低频越多
Sigma2 根据缺陷尺寸设置,越小保留的高频细节越多
Phi 沿缺陷方向设置(需先进行方向分析)
Norm 频域滤波始终用'none',空域滤波用'n'
尺寸 必须与输入图像等大(通过get_image_size获取)

通过合理设置高斯滤波器参数,可以有效分离背景纹理与目标缺陷,提升工业视觉检测的准确性和鲁棒性。建议配合power_real可视化频域滤波器特性,进行参数调优验证。

 

 

3.频域卷积算子convol_fft(ImageFFTImageFilter : ImageConvol : : )详解:

功能描述

  • 核心作用:在频域中执行两个图像的卷积运算(等效于空域的滤波操作)。
  • 数学原理:频域卷积 = 频域图像 × 频域滤波器(复数乘法)。
  • 优势:比空域卷积快100倍以上(尤其适合大尺寸滤波器或图像)。

 

参数说明

参数类型说明工业检测注意事项
ImageFFT 输入 经过FFT变换的输入图像(复数形式,实部+虚部) 必须通过fft_image生成
ImageFilter 输入 频域滤波器(需与ImageFFT同尺寸,复数形式) 常用高斯滤波器gen_gauss_filter生成
ImageConvol 输出 卷积结果(复数频域图像) 需逆FFT转换回空间域使用

 

工业应用场景(金属表面划痕检测)​

场景需求

  • 问题:金属板表面有细微划痕,但存在周期性加工纹理(低频背景)。
  • 目标:抑制背景纹理,增强划痕特征。

处理流程

* 1. 读取图像并转换到频域
read_image (Image, 'metal_surface_01.jpg')
rgb1_to_gray (Image, GrayImage)
fft_image (GrayImage, ImageFFT)  * 转换到频域* 2. 生成高通高斯滤波器(增强高频缺陷)
gen_gauss_filter (Filter, 5, 5, 0, 'none', 'rft', Width, Height)* 3. 频域卷积(等效于空域滤波)
convol_fft (ImageFFT, Filter, ImageConvol)* 4. 逆FFT转回空间域
fft_image_inv (ImageConvol, ImageFiltered)* 5. 检测划痕
threshold (ImageFiltered, Scratches, 80, 255)
dev_display (Scratches)

频域卷积效果

  • 输入频谱ImageFFT包含金属纹理(低频中心亮区)+ 划痕(高频边缘)。
  • 滤波器:高通滤波器(中央暗区,周边亮环)。
  • 输出频谱:抑制低频纹理,保留高频划痕信号。

关键参数详解

1. 滤波器设计策略

滤波器类型生成方法适用场景
低通 gen_gauss_filter大Sigma(如30) 抑制高频噪声(如电子元件毛刺)
高通 1 - 低通滤波器 增强边缘/划痕
带阻 高斯1 - 高斯2(不同Sigma) 消除特定频率干扰(如网格纹理)
带通 高斯低通 - 高斯高通 提取特定尺寸特征

2. 性能优化

  • 尺寸匹配:确保ImageFFTImageFilter尺寸相同(通过get_image_size验证)。
  • 预处理加速
optimize_rft_speed (Width, Height, 'standard')  * 自动填充至最优尺寸

典型问题解决方案

问题1:处理后出现振铃伪影

  • 原因:滤波器边缘陡峭导致吉布斯现象。
  • 解决
* 使用渐变高斯滤波器(边缘平滑)
gen_gauss_filter (Filter, 15, 15, 0, 'none', 'rft', Width, Height)

问题2:缺陷信号被过度抑制

  • 现象:阈值分割后缺陷区域消失。
  • 调试步骤
    1. 检查滤波器类型(误用低通会抑制缺陷)。
    2. 可视化功率谱:
power_real (ImageConvol, PowerSpectrum)
dev_display (PowerSpectrum)  * 确认缺陷频率是否保留

与空域卷积的对比

特性频域卷积 (convol_fft)空域卷积 (convol_image)
速度 O(n log n) → 快(大核优势) O(n²m²) → 慢(m为滤波器尺寸)
适用场景 大尺寸滤波器(>15x15) 小尺寸滤波器(<15x15)
内存占用 较高(需存储复数图像) 较低(实数运算)
功能扩展 支持复杂频域操作(如带阻滤波) 限于简单核(高斯、Sobel等)

完整案例代码(织物瑕疵检测)​

dev_update_off ()
read_image (Image, 'fabric_01.jpg')
get_image_size (Image, Width, Height)
optimize_rft_speed (Width, Height, 'standard')  * 尺寸优化* 频域转换
fft_image (Image, ImageFFT)* 设计带阻滤波器(抑制织物纹理)
gen_gauss_filter (LowPass, 40, 40, 0, 'none', 'rft', Width, Height)
gen_gauss_filter (HighPass, 5, 5, 0, 'none', 'rft', Width, Height)
sub_image (LowPass, HighPass, BandStopFilter, 1, 0)* 频域卷积
convol_fft (ImageFFT, BandStopFilter, ImageConvol)* 逆变换与检测
fft_image_inv (ImageConvol, ImageFiltered)
threshold (ImageFiltered, Defects, 70, 255)
connection (Defects, ConnectedRegions)
select_shape (ConnectedRegions, FinalDefects, 'area', '>', 50)

总结

操作要点工业检测意义
正确设计滤波器Sigma值 决定缺陷与背景的分离效果
功率谱可视化调试 快速定位频率干扰源
结合optimize_rft_speed 提升产线实时检测速度(尤其4K以上图像)
频域+空域联合处理 复杂缺陷检测(如同时存在划痕和孔洞)

通过合理使用convol_fft,您可以在半导体、汽车零部件、纺织品等行业中,高效解决复杂背景下的微观缺陷检测难题。

 


4.频域转空间域算子fft_image_inv(Image : ImageFFTInv : : )详解:

功能描述

  • 核心作用:将频域图像(复数形式)逆变换回空间域图像(实数形式)。
  • 数学原理:执行快速傅里叶逆变换(IFFT),恢复滤波后的空域图像。
  • 工业价值:将频域处理结果(如去噪、缺陷增强)转换为可视化的检测图像。

参数说明

参数类型说明工业检测注意事项
Image 输入 频域图像(复数形式,实部+虚部) 必须经过fft_imageconvol_fft处理
ImageFFTInv 输出 逆变换后的空间域图像(实数类型) 需进行后续阈值分割或形态学操作

工业应用场景(半导体晶圆缺陷检测)​

场景需求

  • 问题:晶圆表面存在微小金属残留(高频缺陷),但被电路纹理(低频)干扰。
  • 目标:抑制电路纹理,增强缺陷信号。

处理流程

* 1. 读取图像并转灰度
read_image (Wafer, 'wafer_01.tiff')
rgb1_to_gray (Wafer, GrayWafer)* 2. 优化FFT尺寸
get_image_size (GrayWafer, Width, Height)
optimize_rft_speed (Width, Height, 'standard')* 3. 转换到频域
fft_image (GrayWafer, WaferFFT)* 4. 高通滤波(增强缺陷)
gen_gauss_filter (HighPassFilter, 5, 5, 0, 'none', 'rft', Width, Height)
convol_fft (WaferFFT, HighPassFilter, FilteredFFT)* 5. 逆FFT转回空间域
fft_image_inv (FilteredFFT, ProcessedWafer)  * 关键步骤!* 6. 检测缺陷
threshold (ProcessedWafer, Defects, 120, 255)
dev_display (Defects)

关键参数详解

1. 输入图像要求

  • 必须为复数图像:通过fft_imageconvol_fft生成。
  • 尺寸验证:必须与原图尺寸一致(可通过get_image_size检查)。

2. 输出图像特性

  • 数据类型:输出为实数图像(real类型),值域可能为负。
  • 动态范围调整:建议使用scale_image调整亮度:
scale_image (ProcessedWafer, ScaledImage, 10, 0)  * 放大10倍便于显示

典型问题解决方案

问题1:逆变换后图像全黑

  • 原因:频域滤波器过度抑制所有频率。
  • 调试
* 检查滤波器功率谱
power_real (HighPassFilter, PowerFilter)
dev_display (PowerFilter)  * 应有非零区域

问题2:图像边缘出现振铃伪影

  • 解决
    1. 使用渐变滤波器(如高斯滤波器代替理想滤波器)。
    2. 逆变换前应用窗函数:
multiply_image (FilteredFFT, WindowFunction, FilteredFFT, 1, 0)

问题3:亮度偏移

  • 现象:逆变换后整体亮度异常。
  • 处理
* 重新计算均值并校正
mean_image (ProcessedWafer, MeanImage)
sub_image (ProcessedWafer, MeanImage, CorrectedImage, 1, 0)

完整代码示例(LCD面板检测)​

dev_update_off ()
read_image (LCD, 'lcd_panel_01.png')
get_image_size (LCD, Width, Height)
optimize_rft_speed (Width, Height, 'explore')  * 深度优化* 频域转换与滤波
fft_image (LCD, LCD_FFT)
gen_gauss_filter (BandStop, 50, 50, 0, 'none', 'rft', Width, Height)
convol_fft (LCD_FFT, BandStop, FilteredFFT)* 逆FFT转换
fft_image_inv (FilteredFFT, FilteredLCD)* 增强对比度并检测亮点缺陷
emphasize (FilteredLCD, EnhancedLCD, Width, Height, 1.5)
threshold (EnhancedLCD, Defects, 200, 255)
connection (Defects, ConnectedRegions)
select_shape (ConnectedRegions, FinalDefects, 'circularity', '>', 0.85)

总结

操作步骤工业检测意义参数调整建议
fft_image_inv 将频域处理结果可视化 确保输入为正确滤波后的复数图像
动态范围调整 使缺陷更易观察 使用scale_imageemphasize增强对比度
振铃抑制 提高检测准确性 应用窗函数或渐变滤波器
尺寸优化 提升实时检测速度 必用optimize_rft_speed

通过合理使用fft_image_inv,您可以在电子元件、液晶面板、金属加工等领域,高效还原频域处理结果,实现高精度的缺陷检测。

 

 

 

5.傅里叶变换算子rft_generic(Image : ImageFFT : DirectionNormResultTypeWidth : )详解:

 

功能描述

  • 核心作用:执行灵活的傅里叶变换(FFT)或实傅里叶变换(RFT),支持多种输入输出模式和参数配置。
  • 优势:比fft_image更灵活,可控制变换方向、归一化方式及窗函数。
  • 工业应用:适用于需要精细控制频域处理的场景,如复杂纹理抑制、微小缺陷增强。

参数说明

参数类型说明工业检测推荐值
Image 输入 输入图像(实数类型) 需为单通道灰度图(byte/real
ImageFFT 输出 频域图像(复数或实数形式) 根据ResultType选择输出类型
Direction 字符串 变换方向:
'to_freq'(空域→频域)
'from_freq'(频域→空域)
'to_freq'(正向变换)
Norm 字符串 归一化方式:
'none'(无)
'sqrt'(平方根)
'n'(单位能量)
频域滤波用'none',分析用'n'
ResultType 字符串 输出类型:
'complex'(复数)
'real'(实数)
滤波操作选'complex',功率谱分析选'real'
Width 整数 图像宽度(需与输入图像一致) 通过get_image_size获取

 

 

关键参数详解

1. Direction(变换方向)​

模式使用场景
'to_freq' 空域→频域,用于滤波、频率分析(95%工业应用场景)
'from_freq' 频域→空域,恢复处理后的图像(需与'to_freq'成对使用)

2. Norm(归一化方式)​

模式数学公式适用场景
'none' 无缩放 频域滤波(保持能量不变)
'sqrt' 输出值乘以1/√N 图像重建(防止能量溢出)
'n' 输出值乘以1/N 频谱分析(确保能量守恒)

3. ResultType(输出类型)​

类型数据格式典型应用
'complex' 复数(实部+虚部) 频域滤波、相位分析
'real' 实数(幅度或实部) 功率谱可视化、简单频域操作

窗函数(Window)的作用与选择

常用窗函数类型

窗函数特性适用场景
'none' 矩形窗(无衰减) 快速检测,边缘信息重要时
'hann' 平滑衰减,减少频谱泄漏 大多数工业检测(推荐默认)
'hamming' 类似Hann,但首尾不归零 需要更高频率分辨率时

选择建议

  • 缺陷检测:优先使用'hann'窗,平衡频谱泄漏抑制和边缘保留。
  • 尺寸测量:使用'none'窗避免边缘模糊。

 


总结

参数/操作工业检测最佳实践
Direction 'to_freq'用于滤波,'from_freq'用于重建
Norm 滤波用'none',分析用'n'
Window 默认'hann',边缘敏感场景用'none'
ResultType 滤波操作选'complex',简单分析选'real'
性能优化 必用optimize_rft_speed,大图启用多线程

通过合理配置rft_generic参数,您可以在半导体、汽车零部件、纺织品等行业的复杂检测场景中,高效实现背景纹理抑制与微小缺陷增强,提升检测系统的准确性和鲁棒性。

 

 

 

接下来看一些实战案例,基本都在halcon的程序集里

 

示例1:塑料表面纹理缺陷检测程序(基于频域分析)

 

 

两张原图:

这张有个小点 看出来没?

 

 

 

实例代码:

* ​*************************************************************
* 塑料表面纹理缺陷检测程序(基于频域分析)
* 检测原理:
*   1. 构造高斯带阻滤波器消除正常纹理
*   2. FFT频域卷积增强缺陷特征
*   3. 形态学处理定位异常区域
* 工业应用:注塑件表面质量检测
* 支持文件格式:BMP格式工业图像(推荐8bit灰度)
* 硬件要求:500万像素以上工业相机,同轴照明系统
* 检测精度:最小缺陷检测尺寸0.1mm²(200dpi下约4像素)
* ​************************************************************** ​*************** 检测流程示意图 ​***************
* 原始图像 
* → FFT频域变换(使用优化算法加速)
* → 高斯带阻滤波(抑制背景纹理)
* → 逆FFT变换(获取滤波后图像)
* → 局部对比度增强(突出缺陷边缘)
* → 动态阈值分割(自适应亮度变化)
* → 形态学优化(去噪+区域合并)
* → 缺陷标记与结果输出* ​*************** 系统初始化模块 ​***************
* 关闭窗口自动更新(提升大图像处理时的执行效率)
dev_update_off ()
* 清理可能存在的残留窗口
dev_close_window ()
* 加载基准图像(用于获取系统参数)
read_image (Image, 'plastics/plastics_01')
* 获取图像尺寸参数(用于窗口创建和滤波器设计)
get_image_size (Image, Width, Height)
* 创建与图像等大的显示窗口(黑色背景利于缺陷观察)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
* 配置显示字体(等宽字体确保字符对齐,14号字适合1080P显示)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
* 设置绘制模式为轮廓显示(节省GPU显存资源)
dev_set_draw ('margin')
* 设置轮廓线宽(3像素宽度确保缺陷标记明显可见)
dev_set_line_width (3)
* 设置默认报警颜色为红色(符合工业标准报警色)
dev_set_color ('red')* ​*************** FFT性能优化模块 ​***************
* 根据特定图像尺寸优化FFT计算(选择最优的FFT算法实现)
* 参数说明:
*   'standard' - 平衡模式(兼顾速度和内存使用)
*   其他可选模式:'explore'深度优化(耗时)/'estimate'快速估算
optimize_rft_speed (Width, Height, 'standard')* ​*************** 滤波器设计模块 ​***************
* 构建复合高斯带阻滤波器(消除周期性背景纹理)
* Sigma1: 低频截止参数(控制背景纹理抑制范围)
*   - 推荐值 = 正常纹理周期/2(例如纹理间隔20像素则设10)
*   - 当前值10.0适用于0.5mm间距网格纹理(200dpi下)
Sigma1 := 10.0
* Sigma2: 高频截止参数(控制缺陷特征保留范围)
*   - 推荐值 = 最小缺陷尺寸/2(例如6像素缺陷设3.0*   - 当前值3.0对应0.3mm²微小缺陷检测
Sigma2 := 3.0
* 生成低频抑制高斯滤波器(大σ值滤波器)
* 参数说明:
*   GaussFilter1 - 输出滤波器对象
*   10.0 - X方向σ值(与Sigma1对应)
*   10.0 - Y方向σ值(各向同性滤波)
*   0.0 - 滤波器旋转角度(0度表示无旋转)
*   'none' - 无标准化
*   'rft' - 频域滤波器类型
*   Width, Height - 滤波器尺寸(必须与图像一致)
gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft', Width, Height)
* 生成高频保留高斯滤波器(小σ值滤波器)
gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft', Width, Height)
* 合成带阻滤波器(Gauss1 - Gauss2)
* 效果:抑制低频(背景纹理)同时保留高频(缺陷)
* 参数说明:
*   1 - 缩放因子(保持滤波器强度范围)
*   0 - 偏移量(不做亮度调整)
sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0)* ​*************** 主检测流程模块 ​***************
* 定义检测图像数量(支持批量处理)
NumImages := 2
* 开始多图像批处理循环
for Index := 1 to NumImages by 1* ​*************** 图像采集与预处理模块 ​**************** 读取当前检测图像(支持序列号补零命名格式)* 文件名示例:plastics_01.bmp, plastics_02.bmp...read_image (Image, 'plastics_' + Index+'.bmp')* 转换为灰度图像(兼容彩色相机输入)* 注意:使用rgb1_to_gray保持亮度线性转换rgb1_to_gray (Image, Image)* ​*************** 频域处理模块 ​**************** 执行FFT正变换(空间域→频域)* 参数说明:*   'to_freq' - 正变换方向*   'none' - 不进行窗函数处理*   'complex' - 输出复数格式频域数据rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)* 频域卷积运算(应用预设计滤波器)* 原理:F(f*h) = F(f)·F(h)(频域乘法等效空域卷积)convol_fft (ImageFFT, Filter, ImageConvol)* 执行FFT逆变换(频域→空间域)* 参数说明:*   'from_freq' - 逆变换方向*   'n' - 无标准化(保持动态范围)*   'real' - 输出实数图像rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)* ​*************** 后处理与缺陷提取模块 ​**************** 计算局部灰度范围(增强缺陷对比度)* 参数说明:*   10x10邻域窗口(需大于缺陷尺寸)*   效果:突出缺陷边缘与纹理异常gray_range_rect (ImageFiltered, ImageResult, 10, 10)* 计算图像灰度极值(用于动态阈值设定)* 参数说明:*   0 - 忽略边界像素(避免边缘效应影响)min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)* 动态阈值分割(双阈值保护机制)* 阈值逻辑:取固定阈值5.55和最大值的80%中较大者* 设计目的:既防止低对比度缺陷漏检,又避免噪声干扰threshold (ImageResult, RegionDynThresh, max([5.55,Max * 0.8]), 255)* 连通域分析(分离独立缺陷区域)connection (RegionDynThresh, ConnectedRegions)* 初级面积筛选(过滤4像素以下噪声)select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 4, 99999)* 区域合并(防止同一缺陷被分割为多个区域)union1 (SelectedRegions, RegionUnion)* 闭运算处理(填充微小孔洞,平滑缺陷边缘)* 参数说明:*   10像素结构元(确保相邻缺陷合并)closing_circle (RegionUnion, RegionClosing, 10)* 二次连通域分析connection (RegionClosing, ConnectedRegions1)* 最终面积筛选(确认有效缺陷区域)select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999)* 计算缺陷质心坐标(为后续定位提供数据)area_center (SelectedRegions1, Area, Row, Column)* ​*************** 可视化与结果输出模块 ​**************** 显示原始图像(保持背景参考)dev_display (Image)* 统计缺陷数量Number := |Area|* 生成缺陷标记图形(30像素半径红色圆圈)if (Number)* 创建圆形轮廓对象(XLD格式)* 参数说明:*   30 - 圆环半径(根据缺陷尺寸调整)*   0 - 起始角度(完整圆环)*   rad(360) - 结束角度*   'positive' - 顺时针方向*   1 - 相邻点间距(高分辨率绘制)gen_circle_contour_xld (ContCircle, Row, Column, gen_tuple_const(Number,30), gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)), 'positive', 1)* 构造报警信息(显示缺陷数量)ResultMessage := ['Not OK',Number + ' defect(s) found']Color := ['red', 'black']  * 多颜色信息显示dev_display (ContCircle)else* 合格品显示绿色OK标识ResultMessage := 'OK'Color := 'forest green'  * 工业标准通过色endif* 在图像左上角显示检测结果(坐标12,12避开检测区域)disp_message (WindowHandle, ResultMessage, 'window', 12, 12, Color, 'true')* 非最后一张时显示继续提示(模拟产线节拍控制)if (Index != NumImages)* 显示标准继续提示(底部右对齐)disp_continue_message (WindowHandle, 'black', 'true')stop ()  * 暂停等待操作员确认endif
endfor* ​*************** 参数说明表(供工程调试参考) ​***************
* | 参数                  | 作用                                   | 工业调参建议               |
* |-----------------------|----------------------------------------|--------------------------|
* | Sigma1=10.0          | 控制背景纹理抑制范围                   | 根据正常纹理周期调整       |
* |                       | 公式:Sigma1 ≈ 纹理周期/2              | 使用FFT频谱分析确定周期    |
* | Sigma2=3.0           | 控制缺陷特征保留范围                   | 根据最小缺陷尺寸调整       |
* |                       | 公式:Sigma2 ≈ 最小缺陷半径             | 需考虑点扩散函数影响       |
* | gray_range_rect(10,10)| 局部对比度增强窗口                     | 窗口尺寸=2×缺陷直径        |
* | threshold(5.55/0.8Max)| 动态双阈值机制                         | 5.55对应3σ噪声水平(8bit) |
* | closing_circle(10)    | 缺陷区域平滑参数                       | 结构元直径=允许缺陷间距     |

 

 

结果图:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

未完待续。。。。。。。。。。。。

 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

万字长文详解SIFT特征提取

本文对 SIFT 算法进行了详细梳理。SIFT即尺度不变特征变换(Scale-Invariant Feature Transform),是一种用于检测和描述图像局部特征的算法。该算法对图像的尺度和旋转具有不变性,并且在一定程度上能够抵御亮度变化和视角变化,具备较强的鲁棒性。此外,SIFT检测流程还提出了…

记录---学习项目如何用Docker部署

🧑‍💻 写在开头 点赞 + 收藏 === 学会🤣🤣🤣 写在前面 Docker对比传统虚拟机 Docker 是个划时代的开源项目,它彻底释放了计算虚拟化的威力,极大提高了应用的维护效率,降低了云计算应用开发的成本!使用 Docker,可以让应用的部署、测试和分发都变得前所未有的高效…

龙信年终技术考核wp

龙信年终技术考核wp 容器密码:MjAyNeWKoOayuQ== 假期里打的第一场取证比赛,一开始名次还挺高,后面服务器不太会做了,排名直接狂掉,获奖的名额太少了。其实上学期打的第一场取证也是龙信办的龙信杯,真的好难,还是这个友好。 1. 分析手机备份文件,该机主的QQ号为?(标准格…

规则系统|第二步 连接数据库

1.输出所有的数据库名2.问一下相关负责人这个需求放到哪个库里ssc: {ENGINE: django.db.backends.mysql, NAME: ssc, USER: star, PASSWORD: dpag5BoORZErhu4ttTju, HOST: 122.5.32.82, PORT: 19336} 3.下载dbeaver,连接相关库 4.用dbeaver手动创建需要的表,这里需要的表如下…

Excel甘特图

背景:领导让我在excel上填项目计划, 也就是分配未来的工时。有名称、开始时间、结束时间等。平时业务挺杂的, 其实没有办法准确的填写连贯的工时计划。需要稍微调整一下。甘特图比较直观, 但是MSProject又太大没装,还要收费。上网搜了一下还真有用wps office做的。 wps本身…

JMeter 一站式安装指南:跨平台详解与常见问题解析

前言 本教程为 macOS 与 Windows 用户提供 安全、高效 的 JMeter 安装方案,涵盖从基础安装到进阶配置的全流程。内容包含:✅ 双平台专属指南:针对 macOS 系统优化下载路径(附国内镜像直链),解决“身份不明开发者”警告;Windows 系统提供官方直装与快捷方式配置技巧。✅ …

基于Qt信号槽机制的AI对话工具开发——使用流式输出且支持Function Call

基于Qt信号槽机制的AI对话工具开发 在前面学习了Qt的Http请求,尝试完成了基于Qt界面调用DeepSeek的API,实现了一些基本功能,如记忆对话,流式输出等 点击这里查看 但是我发现内容多了过后代码过于冗杂,层次不清晰,于是打算重新架构一下,并记录一下开发思路 完整源码可以在…

中企出海财务合规难?交给「云+AI」来破局|SAP ERP海外实施商工博科技

2月20日,SAP全球化运营高峰论坛汇聚超1000位出海企业高管和行业专家,共同探讨中国企业在行业多样化、投资模式多元、全球布局因地制宜的全球化新趋势下面临的出海机遇与挑战。这次我们将从合规风险、供应链韧性、人才管理、IT架构、AI赋能等角度进行复盘回顾,探讨如何依托先…

乒乓球比赛

题目:乒乓球比赛(武汉大学机试真题):甲={a,b,c}、乙={x,y,z}两队进行比赛,一直a不和x比,c不和x和z比,请问所有可能的比赛安排 //应该使用全排列 列出所有的比赛结果,再输出满足要求的对局 //但还有一种取巧的方法实现 使用库函数next_Permutation(nums.begin(),nums.end(…

华为开辟的赛道,终究也只有华为敢跑起来

3月20日,华为Pura先锋盛典召开。一部被称为阔折叠的华为Pura X正式亮相。之前外界对这款新品有诸多猜想,今天终于揭开了神秘面纱:这是一部看上去不太像手机的手机,很宽很“阔”。全新形态的产品打破了人们对手机的刻板印象,也给了手机未来更多的想象。同时作为首款全面搭载…

RANSAC---从直线拟合到特征匹配去噪

Ransac全称为Random Sample Consensus,随机一致性采样。该方法是一种十分高效的数据拟合方法。我们通过最简单的拟合直线任务来了解这种方法思路,继而扩展到特征点匹配中的误点剔除问题。 (注意,RANSAC不是直接用于特征点匹配,而是一种在初步特征匹配后消除误匹配的方法)…

3.19 CW 模拟赛 赛时记录

前言 还是那几句话 冷静, 耐心, 放下, 不浮躁 不贪跟策略, 数据检验, 关键步记录 看题 \(\rm{T1}\) 逆向思维一下就是加点, 然而事实上应该比较好做 \(\rm{T2}\) 还挺有礼貌, 但是这种题放到后面一点吧 \(\rm{T3}\) 这个题可以尝试一下, 多半是最优解性质的题 \(\rm{T4}\) 更是…