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

Halcon 常用算子总结

文章目录

  • ScaleImageMax——将图像拉伸到0-255之间
  • ScaleImage——自定义灰度值拉伸
  • MinMaxGray——获取图像灰度值范围
  • PowImage——幂运算
  • GammaImage——伽马校正
  • Emphasize——高通滤波器强调边缘
  • GaussImage——高斯滤波平滑降噪


ScaleImageMax——将图像拉伸到0-255之间

// Maximum gray value spreading in the value range 0 to 255.
void ScaleImageMax(const HObject& Image, HObject* ImageScaleMax);
HalconCpp::ScaleImageMax(ho_dst, &ho_dst);

该函数会自动计算输入图像的最大和最小灰度值,并将灰度值线性映射到 0 ~ 255(对于 byte 类型图像)或者 0.0 ~ 1.0(对于 real 类型图像),从而使得图像的对比度最大化。具体来说:

  • 如果图像是 byte 类型,则输出范围是 [0, 255]
  • 如果图像是 real 类型,则输出范围是 [0.0, 1.0]

在这里插入图片描述

ScaleImage——自定义灰度值拉伸

// Scale the gray values of an image.
void ScaleImage(const HObject& Image, HObject* ImageScaled, const HTuple& Mult, const HTuple& Add);

scale_image 算子允许用户手动指定一个缩放因子(Mult)和一个偏移量(Add),然后将输入图像的每个像素点的灰度值乘以该缩放因子并加上偏移量。它提供了对缩放过程更精细的控制。

在这里插入图片描述

MinMaxGray——获取图像灰度值范围

计算图像中指定区域(domain)的最小灰度值、最大灰度值以及灰度值的范围。这个算子对于分析图像的灰度分布特别有用,可以用来了解图像或其特定部分的亮度变化情况。

// Determine the minimum and maximum gray values within regions.
void MinMaxGray(const HObject& Regions, const HObject& Image, const HTuple& Percent, HTuple* Min, HTuple* Max, HTuple* Range);
  • Regions (input_object): 需要计算最小和最大灰度值的区域。这通常是从原图中提取出来的感兴趣区域(ROI)。
  • Image (input_object): 输入图像,可以是单通道图像。
  • Percent (input_control): 可选项。它定义了计算最小和最大灰度值时忽略的边界像素的百分比。默认情况下,这个值为0,意味着不会忽略任何像素。通过设置这个参数,可以在一定程度上减少噪声对结果的影响。
  • Min (output_control): 计算出的最小灰度值。
  • Max (output_control): 计算出的最大灰度值。
  • Range (output_control): 灰度值的范围,即最大灰度值与最小灰度值之差(Max - Min)。

PowImage——幂运算

对图像的每个像素的灰度值进行幂运算。该操作可以用于多种图像处理任务中,比如调整对比度、亮度校正或其他需要非线性变换的场景。

// Raise an image to a power.
void PowImage(const HObject& Image, HObject* PowImage, const HTuple& Exponent);
  • Image (input_object): 输入图像,通常是一个单通道图像(如灰度图像)。
  • ImagePow (output_object): 输出图像,即经过幂运算后的图像。
  • Exponent (input_control): 幂运算的指数值。这个参数决定了将输入图像的每个像素的灰度值提升到多少次幂。

在这里插入图片描述

使用场景

  • 对比度调整:通过选择不同的指数值,可以增强或减弱图像的对比度。当指数大于1时,较亮的区域变得更亮,而较暗的区域变得更暗;当指数小于1但大于0时,则会产生相反的效果,降低对比度。
  • 亮度校正:在某些情况下,可能需要对图像进行非线性亮度校正,这时也可以使用 pow_image

GammaImage——伽马校正

gamma_image 算子用于对图像应用伽马校正(Gamma Correction)。伽马校正是图像处理中一种非线性的色调调整方法,常用于调整图像的亮度和对比度,特别是在显示设备或图像传感器的输入输出特性不是线性的情况下。通过伽马校正可以改善图像的整体视觉效果,使得图像在不同的显示设备上看起来更加自然。

