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转换成常用类型图像,以便后续进一步处理。