Halcon图像处理:筛选、降噪与增强全解析

1.区域筛选与排序

  1. select_shape (Regions, Selected, 'circularity', 'and', min, max)

    • 作用:根据形状特征筛选区域
    • 参数:
      • 'circularity':圆形度
      • 0.76~1:只保留圆形度高的区域
  2. sort_region (Regions, Sorted, 'first_point', 'true', 'column')

    • 作用:区域排序
    • 参数:
      • 'first_point':按第一个点排序
      • 'true':升序
      • 'column':按 ** 列(左右)** 排序

2.直方图

获取灰度直方图

*AbsoluteHisto 绝对分布 值是像素个数,索引值是0-255

*RelativeHisto 相对分布 值是百分比 索引值是0-255灰度值范围

gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)

count:=AbsoluteHisto10//获取对应的灰度值的个数

count1:=RelativeHisto10

获取灰度值的范围

min_max_gray (Image, Image, 0, Min, Max, Range)

gen_region_histo(Region,AbsoluteHisto, 255, 255, 1)

直方图均衡化的操作 把灰度值平均化

equ_histo_image (Image, ImageEquHisto)

噪声 + 滤波

1. 噪声相关算子

gauss_distribution (Size, Distribution)

  • 作用:创建高斯噪声分布
  • 参数 1:50 → 噪声强度,值越大噪声越多
  • 参数 2:Distribution → 输出噪声模型

add_noise_distribution (Image, ImageNoise, Distribution)

  • 作用:把噪声加到图片上
  • 参数 1:输入图像
  • 参数 2:输出带噪声图像
  • 参数 3:噪声模型(高斯 / 椒盐)

sp_distribution (Percent1, Percent2, Distribution1)

  • 作用:创建椒盐噪声(黑白点噪声)
  • 参数 1:10 → 椒噪声(黑点)百分比
  • 参数 2:10 → 盐噪声(白点)百分比
  • 参数 3:输出噪声模型

2. 滤波去噪算子

mean_image (Image, ImageMean, MaskWidth, MaskHeight)

  • 作用:均值滤波(模糊、去高斯噪声)
  • 参数 3、4:3,3 → 滤波核大小(必须奇数)
  • 特点:去高斯噪声好用,但会模糊边缘

median_image (Image, ImageMedian, MaskType, Radius, Border)

  • 作用:中值滤波(专门消除椒盐噪声)
  • 参数 3:'circle' → 滤波核形状(圆形 / 矩形)
  • 参数 4:3 → 核半径
  • 参数 5:'cyclic' → 边界处理方式
    • 'cyclic':循环边界(对面像素)
    • 'mirrored':镜像边界(复制周边)

图像增强 + 频域 / 空域 + 高斯滤波(Halcon)

一、空间域法(空域)

**空间域法:**包含图像像素的空间,在空间域中,直接对图像进行各种线性或非线性运算,对图像的像素灰度做增强处理。

分类:

  1. 点运算作用于单个像素,包括:灰度变换、直方图修正、伪彩色增强等。
  2. 模板处理作用于像素邻域,包括:图像平滑、图像锐化等。

二、频域法

**频域法:**在图像的变换域中把图像看作一种二维信号,对其进行基于二维傅里叶变换的信号增强。

常用方法:

  • 低通滤波
  • 高通滤波
  • 同态滤波

三、使用高斯滤波的过程(基于傅里叶变换)

步骤:

  1. 创建高斯核
  2. 傅里叶变换,将空域 → 频域
  3. 在频域下执行高斯滤波
  4. 逆傅里叶变换,将频域 → 空域

四、Halcon 代码实现

halcon

复制代码
* 读取图像
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_display (Image)

* 添加高斯噪声
gauss_distribution (100, Distribution)
add_noise_distribution (Image, ImageNoise, Distribution)
dev_display (ImageNoise)

*=============================
* 1 创建高斯滤波核
*=============================
* 参数1:输出高斯滤波图
* 参数2:水平方向平滑程度
* 参数3:竖直方向平滑程度
* 参数4:滤波核角度
* 参数5:归一化方式 'n'=归一化
* 参数6:'rft' 从中心向外发散
* 参数7、8:生成图像宽高
gen_gauss_filter (ImageGauss, 1, 1, 0, 'n', 'rft', Width, Height)

*=============================
* 2 傅里叶变换:空域 → 频域
*=============================
* 'to_freq' = 正向变换
* 'none' = 不做额外处理
* 'complex' = 输出复数格式
rft_generic (ImageNoise, ImageFFT, 'to_freq', 'none', 'complex', Width)

*=============================
* 3 频域滤波(卷积)
*=============================
convol_fft (ImageFFT, ImageGauss, ImageConvol)

*=============================
* 4 逆变换:频域 → 空域
*=============================
rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)

dev_display (ImageFFT1)

五、算子与参数总结

gen_gauss_filter (高斯滤波核)

  • ImageGauss:输出高斯核图像
  • 1,1:水平 / 竖直平滑程度(越大越模糊)
  • 0:核的方向角度
  • 'n':归一化(推荐开启)
  • 'rft':核分布方式
  • Width, Height:图像尺寸

rft_generic (傅里叶变换)

  • 'to_freq'空域 → 频域
  • 'from_freq'频域 → 空域
  • 'none':不对结果做缩放
  • 'complex':复数格式(频域专用)

convol_fft (频域卷积)

  • 频域图像 × 高斯核 = 滤波后的频域图像
相关推荐
WooaiJava15 小时前
即将到达的AI时代——Claude Code
人工智能
风落无尘15 小时前
第十章《多模态与具身》 完整学习资料
人工智能·语言模型·aigc
欧雷殿15 小时前
从「吸引子引导工程」看我的「一人公司」实践
前端·人工智能·后端
tedcloud12315 小时前
DBX部署教程:打造支持AI SQL助手的数据库管理环境
数据库·人工智能·sql
imbackneverdie16 小时前
深耕医学科研智能化十年,MedPeer打造新一代AI生物医学科研操作系统
大数据·人工智能·ai·信息可视化·数据分析·aigc·科研
AI程序员16 小时前
Claude Code Dynamic workflows:AI 编程正在从“助手”走向“工程编排”
人工智能
赵我说的做_life16 小时前
OpenClaw Agent 改配置导致 assistant turn failed 故障排查与修复
人工智能
意图共鸣16 小时前
意图共鸣科技发布《认知智能白皮书》:AI认知架构(CA)与认知操作系统(COS)——为什么大模型之外还需要一层认知调度层,技术原理与架构设想
人工智能·科技·架构
Jmayday16 小时前
NLP第四章:Transformer架构
人工智能·自然语言处理·transformer