Halcon 傅里叶变换应用

Posted zhengzc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Halcon 傅里叶变换应用相关的知识,希望对你有一定的参考价值。

傅里叶变换

  一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。

  傅里叶变换可以看做数学上的棱镜,将函数基于频率分解为不同的成分。当我们考虑关时,讨论它的光谱或频率谱。同样,傅里叶变换使我们能够通过频率成分来分析一个函数。

  图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。

  * 傅里叶变换在图像处理中可以做到图像增强与图像去噪、图像分割之边缘检测、图像特征提取、图像压缩等。

  * 如果对一幅精细的图像使用低通滤波器,那么滤波后的结果就只剩下轮廓了。

  * 高频成分:图像细节纹理属于高频分量,是图像灰度值变化剧烈的部分。
  * 低频成分:图像背景与轮廓属于低频分量,是图像灰度值变化缓慢的部分。
  * 低通滤波器:gen_lowpass 对空间域图像进行平滑处理,抑制高频分量。
  * 高通滤波器:gen_highpass 对空间域图像进行锐化处理,抑制低频分量。
  * 带通滤波器:gen_bandpass 使图像在某一部分的频率信息通过,其他过高或过低的频率信息抑制。
  * 带阻滤波器:使图像过低或过高的频率信息通过,某一部分频率信息抑制。

 

相关算子

gen_gauss_filter( : ImageGauss : Sigma1, Sigma2, Phi, Norm, Mode, Width, Height : )
* 在频域产生一个高斯滤波器
* 2.高斯分布在滤波器主方向上的空间域标准差,Sigma越大,高斯滤波器的频带就越宽,对图像平滑程度越高。
* 3.垂直于滤波器主方向的高斯分布在空间域的标准差。
* 4.滤波器在空间域的主要方向
* 5.滤波器的归一化因子。n 避免在FFT中归一化
* 6.直流项在频域的位置。
* 如果使用fft_generic,可以使用dc_edge来提高效率。
* 如果使用fft_image和fft_image_inv进行滤波,则必须使用Norm = none和Mode = dc_center* 如果使用rft_generic,则必须使用Mode = rft
derivate_gauss (Image, ImageGauss, 3, none)
* 将一个图像与高斯函数的导数进行卷积。效果与FFT进行高斯滤波差不多。
主要的区别是边界处理:FFT的定义假设信号是周期性的,因此边界处理是循环的延续。与此相反,derivate_gauss在图像边界使用灰度值的镜像。
通过FFT进行过滤的速度已经快于在Sigma=3(排除创建过滤器的时间)中使用derivate_gauss。这种优势随着Simag的增大而变得更加明显。    
none 仅使用平滑
x 沿X的一阶导数    
gen_derivative_filter (DerivativeFilter, x, 1, n, rft, Width, Height)
* 在频域内产生一个导数滤波器,导数过滤器没有使用任何平滑
* 还要注意的是,不经过平滑处理的导数计算通常不会返回有用的结果,因为噪声会被显著放大。
gen_sin_bandpass (ImageBandpass, 0.4, none, rft, Width, Height)
* 生成一个正弦形状的带通滤波器
2.滤波器与直流项的最大距离
3.滤波器的归一化因子
4.直流项在频域的位置
5.图像宽度
6.图像高度
rft_generic (Image, ImageFFT, to_freq, none, complex, Width)
* 计算图像的实值快速傅里叶变换。在正向转换(Direction = to_freq)中,ResultType必须设置为complex* 3.to_freq,输入图像必须具有实值类型,即,复杂图像不可用作输入。支持所有可以转换为real类型的图像的图像类型。在这种情况下,输出是一个维数(w/2+1)*h的复杂图像,其中w和h是输入图像的宽度和高度。指数-1* from_freq,输入图像必须是复杂的。在这种情况下,输入图像的大小不足以确定输出图像的大小。这必须通过将宽度设置为一个有效值来实现,必须为输入复像宽度的2*w-2或2*w-1。指数1。
* 4.变换的归一化因子。用户必须确保参数的一致使用。这意味着用于正向和反向转换的归一化因子相乘时必须产生w*h。
* 5.输出图像的图像类型。
fft_generic(Image : ImageFFT : Direction, Exponent, Norm, Mode, ResultType : )
* 计算输入图像的快速傅里叶变换图像。
1.输入图像
2.傅里叶转换图像
3.正向转换还是反向转换 to_freq from_freq
4.指数的符号. 正向转换-1,反向转换1
5.转换归一化因子.    n none sqrt
6.直流项在频域的位置 dc_center dc_edge
7.输出图像的类型 complex byte real ....
convol_fft (ImageFFT, ImageFilter, ImageConvol)
* 在频域内对图像与滤波器进行卷积,将复杂图像ImageFFT的像素乘以滤波器ImageFilter的相应像素。
首先将图像在水平(竖直)方向与滤波器进行卷积;然后将卷积后的结果在竖直(水平)方向使用相同的滤波器函数得到的模板进行卷积运算。
gray_range_rect (ImageFiltered, ImageResult, 10, 10)
* 确定矩形内的灰度值范围,每个图像点在掩膜矩形内的最大和最小灰度值的差值(max - min),掩膜为奇数(偶数-1)
correlation_fft (ImageFFT, ImageFFT, ImageCorrelation)
* 计算两个图像在频域的相关性
* 将ImageFFT1与ImageFFT2的共轭复数相乘,计算相关系数。
* 需要注意的是,为了在空间域实现相关性的正确缩放。
* 前向转换必须使用带Norm = none的fft_generic或rft_generic操作符。
* 反向转换必须使用带Norm = n的fft_generic或rft_generic操作符。
* 例程中使用local_max_sub_pix检测时前向和反向用的都是n
local_max_sub_pix (ImageFFTInv, gauss, 3, 0.0001, Row, Column)
* 图像局部极大值的亚像素精确检测。
1.输入亚像素图像
2.偏导数的计算方法 facet,gauss
3.gauss情况下Sigma确定高斯核的大小
4.海森矩阵特征值的最小绝对值。当海森矩阵的特征值都小于-阈值时,一个点被认为是局部最大值。
5.检测到的极大值的行坐标
6.检测到的极大值的列坐标
power_real (ImageFFT, PowerSpectrum)
* 计算complex图像的功率谱(频率的模),结果图像为real类型
binomial_filter (PowerSpectrum, ImageSmooth, 9, 9)
* 二项式滤波器是一个非常好的近似高斯滤波器,可以非常有效地实现只用整数操作。因此,binomial_filter非常快。

 

