Halcon图像预处理算子 sobel算子、傅里叶变换算子、卷积算子

ops/2025/3/4 10:59:54/


滤波类型算子适用噪声特点
均值滤波mean_image高斯噪声平滑均匀,可能额模糊边缘
中值滤波median_image椒盐噪声保留边缘,抑制脉冲噪声
高斯滤波gauss_filter高斯噪声加权平均,边缘更平滑

均值滤波

mean_image(Image,ImageMean,MaskWidth,MaskHeight)

优点: 对图像内部的噪声及模糊有着很好的作用,有效的平滑图像,适用于处理高斯噪声

缺点:会将图像的边缘信息与特征信息“模糊”点,丢失很多特征

  • Image: 输入图像
  • ImageMean: 滤波后的图像
  • MaskWidth,MaskHeight: 滤波核的宽度和高度

注意:MaskWidth和MaskHeight 必须是奇数,核越大,平滑效果就越强,细节损失也大

使用5*5的卷积核,适合去除较大噪声

read_image (Image, 'F:/素材收集/图片素材/01.jpg')
get_image_size (Image, Width, Height)* 获得一个高斯噪声分布,添加到图像
gauss_distribution (20, Distribution)
add_noise_distribution (Image, ImageNoise, Distribution)mean_image (ImageNoise, ImageMean, 9, 9)
dev_open_window (0, 0, 254, 252, 'black', WindowHandle)
dev_display (Image)

效果

 

 中值滤波

优点对脉冲噪声核椒盐噪声有很好的去除效果

          能够有效的保护图像的边缘信息

median_image(Image,ImageMedian,MaskType,Radius,Margin)
  • Image: 输入图像
  • ImageMedian: 滤波后的图像
  • MaskType: 滤波掩模形状   'circle':     'square' 
  • Radius : 滤波掩模的半径(像素)  Raius=2  表示圆形掩模直径为5     (2*2+1)
  • Margin: 边界处理方式   常用有'mirrored'、'cyclic'、'continued'等
read_image (Image, 'F:/素材收集/图片素材/01.jpg')
get_image_size (Image, Width, Height)* 添加椒盐噪声
sp_distribution (5, 5, Distribution)
add_noise_distribution (Image, ImageNoise, Distribution)*使用中值滤波
median_image (ImageNoise, ImageMedian, 'square', 3, 'mirrored')
median_image (ImageNoise, ImageMedian, 'square', 5, 'mirrored')dev_open_window (0, 0, 254, 252, 'black', WindowHandle)
dev_display (ImageMedian)

 效果

高斯滤波

gauss_filter (Image,ImageGauss,Size)
  •  Image: 输入的图像

  • ImageGauss:  输出的图像

  • Size: 滤波的尺寸.尺寸值越大,平滑效果越明显.常用的尺寸有3,5,7,9等奇数值

 优势: 消除高斯噪声

read_image (Image, 'F:/素材收集/图片素材/01.jpg')
get_image_size (Image, Width, Height)* 添加高斯噪声
gauss_distribution (20, Distribution)
add_noise_distribution (Image, ImageNoise, Distribution)*使用高斯滤波
gauss_filter (Image, ImageGauss, 5)
dev_open_window (0, 0, 254, 252, 'black', WindowHandle)
dev_display (ImageGauss)

效果 


 直方图均衡

equ_histo_image(Image,ImageEquHisto)

 优点:用于增强图像

 缺点:直方图均衡可能放大噪声,建议进行降噪处理


* 直方图均衡化* 将密集的灰度值拉开一定的距离
* 作用: 使有蒙层的图像 马赛克 ... 图像变得更清晰
read_image (Image, 'F:/Halcon/‫Image/2.tif')
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)* 直方图均衡化
equ_histo_image (Image, ImageEquHisto)

效果

灰度直方图

相比于Visionpro 中的 histogram  直接生成直方图对象(Region类型),适合可视化

gray_histo(Region,Image,AbsoluteHisto,RelativeHisto)
  • Region: 感兴趣区域(ROI),限定统计范围
  • Image: 输入图像(单通道灰度图)
  • AbsoluteHisto: 绝对直方图(各灰度级像素数量)
  • RelativeHisto: 相对直方图(各灰度级像素占比,总和为1)
