1.首先简单介绍一下Halcon开发:

HALCON是德国MVtec公司开发的一套完善的标准的机器视觉算法包,拥有应用广泛的机器视觉集成开发环境。它节约了产品成本,缩短了软件开发周期——HALCON灵活的架构便于机器视觉,医学图像和图像分析应用的快速开发。在欧洲以及日本的工业界已经是公认具有最佳效能的Machine Vision软件。

Halcon语句的分类:

  1. 绿色:注释
  2. 褐色:控制和开发算子
  3. 蓝色:图像获取和处理算子
  4. 浅蓝色:外部函数

如图所示:

Halcon语句分类示例

Halcon图像处理思想

1.获取图像
    2.预处理
    3.处理
    4.显示结果和清除object

图像的特征

1.颜色物征:边缘、频谱、色彩,角点
2.形态学特征:轮廓,形状
3.纹理物征
4.空间关系

例程:detect_indent_fft.hdev

* This program demonstrates how to detect small texture
* defects on the surface of plastic items by using the fast
* fourier transform (FFT).
* First, we construct a suitable filter using Gaussian
* filters. Then, the images and the filter are convolved
* by using fast fourier transforms. Finally, the defects
* are detected in the filtered images by using
* morphology operators.
*
* Initializations
*/
*例程:detect_indent_fft.hdev* 说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步:* 首先,我们用高斯滤波器构造一个合适的滤波器(将原图通过高斯滤波器滤波);* 然后,将原图和构造的滤波器进行快速傅里叶变换;* 最后,利用形态学算子将缺陷表示在滤波后的图片上(在缺陷上画圈)。
*
*/* 在程序执行过程中选择将PC更新操作打开或关闭
dev_update_off ()
* 关闭激活的图形显示窗口
dev_close_window ()
read_image (Image, 'plastics/plastics_01')
get_image_size (Image, Width, Height)
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 14, 'mono', 'true', 'false')
* dev_set_draw (’fill’)    填满选择的区域
* dev_set_draw (’margin’)    显示的对象只有边缘线,
dev_set_draw ('margin')
* 线宽用Line Width 指定
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')
*
* 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)* 两图片相减(灰度)
sub_image (GaussFilter1, GaussFilter2, Filter, 1.025, 0)
* sub_image(ImageMinuend, ImageSubtrahend : ImageSub : Mult, Add : )
* g' := (g1 - g2) * Mult + Add
* 以上为函数原型以及运算公式
*
* Process the images iteratively
NumImages := 16
for Index := 1 to NumImages by 1* * Read an image and convert it to gray valuesread_image (Image, 'plastics/plastics_' + Index$'02')* 把一个RGB图像转变成一个灰度图像。rgb1_to_gray (Image, Image)* Perform the convolution in the frequency domain* 计算一个图像的实值快速傅里叶变换。rft_generic (Image, ImageFFT, 'to_freq', 'none', 'complex', Width)* 用在频域内的滤波器使一个图像卷积。convol_fft (ImageFFT, Filter, ImageConvol)rft_generic (ImageConvol, ImageFiltered, 'from_freq', 'n', 'real', Width)* * Process the filtered image* 用一个矩形掩膜计算像素点的灰度范围gray_range_rect (ImageFiltered, ImageResult, 10, 10)* 决定区域内最小最大灰度值intensity(ImageResult, ImageResult, MeanValue, Deviation)min_max_gray (ImageResult, ImageResult, 0, Min, Max, Range)* 利用全局阈值对图像进行分割* value := 10* if (Max > 6.8)*     value := 6.8* else*     value := Max * 0.8* endifthreshold (ImageResult, RegionDynThresh, max([5.55, MeanValue + 4.25]), 255)* threshold (ImageResult, RegionDynThresh, max([5.55, Max * 0.8]), 255)* 计算区域内的连通部分connection (RegionDynThresh, ConnectedRegions)* 根据指定的形态特征选择区域select_shape (ConnectedRegions, SelectedRegions, 'area', 'and', 1, 99999)* 返回包含所有区域的集合union1 (SelectedRegions, RegionUnion)* 用一个圆圈来封闭一个区域* 参数说明:将要被封闭的区域(RegionUnion)*          被封闭的区域(RegionClosing)*          圆圈的半径(10)closing_circle (RegionUnion, RegionClosing, 5)* 合并像素相连区成为一个Elementconnection (RegionClosing, ConnectedRegions1)select_shape (ConnectedRegions1, SelectedRegions1, 'area', 'and', 10, 99999)* 计算区域的面积以及中心位置area_center (SelectedRegions1, Area, Row, Column)* * Display the results* 显示原图dev_display (Image)* 将区域面积赋给Number用于后面检查是否存在缺陷Number := |Area|  if (Number)* 构造一个与设定的圆弧或圆相一致的边界gen_circle_contour_xld (ContCircle, Row, Column, gen_tuple_const(Number,30), gen_tuple_const(Number,0), gen_tuple_const(Number,rad(360)), 'positive', 1)ResultMessage := ['Not OK',Number + ' defect(s) found']Color := ['red','black']dev_display (ContCircle)elseResultMessage := 'OK'Color := 'forest green'endif* 显示信息disp_message (WindowHandle, ResultMessage, 'window', 12, 12, Color, 'true')if (Index != NumImages)disp_continue_message (WindowHandle, 'black', 'true')stop ()endif
endfor

运行效果图:

图像分析,使用Halcon进行缺陷检测相关推荐

  1. halcon视觉缺陷检测系列(1)常用的6种方法

    一.缺陷检测综述 缺陷检测是视觉需求中难度最大一类需求,主要是其稳定性和精度的保证.首先常见缺陷:凹凸.污点瑕疵.划痕.裂缝.探伤等.常用的手法有六大金刚(在halcon中的ocv和印刷检测是针对印刷 ...

  2. Halcon 频域缺陷检测

    频域是对图像进行处理的有效的手段,对产品的缺陷检测,可以通过对图像频域的处理实现, 这其中的核心是频域滤波器的设计. 先看几个相关的算子 1.rft_generic 作用:对实数图像进行傅里叶变换或傅 ...

  3. Halcon 网格缺陷检测

    网格缺陷检测 图片资源 链接:https://pan.baidu.com/s/1Higp9T94J1KtlxCyYZrW1Q 提取码:z2wn *************1.读取图片与基本设置**** ...

  4. HALCON【缺陷检测】

    1.缺陷分类: 边缘凹凸.毛刺 内部污点.内部凹凸.特定空洞.破损 划痕(一般用低角度环形光和同轴光源) 凸点一般用带角度的光源斜着打,背景打亮,凸点打暗. 凹点一般用平行光从上往下打,背景打亮,凹点 ...

  5. halcon python缺陷检测_halcon边缘提取缺陷检测的思路

    一.边缘提取 1 .设置 ROI 兴趣区域 2 .快速二值化,并连接相邻区域.这样做的目的是进一步减少目标区域,通过二值化将目 标区域大概轮廓提取出来 3 .提取最接近目标区域的轮廓 . 常用函数有 ...

  6. halcon python缺陷检测_Halcon学习笔记之缺陷检测(一)

    *surface_scratch.hdev:extraction of surface scratches via local thresholding and morphological post- ...

  7. Halcon:PCB缺陷检测

    图像处理结果: 主要思想: *Blob+差分+特征 Blob:使用灰度值的开运算图像A,使用灰度值的闭运算图像B 差分:A-75>B,选择其中暗的,A+75<B,选择其中亮的 特征:可以再 ...

  8. [Halcon图像] 缺陷检测的一些思路、常规检测算法

  9. halcon 圆环类缺陷检测的一种方法(极坐标变换法)

    目录 简介 极坐标变换 定义 原理 Halcon中的极坐标变换 1.polar_trans_image_ext算子用法与参数剖析 2.polar_trans_region_inv算子用法与参数剖析 圆 ...

最新文章

  1. Sharding-jdbc教程:Springboot整合sharding-jdbc实现读写分离
  2. android doGet和doPost
  3. Java并发编程开发笔记——2线程安全性
  4. ios开发之UIView和UIViewController
  5. Haddop学习:(一)序
  6. nginx 如何显示真实ip
  7. 注释 —— 《clean code》读后感
  8. Filter_细节_执行流程生命周期
  9. java调用打印预览_急求一个用Java实现的打印及打印预览功能的Demo
  10. NDK编译c包含C++头文件时,出现 error: unknown type name 'class' 的解决方法
  11. mysql中gbk编码汉字和英文_MySQL字符集 GBK、GB2312、UTF8区别 解决 MYSQL中文乱码问题...
  12. ajax怎样带值,ajax携带状态值
  13. 如何在Mac上清理磁盘空间?
  14. 盖茨与鲍尔默相处:放权给怒吼“奶妈”
  15. ceph BALANCER
  16. bootstrap table获取表格数据方式
  17. Mongodb相比MYSQL的7大优点
  18. 同步器Synchronizer
  19. deepstream系列gst-shark工具分析插件效率
  20. 计算机显卡显示图片原理,认识显卡!浅析显卡及显卡工作原理

热门文章

  1. ethtool用法 linux_Linux命令--ethtool
  2. Mac抓包工具-Charles
  3. TortoiseGit使用指南
  4. php和mysql实现员工信息管理_0066 使用PHP和MySQL实现学生分数信息管理
  5. 亿图图示MindMaster----问题解决思路展示
  6. 表情包AI生成器:识别人脸情绪,自动配文字
  7. 面试拼多多 Java 岗被刷了三次,在家闭关刷题66天,卷土重来,终获offer
  8. 搭建机器人电控系统——器件选型——如何选择机器人系统电源?
  9. matlab激活后显示重新激活怎么办?
  10. 预装win8重装激活失败