应用快速傅里叶变换处理图像

1.使用实值傅里叶变换图像与组合高斯滤波器卷积,计算滤波图像的灰度值范围gray_range_rect,通过灰度阈值检测塑料表面小凹点。

技术图片

 

2.检测模糊图像中的不均衡缺陷,使用实值傅里叶变换图像与高斯滤波器进行卷积,转换成空间域后将原图像与滤波后图像进行sub_image求差值,得到清晰的缺陷图,应用lines_gauss提取线条。

技术图片技术图片

 

 3.在高纹理图像中检测不均衡缺陷,从原始图像减去预估的背景光照,使得缺陷变得更明显(实值傅里叶变换+高斯滤波器卷积+图像相减)

接着使用中值滤波平滑纹理,通过阈值从图像中提取流域盆地,对盆地区域计算共现矩阵,得出其灰度值特征(灰度能量值),利用能量值筛选缺陷,缺陷对应的暗斑能量非常低。

 技术图片技术图片

 

 

 4.利用频域内的自相关(correlation_fft)技术,通过检测自相关图像中极大值(local_max_sub_pix)的子像素精确位置来确定单个模具的位置。

技术图片技术图片技术图片

 

 

 5.实值傅里叶变换计算参考图像与检测图像的频域自相关,得到网格与参考图像相差的旋转角度。

* 首先,使用参考图像(旋转角度为0°)创建边缘方向的参考频谱。
* 通过将任意旋转网格边缘方向的频谱与参考频谱相关联,可以确定网格的旋转角度。
* 计算反向傅里叶变换后图像的灰度值get_grayval
* 根据灰度值创建函数create_funct_1d_array
* 计算函数的局部最大值和最小值local_min_max_funct_1d
* 返回函数在局部最大值位置的Y值get_y_value_funct_1d 
* 获取最大Y值对应的局部最大值,该值-1再乘以2即是角度。Angle := 2 * (InnerMaxPos[MaxPosAbs] - 1)

技术图片技术图片

技术图片技术图片

 

 6.快速傅里叶转换频域图,生成滤波器消除频域图垂直方向的干扰,反向傅里叶变换得到消除干扰后的图像。

fft_generic(Image,ImageFFT,to_freq,-1,sqrt,dc_center,complex)

gen_rectangle1 (Rectangle1, 0, Width/2-2, Height/2-10, Width/2+2)
gen_rectangle1 (Rectangle2, Height/2+10, Width/2-2, Height, Width/2+2)
union2 (Rectangle1, Rectangle2, RegionUnion)

paint_region (RegionUnion, ImageFFT, ImageResult, 0, fill)
fft_generic(ImageResult,ImageFFT,from_freq,1,sqrt,dc_center,byte)

技术图片技术图片

技术图片技术图片

 

 6.在不均匀照明的表面检测缺陷(划痕),创建一个合适的正弦带通滤波器。然后通过在频域进行滤波来增强划痕。最后,对增强缺陷进行形态学后处理。

技术图片技术图片

 7.在频域滤波下从干扰背景纹理中分离前景信息。

* 首先,对图像进行快速傅里叶变换fft_generic以获得其频谱power_real。
* 然后,我们在频谱中检测干扰背景纹理对应的频率峰值。
* 然后,建立一个滤除这些频率的滤波器,并应用于频谱。
* 通过对滤波后的频谱进行反向傅里叶变换,得到去除背景纹理的滤波图像。

技术图片技术图片技术图片技术图片技术图片技术图片

 

以上是关于Halcon 傅里叶变换应用的主要内容,如果未能解决你的问题,请参考以下文章

[傅里叶变换及其应用学习笔记] 二十七. 高维傅里叶变换,复习

OpenCV C++(十)----傅里叶变换

傅里叶变换在图像处理中的应用

傅里叶变换如何应用于实际的物理信号?

傅里叶变换简介

傅里叶变换及其应用