read_image (Image, 'printer_chip/printer_chip_01')
dev_close_window ()
dev_open_window (0, 0, 512, 512, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_disp_text ('展示Image的直方图', 'window', 'top', 'left', 'black', [], [])gray_histo (Image, Image, AbsoluteHisto, RelativeHisto)* 将灰度直方图的绝对分布  生成区域类型
gen_region_histo (Region, AbsoluteHisto, 255, 255, 1)

效果 

  • read_image (Image, 'printer_chip/printer_chip_01')
    dev_close_window ()
    get_image_size (Image, Width, Height)
    dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
    dev_display (Image)
    emphasize (ImageInvert, ImageEmphasize, Width, Height, 1)

对比度

 对比度调整用于在低对比度或光照不均的场景中

emphasize (ImageInvert, ImageEmphasize, Width, Height, 1)
  • 参数1: 原始图像
  • 参数2:输出图像
  • 参数3、参数4、参数5    值越大  对比度越明显
read_image (Image, 'printer_chip/printer_chip_01')
dev_close_window ()
get_image_size (Image, Width, Height)
dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)
emphasize (ImageInvert, ImageEmphasize, Width, Height, 1)

效果


线性对比度


scale_image(Image,ImageScaled,0.5,0)
* 增强亮度
scale_image(Image,ImageScaled1,1,100)
* 减少亮度
scale_image(Image,ImageScaled2,1,-100)公式:灰度值=原值*2.5+10
  • 参数1:输入图像
  • 参数2:输出图像
  • 参数3: 比例  大于等于1的值   图像更亮
  •                         小于1的值  图像更暗
  • 参数4:补偿值


非线性

log_image (Image, LogImage, 2)
pow_image (Image, PowImage, 2)
  •  参数1:输入图像

  • 参数2:输出图像

  • 参数3:底数


read_image (Image, 'printer_chip/printer_chip_01')
dev_close_window ()
get_image_size (Image, Width, Height)dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)
dev_display (Image)* 对数变化  压缩灰度值的级别  降低高灰度值的级别
* 参数1:输入图像
* 参数2:输出图像
* 参数3:底数
log_image (Image, LogImage, 2)* 指数变化   选择增强低灰度值   或者  高灰度值的对比度
* 参数3
* 指数: 0-1 增强高灰度值对比度
*       大于等于1 增强低灰度值对比度
pow_image (Image, PowImage, 2)



 傅里叶变换

傅里叶分析-CSDN博客

在我认为傅里叶变换就好比:在一个教室里面老师带着学生唱校歌,有各种声音还有夏天的知了的鸣叫声,这好多声音混杂在一块,随着时间的变换就叫做时域而我们需要在这混乱的声音中提取老师的声音,这个就叫做频域,频域有很多。

这里的图片就是我们日常生活中拍照一样,但是拍照中他也是有噪音,有各种杂斑,所以我们拍出来的照片,都是富含各种杂事,看着不好看,这就叫做时域,我们需要把这图像的杂拌去掉,进行美颜,这从中就是把图像中某些频域给去掉了

注意:以上是我个人理解的。

 rft_generic(Image,ImageFFT,Direction,ResultType,Width)

fft_generic(Image,ImageFFT,Direction,Exponent,Norm,Mode,ResultType)

 区别:rft 是计算图像的实值快速傅里叶变换

            fft是计算输入图像的快速傅里叶变换

  • Image:  输入图像
  • ImageFFT:  傅里叶转换后的图像
  • Direction:  计算正向或反向
    • 'to_freq':表示从时域转为频域;输入的图像必须具有实值类型
    • 'from_freq': 表示从频域转为时域;输入图像必须是复杂的
  • ResultType: 转换后的数据存储方式,即单个像素的数组存储方式。从时域转为频域使用‘complex’   从频域转为时域用‘real’

'byte': 灰度图像

'int1': 实值图像

'real': 实值图像

'complex': 复数图像

  • Exponent: 对应公式中指数符号,前向变换用-1,后向变换用1
  • Norm:  变换的归一化因子
    • 默认值:  'sqrt' (开根号,c=sqrt(M*N),变量)
    • 'n'(图像)
    • 'none'(不使用,c=1)
  • Width:  图像宽度  默认值512

  傅里叶卷积

convol_fft (ImageFFT, ImageFilter, ImageConvol)

在频域内对图像与滤波器进行卷积,将复杂的图像ImageFFT的像素乘以滤波器ImageFile

的相应像素 

  • 傅里叶图像
  • 滤波图像
  • 卷积图像