// Perform a gamma encoding or decoding of an image.
void GammaImage(const HObject& Image, HObject* GammaImage, const HTuple& Gamma);// C++库中的重载版本,提供了更多精细控制
void GammaImage(const HObject& Image, HObject* GammaImage, const HTuple& Gamma, const HTuple& Offset, const HTuple& Threshold, const HTuple& MaxGray, const HTuple& Encode);
  • Image (input_object):输入图像,通常为单通道灰度图像或者多通道彩色图像。
  • ImageGamma (output_object):应用伽马校正后的输出图像。
  • Gamma (input_control):伽马值(γ),决定了校正曲线的形状。
    • 大于1时(如 0.1 ~ 0.9),图像整体变暗,增强亮区域对比度,适用于过曝光图像。
    • 等于1时,不进行伽马校正,输出图像与输入相同。
    • 小于1时(如 1.1 ~ 5.0),图像整体变亮,提升暗区域细节,适用于欠曝光图像。
  • Offset (input_control):偏移量,加在输入像素值上,用于调整图像亮度。通常为0。
  • Threshold (input_control):阈值,低于该值的像素将被设为0(可选功能,取决于具体实现)。
  • MaxGray (input_control):指定输出图像的最大灰度值,默认为255(适用于 byte 图像)或1.0(real 图像)。
  • Encode (input_control):编码方式,决定如何执行伽马映射。常见取值如下:'linear''srgb''powerlaw'(默认)

Emphasize——高通滤波器强调边缘

emphasize 算子主要用于突出图像中的边缘或细节信息。它通过使用一个特定的卷积核(滤波器)来增强图像的局部对比度,使图像看起来更加清晰锐利。

// Enhance contrast of the image.
void Emphasize(const HObject& Image, HObject* ImageEmphasize, const HTuple& MaskWidth, const HTuple& MaskHeight, const HTuple& Factor);
  • Image input_object 输入图像,可以是灰度图或多通道图像
  • ImageEmphasize output_object 增强后的输出图像
  • MaskHeight input_control 滤波器的高度(行数),必须为奇数(如 3、5、7)值越大,边缘检测范围越广,但可能引入噪声
  • MaskWidth input_control 滤波器的宽度(列数),也必须为奇数
  • Factor input_control 强化系数,控制增强效果的强度。值越大越锐利,但也可能放大噪声
    • 值为0时,输出图像等于原图
    • 值大于0时,越大边缘增强效果越明显
    • 较大的值会放大图像中的噪声。因此,在对含有较多噪声的图像进行增强之前,建议先使用平滑滤波器(如 mean_imagegauss_filter)减少噪声。

在这里插入图片描述

GaussImage——高斯滤波平滑降噪

高斯滤波是一种线性平滑滤波器,能有效去除图像中的高斯噪声(Gaussian noise)。

// Smooth an image using discrete Gaussian functions.
void GaussImage(const HObject& Image, HObject* ImageGauss, const HTuple& Size);// Smooth using discrete gauss functions.
void GaussFilter(const HObject& Image, HObject* ImageGauss, const HTuple& Size);
  • Size input_control 高斯滤波器的卷积核大小(即窗口大小),必须为奇数(如 3, 5, 7, 9…)

示例:高斯卷积核

1  4  6  4  1
4 16 24 16  4
6 24 36 24  6
4 16 24 16  4
1  4  6  4  1

其他降噪算子:

  • mean_image 均值滤波,快速平滑图像,去除高斯噪声
  • median_image 中值滤波,去除椒盐噪声,保护边缘,不引入额外模糊

相关文章:

  • 基于 SpringBoot 实现一个 JAVA 代理 HTTP / WS
  • MyBatis实战指南(八)MyBatis日志
  • 热传导方程能量分析与边界条件研究
  • HarmonyOS实战:自定义表情键盘
  • < OS 有关 4 台 Ubuntu VPSs 正在被攻击:nginx 之三> 记录、分析、防护的过程 配置 ufw Fail2Ban 保护网络上的主机
  • 个人计算机系统安全、网络安全、数字加密与认证
  • Github 2025-06-29php开源项目日报 Top10
  • RK3588集群服务器性能优化案例:电网巡检集群、云手机集群、工业质检集群
  • Mac电脑手动安装原版Stable Diffusion,开启本地API调用生成图片
  • 基于云的平板挠度模拟:动画与建模-AI云计算数值分析和代码验证
  • Linux中部署Nacos保姆级教程
  • Wpf布局之WrapPanel面板!
  • Java面试宝典:基础二
  • JSON + 存储过程:SaaS 架构下的统一接口与租户定制之道
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 19(题目+回答)
  • OpenCV读取照片和可视化详解和代码示例
  • Java 数据结构 泛型
  • Hive SQL 快速入门指南
  • 线性相关和线性无关
  • 【记录】服务器多用户共享Conda环境——Ubuntu24.04