zoukankan      html  css  js  c++  java
  • 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。
    * 然后,我们在频谱中检测干扰背景纹理对应的频率峰值。
    * 然后,建立一个滤除这些频率的滤波器,并应用于频谱。
    * 通过对滤波后的频谱进行反向傅里叶变换,得到去除背景纹理的滤波图像。

    8.消除周期性噪声

    包含周期性噪声的图像在傅里叶变换后的频域图像有多个中心(亮点),表现为高能量点。

    消除这些不在频域图像中心的其他小亮点,就是在空间域中消除周期性噪声。

    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')
  • 相关阅读:
    推荐6款优秀的海外免费杀毒软件 附下载链接
    30个高质量的Psd设计文件分享
    45个设计师们不常见的html5和css3漂亮模板
    40个极简WordPress主题
    makfile中 override 与 +=联合作用的验证
    对 makefile 中 flavor 函数的学习体会
    GNU make manual 翻译( 一百六十七)
    对 makefile 中 override 优先级的学习体会
    GNU make manual 翻译( 一百六十五)
    GNU make manual 翻译( 一百六十六)
  • 原文地址:https://www.cnblogs.com/zhengzc/p/12926847.html
Copyright © 2011-2022 走看看