首先将图像在水平(竖直)方向与滤波器进行卷积;然后卷积后的结果在竖直(水平)方向使用相同的滤波器函数得到的模板进行卷积运算

 线高斯

lines_gauss(Image,Lines,Sigma,Low,High,LightDark,ExtractWidth,LineModel,CompleteJunctions)
  •  Image: 输入的图像
  • Lines:   检测线条(XLD)
  • Sigma:  高斯滤波值      典型范围 0.7~20   建议 0.1  默认 1.5
  • Low: 滞后阈值分割的低阈值    0~20   建议0.5  默认3
  • High: 滞后阈值分割的高阈值   0~35  建议0.5  默认8
  • LightDark:  提取的线条类型('dark'(暗线),'light'(亮线))
  • ExtractWidth:  是否提取线宽('false','true')
  • LineModel:  用来调整线条的位置和宽度的线模型(’bar-shaped‘,’gaussian‘,’none‘,’parabolic‘)
  • CompleteJunctions: 在锻炼的部分是否添加节点使线条连续('false','true')

缩放图像

zoom_image_factor(Image,ImageZoomed,ScaleWidth,ScaleHeight,Interpolation)

缩放因子实现图像缩放

  • 原图像
  • 缩放后保存的图像
  • 图像宽度的比例因子  默认值:0.5
  • 图像高度的比例因子  默认值:0.5
  • 插值类型                    默认值:'constant'
read_image (Image, 'printer_chip/printer_chip_01')
get_image_size (Image, Width, Height)
dev_display(Image)
gen_gauss_filter (ImageGauss, 100, 100, 0, 'n', 'rft', Width, Height)
*时域转频域
rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)
*卷积计算
convol_fft (ImageFFT, ImageGauss, ImageConvol)
*频域转时域
rft_generic (ImageConvol, ImageFFT1, 'from_freq', 'none', 'byte', Width)
*图像作差  用于计算两幅图像的差值    用原图减去滤波后的图像得到锐化图像
sub_image (Image, ImageFFT1, ImageSub, 10, 80)
*对图像进行放大和缩小
zoom_image_factor (ImageSub, ImageZoomed, 0.5, 0.5, 'constant')
*绘制高斯提取线
lines_gauss (ImageZoomed, Lines, 0.2, 3, 8, 'light', 'true', 'bar-shaped', 'true')
dev_display (Lines)

 图像锐化Sobel算子

sobel_amp (Image, EdgeAmplitude, 'FilterType',Size)
  • 输入图像
  • 突出边缘图像
  • 过滤器类型     值为 sum_abs、thin_sum_abs、thin_max_abs、sum_sqrt、x、y
  • 过滤掩模尺寸   值越大,提取的轮廓边缘越暗
read_image (Image, 'printer_chip/printer_chip_01')dev_close_window ()
get_image_size (Image, Width, Height)dev_open_window_fit_size (0, 0, Width, Width, -1, -1, WindowHandle)dev_display(Image)
sobel_amp (Image, EdgeAmplitude, 'x',11)
sobel_amp (Image, EdgeAmplitude, 'y',11)
sobel_amp (Image, EdgeAmplitude, 'sum_abs',11)
sobel_amp (Image, EdgeAmplitude, 'thin_sum_abs',11)sobel_amp (Image, EdgeAmplitude, 'thin_max_abs',11)ThresholdValue:=35
threshold (EdgeAmplitude, Region, ThresholdValue, 255)

 效果  x  y  sum_abs        thin_sum_abs     thin_max_abs

 

 

高通滤波

gen_highpass (ImageHighpass, Frequency, Norm, Mode, Width, Height)

 特点: 值越大、说明保留细节越少、值越小、说明保留细节越多

