例程:detect_indent_fft.hdev
说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步:
首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波);
然后,将原图和构造的滤波器进行快速傅里叶变换;
最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。
注:代码中绿色部分为个人理解和注释,其余为例程中原有代码
*Initialization(初始化) dev_updata_off() //这一句包含如下三个算子: //dev_updata_pc(‘off’) 关闭更新程序计数器 //dev_updata_var(‘off’) 关闭更新变量窗口 //dev_updata_window(‘off’) 关闭更新图像窗口(即通过命令来显示想要在图像窗口显示的图片) dev_close_window() //关闭活动的图像窗口 read_image(Image,’plastics / plastics_01’) //载入图片 //参数说明:为读入图片命名(Image) // 文件名(’plastics/plastics_01’) get_image_size(Image,Width,height) //获取图片的长宽; //参数说明:之前读入或生成的图片(Image) // 图片的宽(Width) // 图片的高(Height) dev_open_window(0,0,Width,Height,’Black’,WindowHandle) //打开一个新的图像窗口 //参数说明:起始坐标(0,0) // 大小(Width,Height) // 背景颜色(’Black’) // 窗口句柄(WindowHandle) set_display_font (WindowHandle,14,’mono’,’ture’,’false’)//设置不依赖操作系统的字体 //参数说明:窗口句柄(WindowHandle) // 字体大小(14) // 字体类型(’mono’) // 是否黑体(’ture’) // 是否倾斜(’false’) dev_set_draw(‘Margin’) //定义区域填充模式 //参数说明:填充模式(’Margin’或者’Fill’) dev_set_line_width(3) //设置输出区域轮廓线的线宽 //可以修改参数来看最后缺陷区域标示的区别 dev_set_color(’red’) //设置一种或者多种输出颜色 * *Optimize the fft speed for the specific image size(根据指定图像大小进行fft速度最优化) optimize_rft_speed(Width,Height,’standard’) //对指定大小的图片的fft速度进行优化 //参数说明:图片大小(Width,Height) // 优化模式(’standard’) * *Construct a suitable filter by combining two Gaussian filters(结合两个高斯滤波器构造一*个合适的滤波器) Sigma1 := 10.0 Sigma2 := 3.0 //定义两个常量 gen_gauss_filter(GaussFilter1,Sigma1,Sigma1,0.0,’none’,’rft’,Width,Height) gen_gauss_filter(GaussFilter2,Sigma2,Sigma2,0.0,’none’,’rft’,Width,Height) //在频域生成两个高斯滤波器 |