Halcon傅里叶变换,算法加速,格式转换
前言
傅里叶变换常用于缺陷检测项目,对于一些背景偏暗,对比度不明显的场景,傅里叶变换可以起到提升对比度的效果。
傅里叶变换从频域角度来处理,对于一些图像像素尺寸大的图像,算法时间往往时间达到1s以上,对于一些快速检测场景而言,此方法需要进一步改进
算法加速
首先将提取的ROI区域
reduce_domian crop_domian
这样的话ROI区域变成了图像,整体图像尺寸进一步减小
另外,halcon提供了一个针对实值傅里叶变换的算子
optimize_rft_speed (700,700, 'standard')
通过这个算子,先根据裁剪后的图像像素尺寸的宽高,再加上这个优化算子,再运行傅里叶变换相关算子时,整体算法时间只有几十毫秒了。
主要代码片段
* 优化实值FFT的运行时间 optimize_rft_speed (700,700, 'standard') *生成高斯滤波器,然后相减得到一个滤波器图像 Sigma1 := 180.0 Sigma2 :=0.5 gen_gauss_filter (GaussFilter1, Sigma1, Sigma1, 0.0, 'none', 'rft',680, 680) gen_gauss_filter (GaussFilter2, Sigma2, Sigma2, 0.0, 'none', 'rft',680, 680) sub_image (GaussFilter1, GaussFilter2, Filter, 1, 0) *将图像傅里叶变换,生成一个复杂矩阵图像,to_freq正向转换 rft_generic (ImagePart, ImageFFT, 'to_freq', 'none', 'complex', 680) *将傅里叶变换图像与滤波器图像卷积 convol_fft (ImageFFT, Filter, ImageConvol) *将卷积后的傅里叶变换图像再次变换,from_freq反向转换 rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', 680) ****将灰度在0-255内拉伸变换 scale_image_max (ImageFiltered, ImageScaleMax)
格式转换
傅里叶变换后的图像ImageFiltered并不是常用的灰度在0到255的byte型图像,需要使用scale_image_max转换成常用类型图像,以便后续进一步处理。