read_image (Image, 'printer_chip/printer_chip_01')
dev_display (Image)
get_image_size (Image, Width, Height)* 获取一个高通滤波模型
gen_highpass (ImageHighpass, 0.1, 'none', 'dc_center', Width, Height)* 对图像进行傅里叶变换到频域图像
fft_generic (Image, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')* 对频率图像进行高通滤波
convol_fft (ImageFFT, ImageHighpass, ImageConvol)
* 对的到的频率进行傅里叶变换
fft_generic (ImageConvol, ImageFFT1, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')

效果  高通滤波后    傅里叶变换后

低通滤波

gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)

值越小、越模糊、值越大、越清晰 

read_image (Image, 'printer_chip/printer_chip_01')
dev_display (Image)
get_image_size (Image, Width, Height)* 创建一个椒盐噪声
sp_distribution (5, 5, Distribution)
* 将噪声添加到Image上 产生一个带有噪声的图像
add_noise_distribution (Image, ImageNoise, Distribution)dev_display (ImageNoise)* 获取一个低通滤波模型
gen_lowpass (ImageLowpass, 0.1, 'none', 'dc_center', Width, Height)* 对图像进行傅里叶变换到频域图像
fft_generic (ImageNoise, ImageFFT, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')* 对频率图像进行低通滤波
convol_fft (ImageFFT, ImageLowpass, ImageConvol)
* 对的到的频率进行傅里叶变换
fft_generic (ImageConvol, ImageFFT1, 'to_freq', -1, 'sqrt', 'dc_center', 'complex')

效果    低通滤波     傅里叶变换后

 加减乘除

read_image (Image, 'C:/Users/zpp/AppData/Roaming/MVTec/HALCON-23.05-Progress/examples/images/automotive/engine_part_007.png')
read_image (Image1, 'C:/Users/zpp/AppData/Roaming/MVTec/HALCON-23.05-Progress/examples/images/automotive/car_door_01.png')
dev_close_window ()
*get_image_size (Image, Width, Height)add_image (Image, Image1, ImageResult, 0.5, 0)sub_image (Image, Image1, ImageSub, 1, 128)mult_image (Image, Image1, ImageResult2, 0.005, 0)div_image (Image, Image1, ImageResult1, 255, 0)

加   减   乘   除

 


http://www.ppmy.cn/ops/163023.html

相关文章

【C++】使用 CMake 在 Windows 上自动化发布 C++/Qt 应用程序

对于使用 MinGW 编译 C/Qt 项目的开发者来说,发布程序时常常面临目标机器缺少必要运行时库(DLL)的情况。传统方法需要手动收集依赖文件,不仅繁琐,还容易遗漏。本文将展示如何利用 CMake 构建系统,结合 Qt 官…

Windows 配置 Tomcat环境

Windows配置Tomcat 1. 介绍 Tomcat是一个开源的、轻量级的Java应用服务器,在Java Web开发领域应用广泛。以下是关于它的详细介绍: 一、基本概念与背景 定义:Tomcat是Apache软件基金会(Apache Software Foundation)下…

andorid 蓝牙相关

kotlin协程 一个线程的多个协程: 一个线程对应多个协程:在 Kotlin 中,协程是协作式的,它们可以在单个线程上启动和运行多个协程。协程通过挂起和恢复操作来协作,而不是通过阻塞线程。 一个线程的多个协程可以同时工作…

GitHub高效搜索工具

[GitHub项目搜索工具] 一款开发者专属的星矿探测仪! 你是否还在用stars:>1000手动筛选GitHub项目? 你是否经常为了找一个合适的开源库翻遍搜索结果? 这个工具或许能改变你的代码资源发掘方式… 🌟 痛点洞察 在GitHub的3.28亿个…

CogVLM: Visual Expert for Pretrained Language Models 简读

背景与模型信息 其原始论文《CogVLM: Visual Expert for Pretrained Language Models》由 THUDM 团队在 2023 年 11 月发布于 arXiv。 模型动机 传统视觉语言模型通常使用浅层对齐方法,通过简单投影层将图像特征映射到语言模型的输入空间。这种方法可能限制了视觉…

计算机视觉|ConvNeXt:CNN 的复兴,Transformer 的新对手

一、引言 在计算机视觉领域,卷积神经网络(Convolutional Neural Networks,简称 CNN)长期以来一直是核心技术,自诞生以来,它在图像分类、目标检测、语义分割等诸多任务中都取得了令人瞩目的成果。然而&…

ArcGIS操作:11 计算shp矢量面的质心坐标

1、打开属性表 2、添加字段 3、设置字段名称、类型 4、选择创建的字段,计算几何 5、选择属性质心的x坐标、坐标系(y坐标同理) 注意:计算坐标一般使用的是地理坐标系(投影坐标系转地理坐标系教程:ArcGIS操作…

C++对象特性

#构造函数 和 析构函数 构造函数:主要为对象属性赋值 语法:类名(){} 注意: 1.无返回值也无void 2.函数名称与类名相同 析构函数 语法:~类名(){} 注意: 1.无返回值也无void 2.不可以有参数&#xff0c;不可发生重载 class Person { public://构造函数Person(){cout<<&quo…