Halcon——图像增强算子以及分类
摘要
图像增强就是指通过某种图像处理方法对退化的某些图像特征,如边缘、轮廓、对比度等进行处理,以改善图像的视觉效果,提高图像的清晰度,或是突出图像中的某些“有用”,压缩其他“无用”信息,将图像转换为更适合人或计算机分析处理的形式。
图像增强技术根据增强处理时所处的空间不同,基本可以分为两类:空间域法和频域法。
- 空间域可以简单地理解为包含图像像素的空间,空间域法是指空间域中,也就是图像本身,直接对图像进行各种线性或非线性运算,对图像的像素灰度值做增强处理。空间域法又分为点运算和模板处理两大类。
- 点运算是作用于单个像素邻域的处理方法,包括图像灰度变换、直方图修正、伪彩色增强技术;
- 模板处理是作用于像素领域的处理方法,包括图像平滑、图像锐化等技术。
- 频域法则是在图像的变换域中把图像看成一种二维信号,对其进行基于二维傅里叶变换的信号增强。对其进行基于二维傅里叶变换的信号增强。常用的方法包括低通滤波、高通滤波以及同态滤波等。
如图概括了常用的图像增强的方法:
下面介绍一些Halcon中常用的图像增强算子。
一、空间域
1、线性灰度变换:一般不改变像素点的坐标信息,只改变像素点的灰度值
- scale_image— 缩放图像的灰度值
scale_image(Image : ImageScaled : Mult, Add : )
原理:算子scale_image对输入的图像(Image)进行如下变换:
g’ := g * Mult + Add
通过参数3、4来改变图像的像素灰度值,从而达到增强图像对比度的目的,注:参数3/4设为1,0,则图像灰度值未发生改变
作用:拉开图像的对比度,让图像中黑的地方更黑,亮的地方更亮。
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
scale_image (Image, ImageScaled, 1.5, -150)
- emphasize——图像增强
emphasize(Image : ImageEmphasize : MaskWidth , MaskHeight, Factor : )
原理:首先,该过程使用低通(mean_image)进行过滤。由得到的灰度值(mean)和原始灰度值(orig)计算得到的灰度值(res)如下:
res := round((orig - mean) * Factor) + orig
通过参数3、4控制均值滤波模板的大小,数值越大,则图像对比度越强,一般配合参数5—Factor(对比度强度)一起对图像进行增强处理。
作用:增强图像的高频区域(边缘和拐角),使图像看起来更清晰。
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
emphasize (Image, ImageEmphasize, 7, 7, 1)
2、 非线性灰度变换
单纯的线性灰度变换可以在一定程度上解决视觉上的图像整体对比度问题,但是对图像细节部分的增强较为有限,结合非线性变换技术可以解决这一问题。非线性变换不是对图像的整个灰度范围进行扩展,而是有选择的对某一灰度范围进行扩展,其他范围的灰度则有可能被压缩。常用的非线性变换有对数变换和指数变换。
- log_image — 对图像做底数为Base 的对数变换
log_image(Image : LogImage : Base : )
概念:图像灰度的对数变换可以扩张数值较小的灰度范围或者压缩数值较大的灰度范围。对数变换是一种有用的非线性映射交换函数,可以用于扩展图像中范围较窄的低灰度值像素,压缩输入图像中范围较宽的高灰度值像素,使得原本低灰度值的像素部分能更清晰的呈现出来。
原理:对图像的灰度值取对数,得到新的灰度值,第3个参数为对数的底,默认值为’e’
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
log_image (Image, LogImage,'e')
- pow_image— 对图像做伽马为Exponent的指数变换
pow_image(Image : PowImage : Exponent : )
概念:指数变换映射关系与对数变换的不同之处在于,指数变换可以根据伽马Exponent 的不同取值有选择性地增强低灰度区域的对比度或是高灰度区域的对比度
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
pow_image (Image, PowImage, 2)
2、直方图均衡化
直方图均衡化是一种最常见的直方图修正法。这种方法的思想是把原始图像的直方图为均匀分布的形式,增加像素灰度值的动态范围。也就是说直方图均衡化是使原图像中具有相近灰度且占有大量像素点的区域的灰度范围展宽,使大区域中的微小灰度变化呈现出来,增强图像整体对比度效果,使图像更加清晰。
equ_histo_image(Image : ImageEquHisto : : )
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
equ_histo_image (Image, ImageEquHisto)
二、频域
频率特征是图像的灰度变化特征,低频特征是灰度变化不明显,例如图像整体轮廓,高频特征是图像灰度变化剧烈,如图像边缘和噪声。
一个重要的经验结论:低频代表图像整体轮廓,高频代表了图像噪声,中频代表图像边缘、纹理等细节。什么时候使用傅里叶变换进行频域分析?
1、具有一定纹理特征的图像,纹理可以理解为条纹,如布匹、木板、纸张等材质容易出现。
2、需要提取对比度低或者信噪比低的特征。
3、图像尺寸较大或者需要与大尺寸滤波器进行计算,此时转换至频域计算,具有速度优势。因为空间域滤波为卷积过程(加权求和),频域计算直接相乘。
在halcon中,使用频域进行检测,有两个步骤是比较关键的:①生成合适的滤波器;②空间域和频域之间的转换。
1、高通滤波法
图像中的边缘或细条等细节部分与图像频谱的高频分量相对应,因此采用高通滤波让高频分量顺利通过,使图像的边缘或细条等细节变得清楚,实现图像的锐化。高通滤波可用空频法或频域法来实现。在空间域是用卷积方法,与空域低通滤波的邻域平均法类似,不过其中的冲激响应方阵H不同。
- gen_gauss_filter— 在频域生成高斯滤波器
gen_gauss_filter( : ImageGauss : Sigma1, Sigma2, Phi, Norm, Mode, Width, Height : )
参数:
ImageGauss(out) :生成的滤波器图像
Sigma1:空域(像素域)中,高斯分布在滤波器主方向的标准差
Sigma2:空域(像素域)中,高斯分布在垂直于滤波器主方向的标准差。注:Sigma1和Sigma2确定空间域内高斯函数的平滑量
Phi:滤波器在空间域的主要方向
Norm:滤波器的归一化因子。注:如果使用fft_image和fft_image_inv进行过滤,必须设置参数Norm = 'none’和Mode = ‘dc_center’(本文未使用)
Mode:频率图中心位置。注: 如果使用实值快速傅里叶变换算子rft_generic, 则Mode = ‘rft’ ;如果使用快速傅里叶变换算子fft_generic,则可以使用Mode = 'dc_edge’来提高效率
Width, Heigh:生成滤波图像的宽、高
原理:首先产生一个高斯核,然后根据输入的参数对这个高斯核矩阵做傅里叶变换(实现从空域或时域到频域的转换工具),得到特定模式和特定分辨率的所谓频域的滤波器,例如我要进行rft_generic的变换,那么我的高斯滤波器模式就要写为‘rft’。并通过设置参数保持频域滤波器和原图像一致。
- rft_generic— 计算图像的实值快速傅里叶变换,一般需要使用两次,因为在频域处理完之后,还需要转换成空间域。
rft_generic(Image : ImageFFT : Direction, Norm, ResultType, Width : )
参数:
Image:输入图像
ImageFFT(out) :傅里叶变换输入图像
Direction:计算正向或反向变换。‘to_freq’是空间域—>频域的变换,ResultType一般选择’complex’;‘from_freq’是频域—>空间域的变换,ResultType一般选择’byte’(灰度图像)。
Norm:变换的归一化因子
ResultType:输出图像的图像类型,配合Direction参数设置
Width :输入图像的宽度
原理:其实gen_gauss_filter得到的滤波器,就是一个图像,虽然是频域滤波器,但是单纯看物理意义,他就是一个图像。与时域空间卷积核的物理意义是相同的。对这幅频域图进行卷积(卷积过程与时域无差别),卷积之后图像就产生了变化,比如外环得到减弱,内环得到保留(高低通滤波器的效果),或者在某个方向上得到保留(gabor滤波器的效果),再还原到时域,发现跟原图变化很大。
- convol_fft— 在频域用滤波器对图像进行卷积
convol_fft(ImageFFT, ImageFilter : ImageConvol : : )
原理:将复合图像ImageFFT的像素乘以滤波图像滤波器的对应像素。
效果:
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
get_image_size (Image, Width, Height)
*在频域中生成高斯滤波器
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, 5, 100)
*对图像进行缩放,一般图像特别大的时候,缩放一下,提取效果会更好
zoom_image_factor (ImageSub, ImageZoomed, 0.4, 0.4, 'constant')
*将图像中的有灰度差异的线条提取出来
lines_gauss (ImageZoomed, Lines1, 0.2, 3, 8, 'light', 'true', 'gaussian', 'true')
注:当图像质量不理想时,提取线条的效果不好时,不妨试试这种方法,亲测效果很好。
此外,还有一些图像增强的方法:
- 灰度图像形态学(对灰度图像使用下面算子)
①gray_opening:结构元素在图像中滑,灰度值最高的值作为新值,有使图像变亮的作用。
②gray_closing:结构元素在图像中滑,灰度值最低的值作为新值,有使图像变暗的作用。
③gray_range_rect:用一个矩形结构元素在图像中滑动,新值 = (矩形中最大的)灰度值-(矩形中最大的)最小的灰度值
mult_image(Image1, Image2 : ImageResult : Mult, Add : ) — 将图像变化较大的部位通过图像相减处理提取出来,再和原图简单相加
read_image (Image, 'C:/Users/Administrator/Desktop/1.png')
*图二
mult_image (Image, Image, ImageResult, 0.05, 1)
*图三
mult_image (Image, Image, ImageResult, 0.002, 1)
转载博文:(2条消息) [Halcon] 图像增强相关算子及其分类_Loewen丶的小窝-CSDN博客
Halcon——图像增强算子以及分类的更多相关文章
- Spark RDD概念学习系列之Spark的算子的分类(十一)
Spark的算子的分类 从大方向来说,Spark 算子大致可以分为以下两类: 1)Transformation 变换/转换算子:这种变换并不触发提交作业,完成作业中间过程处理. Transformat ...
- halcon的算子列表
Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...
- Halcon 常用算子使用场合
Chapter 1 :Classification 1.1 Gaussian-Mixture-Models 1.add_sample_class_gmm 功能:把一个训练样本添加到一个高斯混合模型的训 ...
- 【halcon】算子
算子 rgb1_to_gray 灰度化 threshold:英文是阈的意思 二值化算子 Connection Compute connected components of a region. ...
- halcon基础算子介绍(窗口创建,算子运行时长,是否启用更新函数)
前言 halcon有有大约1500个算子,我总结一些简单大家用得到的算子,比如创建窗口的方式有3种,接下来结束这方式,及其异同点等! 1.窗口创建的三种方式 1.1使用dev_open_window算 ...
- Halcon常用算子01
F1:Help F2:重置 F3:激活一行程序 F4:注销一行程序 F5:执行到stop()或程序结尾 F6:步执行(一步步调试) F10:添加或撤销断点 dev_open_window:打开图像窗口 ...
- HALCON视觉算子相关函数中文说明System(2)
16.6 Parameters get_system_ 功能:根据HALCON系统参数获取关于当前的信息. set_system 功能:HALCON系统参数的设置. 16.7 Serial cle ...
- halcon 常用算子中文解释说明(随时更新)
select_contours_xld (Edges, SelectedContours, 'closed', 0, 0, 0, 0) 筛选闭合边缘曲线 sub_image (ImageConvert ...
- Halcon常用算子02
threshold:阈值分割 minGray<=g<=maxGray select_shape:选取特定区域(Region) regiongrowing:区域生长法分割图像获得 ...
随机推荐
- Kubernetes 实战——有状态应用(StatefulSet)
一.简介 有状态实例:新实例和旧实例需要有相同的名称.网络标识和状态 无状态实例:可随时被替换 1. ReplicaSet 和有状态 Pod ReplicaSet 通过 Pod 模板创建多个 Pod ...
- kafka基础知识梳理
一.Kafka的基本概念 关键字: 分布式发布订阅消息系统:分布式的,分区的消息服务 Kafka是一种高吞吐量的分布式发布订阅消息系统,使用Scala编写. 对于熟悉JMS(Java Message ...
- 测试MySQL锁的问题
测试MySQL锁的问题 目录 测试MySQL锁的问题 1 Record Lock 2 Next-Key Lock 2 死锁测试 InnoDB支持三种行锁: Record Lock:单个行记录上面的锁 ...
- vue环境搭建以及使用vue-cli创建项目
我要跑vue项目,所以我要搞vue. 1.环境搭建 进入node官网下载对应版本的node,一步步安装即可. 安装会自动配置路径和npm包管理环境,通过node -v进行验证 2.安装vue-cli脚 ...
- 用VSCode终端实现重定向比较程序输出和正确输出
在刷 OJ 题目或者进行编程考试或比赛时,经常需要对编写好的程序进行测试,即运行编写好的程序,输入样例输入或者自己编写的输入数据,查看程序输出结果和样例输出或者正确输出是否一致.这种方法有很多弊端,当 ...
- (Element UI 组件 Table)去除单元格底部的横线
Element UI 组件 Table 有一个属性 border,添加它可以增加纵向边框,但是无法控制横线边框,因此即使是最简单的 el-table,也会包含一个底部横线. 这个底部横线其实是一个 b ...
- 乘风破浪,.Net Core遇见MAUI(.NET Multi-platform App UI),进击现代化跨设备应用框架
什么是MAUI https://github.com/dotnet/maui .NET Multi-platform App UI (MAUI) 的前身是Xamarin.Forms(适用于Androi ...
- LCA总结
作为一名合格的 OIer ,一定要有自我总结的意识,一定要通过写博客的方式来验证自己的掌握程度 ----沃.茨基硕德 目录 作为一名合格的 OIer ,一定要有自我总结的意识,一定要通过写博客的方式来 ...
- gRPC(3):拦截器
在 gRPC 调用过程中,我们可以拦截 RPC 的执行,在 RPC 服务执行前或执行后运行一些自定义逻辑,这在某些场景下很有用,例如身份验证.日志等,我们可以在 RPC 服务执行前检查调用方的身份信息 ...
- 尝试用面向对象思维理解Vue组件
什么是组件 用面向对象的思维去理解Vue组件,可以将所有的事物都抽象为对象,而类或者说是组件,都具有属性和操作. 如抽取人类为组件,其基本的属性有姓名.年龄.国籍:基本的方法有吃饭.睡觉.跑步等. & ...