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 傅里叶变换应用的主要内容,如果未能解决你的问题,请参考以下文章