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 (频域卷积)

  • 频域图像 × 高斯核 = 滤波后的频域图像
相关推荐
我星期八休息31 分钟前
网络编程—网络层
开发语言·前端·网络·人工智能·智能路由器
逻辑君1 小时前
ANNA 7.2 方块机器人实验技术报告
人工智能·深度学习·机器学习·机器人
菜鸟‍1 小时前
【论文学习】Medical Image Analysis 2024 || 医学图像分割中失败检测方法的比较基准研究:揭示置信度聚合的作用
人工智能·学习
AI导出鸭1 小时前
怎么让千问做表格?AI导出鸭苹果版将千问输出的管道表格智能解析为二维结构,一键导出为Excel或Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
陈嘿萌1 小时前
ECCV 2026 | 南开&OPPO开源 ExpoMotion:首个大规模动态多曝光融合数据集
人工智能·计算机视觉·图像融合·南开大学·新数据集·expomotion·多曝光融合
zyplayer-doc1 小时前
zyplayer-doc企业知识库能做什么:从文档创建、权限管理到AI问答的完整能力
大数据·javascript·数据库·人工智能·pdf·word
IT_陈寒1 小时前
为什么我的Java Stream流操作会吃掉内存?
前端·人工智能·后端
babe小鑫2 小时前
人工智能专业方向梳理的实用清单
人工智能
今天AI了吗2 小时前
精细化落地教程:TimechoAI调参标准+数据清洗规范+误差归因+阈值适配全维度指南
大数据·人工智能·算法
阿文和她的Key2 小时前
DeepSeek API 涨价背后的三层供给瓶颈
人工智能·ai