Halcon学习笔记之缺陷检测(二)教学教材

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Halcon学习笔记之缺陷检测(二)例程: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) //在频域生成两个高斯滤波器//参数说明:生成的高斯滤波器(GaussFilter)// 空域

中高斯在主方向上的标准差(Sigma)// 空域中高斯在正交于主方向的方向上的标准差

(Sigma)// 滤波器主方向的角度(0.0)// 滤波器的规范(’none’)

// 直流项在频域的位置(’rft’)// 图片的大小(Width,Height)

sub_image(GaussFilter1,GaussFilter2,Filter,1,0) //两图片相减(灰度)

//sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )//g' := (g1

- g2) * Mult + Add//以上为函数原型以及运算公式

*

*Process the images iteratively(对图像进行迭代运算)

NumImages := 11

For Index := 1 to NumImages by 1 //for循环从1到NumImages,步长为1

*

*Read an image and convert it to gray values

read_image(Image,’plastics/plastics_’+Index$’02’)

rgb1_to_gray(Image,Image) //将原图转化为灰度图,第一个参数为原图

*Perform the convolution in the frequency domain

rft_generic(Image,ImageFFT,’to_freq’,’none’,’complex’,Width)//对计算一幅

图片实部进行快速傅里叶变换 //参数说明:输入的图片(Image) // 傅里叶变换

后输出的图片(ImageFFT) // 变换方向(’to_freq’或’from_freq’) //

变换因子的规范(’none’) // 输出图片的数据类型(’complex’) //

图片的宽(Width)

convol_fft(ImageFFT,Filter,ImageConvol) //对图片用一个滤波器在频域进行卷积运

算 //参数说明:输入的图片(ImageFFT) // 频域滤波器(Filter) //

相关文档
最新文档