一、傅里叶变换
一个恰当的比喻是将傅里叶变换比作一个玻璃棱镜。棱镜是可以将光分解为不同颜色的物理仪器,每个成分的颜色由波长(或频率)来决定。
傅里叶变换可以看做数学上的棱镜,将函数基于频率分解为不同的成分。当我们考虑关时,讨论它的光谱或频率谱。同样,傅里叶变换使我们能够通过频率成分来分析一个函数。
图像的频率是表征图像中灰度变化剧烈程度的指标,是灰度在平面空间上的梯度。
傅里叶变换在图像处理中可以做到图像增强与图像去噪、图像分割之边缘检测、图像特征提取、图像压缩等。
如果对一幅精细的图像使用低通滤波器,那么滤波后的结果就只剩下轮廓了。
高频成分:图像细节纹理属于高频分量,是图像灰度值变化剧烈的部分。
低频成分:图像背景与轮廓属于低频分量,是图像灰度值变化缓慢的部分。
低通滤波器: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’,输入图像必须是复杂的。在这种情况下,输入图像的大小不足以确定输出图像的大小。这必须通过将宽度设置为一个有效值来实现,必须为输入复像宽度的2w-2或2w-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’)
7.在不均匀照明的表面检测缺陷(划痕),创建一个合适的正弦带通滤波器。然后通过在频域进行滤波来增强划痕。最后,对增强缺陷进行形态学后处理。
8.在频域滤波下从干扰背景纹理中分离前景信息。
- 首先,对图像进行快速傅里叶变换fft_generic以获得其频谱power_real。
- 然后,我们在频谱中检测干扰背景纹理对应的频率峰值。
- 然后,建立一个滤除这些频率的滤波器,并应用于频谱。
- 通过对滤波后的频谱进行反向傅里叶变换,得到去除背景纹理的滤波图像。
9.消除周期性噪声
包含周期性噪声的图像在傅里叶变换后的频域图像有多个中心(亮点),表现为高能量点。
消除这些不在频域图像中心的其他小亮点,就是在空间域中消除周期性噪声。
read_image (zouqi,‘zouqi.jpg’)
dev_open_window (0, 520, Width, Height, ‘black’, WindowHandle1)
rgb1_to_gray (zouqi, zouqi)
fft_image (zouqi, ImageFFT4)
power_real (ImageFFT4, PowerSpectrum)
*二项式滤波(配合功率谱算子)
binomial_filter (PowerSpectrum, ImageSmooth, 9, 9)
*阈值化获得高能量点
threshold (ImageSmooth, Region, 100, 1800)
connection (Region, ConnectedRegions)
select_shape (ConnectedRegions, SelectedRegions, ‘area’, ‘and’, 5, 100)
union1 (SelectedRegions, RegionUnion)
*获得区域内图像域
reduce_domain (ImageSmooth, RegionUnion, ImageReduced)
*获得局部极大值
local_max (ImageReduced, LocalMaxima1)
*膨胀处理区域
dilation_circle (LocalMaxima1, RegionDilation, 9)
*在傅里叶变换中绘制对应区域的灰度值为0
paint_region (RegionDilation, ImageFFT4, ImageFFTFiltered, 0, ‘fill’)
*傅里叶逆转换,获得去除周期噪声所在区域的频率后的图像
fft_generic (ImageFFTFiltered, ImageFiltered, ‘from_freq’, 1, ‘sqrt’, ‘dc_center’, ‘byte’)