halcon中的高斯平滑算子原理分析

文章目录

前言

halcon中提供了灰度卡尺测量工具,在图像的测量、定位、计数等方面经常会用到,因此打算在openCV项目中添加类似的卡尺工具。在halcon的卡尺测量工具中,有一项平滑(Sigma)系数,是对灰度投影后生成的一维数组进行高斯平滑,halcon会根据该系数的大小,自动计算出一个适合的滑窗宽度进行高斯平滑。针对halcon如何实现数据的高斯平滑,已经如何自动计算出适合的滑窗宽度进行了分析和测试,现将过程进行记录,以免遗忘。同时也把自己目前没想明白的问题贴出来,期待大家的指导。

一、一维数据滤波原理

对一组一维数据依据某种规则进行变换处理的过程就是数据滤波,这个规则就可以认为是滤波器的类型。现以均值滤波为例进行说明,对含有10个数据的一维数组[ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]进行均值滤波,滤波器的滑窗宽度设为3,对边缘空白区域进行对称位置镜像补值。对数组的每一个数据进行处理:
{1(边缘处补第1位数据右侧的数据)+0(数组第1个元素)+1(数组第2元素)} / 3(滑窗宽度)=(1+0+1) 1/3= 2/3
{0(数组第1个元素)+1(数组第2个元素)+2(数组第3元素)} / 3(滑窗宽度)=(0+1+2)
1/3= 1
{1(数组第1个元素)+2(数组第2个元素)+3(数组第3元素)} / 3(滑窗宽度)=(1+2+3)* 1/3= 2
… …

{7(数组第8个元素)+8(数组第9个元素)+9(数组第10元素)} / 3(滑窗宽度)=(7+8+9) 1/3= 8
{8(数组第9个元素)+9(数组第10个元素)+8(边缘处补第10位数据左侧的数据)} / 3(滑窗宽度)=(8+9+8)
1/3= 25/3
经过均值滤波后最终得到的结果为[ 2/3 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 25/3 ],如下图:

halcon中的高斯平滑算子原理分析
其中是使用了系数为[ 1/3 , 1/3 , 1/3 ]的均值滤波器对数据进行滤波。
halcon中的高斯平滑算子原理分析
以上就是滤波原理的简述,不同的滤波器在原理方面大体是类似的,只不过在滤波系数和一些小的细节方面有所区别。

; 二、高斯平滑

1.计算高斯滤波器权值

高斯滤波(高斯平滑)在滤波操作的原理上与均值滤波相同,只不过需要根据高斯正态分布的密度函数对滤波器的系数进行计算,即调整均值滤波器的权值,将均值滤波器更改为高斯滤波器。其中μ是x的均值,表示的是随机分布的中心,σ是x的标准差,表示的是不确定性。

halcon中的高斯平滑算子原理分析
现假定μ=0,σ=0.5,滤波器宽度为3,根据函数可以计算得到
f(-1)=0.1079819
f(0)=0.7978846
f(1)=0.1079819
三个值的权重总和等于1.0138484,对于滤波还必须让他们的权重之和等于1,所以上面的三个值还要分别除以1.0138484,得到最终的结果是[ 0.10650698 , 0.78698604 , 0.10650698 ]。
利用生成的滤波器对数组[0 , 0,1 , 0,0]进行滤波,得到的结果是
[ 0 , 0.10650698 , 0.78698604 , 0.10650698 , 0 ]
如果对[0 , 0,2 , 0,0]进行滤波,则得到的结果是
[ 0 , 0.21301396 , 1.57397208 , 0.21301396 , 0 ]

; 2.确定高斯滤波器的尺寸

通过观察发现,halcon的smooth_funct_1d_gauss算子可以根据设置的Sigma参数的数值自动计算出滤波器的宽度,halcon的Sigma即上文中提到的标准差σ。例如,当Sigma为0.5,滤波器宽度是3,Sigma为1,滤波器宽度是7。
通过多次测试,找到了一个规律:
假设n=Sigma/0.256479361,取结果n的整数部分N,则滤波器的宽度为2 _N+1。
利用halcon的smooth_funct_1d_gauss算子进行实际验证
(1)当σ=Sigma=0.5,滤波器宽度为3,此时n=σ/0.256479361≈1.949,N=1,计算的滤波器宽度=2_N+1=3.

(2)当σ=Sigma=1,滤波器宽度为7,此时n=σ/0.256479361≈3.899,N=3,计算的滤波器宽度=2 _N+1=7.
(3)当σ=Sigma=15,滤波器宽度为117,此时n=σ/0.256479361≈58.484,N=58,计算的滤波器宽度=2_N+1=117.

… …

(4)当σ=Sigma=100,滤波器宽度为779,此时n=σ/0.256479361≈389.895,N=389,计算的滤波器宽度=2*N+1=779

通过上面的方法就可以利用标准差σ计算出和halcon一致了滤波器的宽度。

总结

通过上述的过程就可以对一维数据以实现类似halcon算子smooth_funct_1d_gauss的高斯平滑操作。下一步就是用代码实现这个过程,然后实现halcon中的灰度卡尺功能。

目前有个问题,就是在确定高斯滤波器尺寸的环节中是用σ除以0.256479361,这个”0.256479361″是通过我不断测试并验证得到的,个人认为这个值肯定是通过一个计算公式得到的,期望得到这个具体的公式,有知道的大神请赐教,感谢。

Original: https://blog.csdn.net/biggestcherry/article/details/124757244
Author: 大_樱_桃
Title: halcon中的高斯平滑算子原理分析

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/702698/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球