例程:surface_scratch.hdev

说明:这个程序利用局部阈值和形态学处理提取表面划痕

代码中绿色部分为个人理解和注释,其余为例程中原有代码

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

dev_close_window()
dev_update_window(‘off’)
*****
*step: acquire image //获取图片
*****
read_image(Image,’surface_scratch’) //读入图片名为’surface_scratch’的图片
get_image_size(Image,Width,Height) //获取图像的尺寸:宽、高
//在坐标为(0,0)处打开一个图像窗口。其宽和高分别是Width和Width,窗口的句柄为WindowID
dev_open_window_fit_image(Image,0,0,Width,Width,WindowID)
//设置窗口中显示的字体颜色,大小,加粗,倾斜
set_display_font(WindowID,12,’Courier’,’true’,’false’)
dev_set_draw(‘margin’) //设置区域填充类型:’margin’ or ‘fill’
dev_set_line_width(4) //设置线宽,这个在填充类型为fill时效果不明显 dev_display(Image) //显示图片
disp_continue_message(WindowID,’black’,’true’) //显示继续消息,等待用户按F5继续执行
stop() *****
*step: segment image
*****
*-> using a local threshold
mean_image(Image,ImageMean,7,7) //用7×7的窗口对图像进行均值滤波
dyn_threshold(Image,ImageMean,DarkPixels,5,’dark’) //利用本地阈值进行图像分割 *->extract connected components
connection(DarkPixels,ConnectedRegions) //对区域进行连通运算
dev_set_colored(12) //设置区域显示的颜色数目
dev_display(ConnectedRegions) //显示图像
disp_continue_message(WindowID,’black’,’true’)//显示继续提示,提示继续
stop() *****
*step: process regions
*****
*->select large regions
select_shape(ConnectedRegions,SelsectedRegions,’area’,’and’,10,1000) //区域选择,用面积的形态特征选择面积在10到10000间的区域
dev_display(Image) //显示原图
dev_display(SelectedRegions) //显示选择的区域
disp_continue_message(WindowID,’black’,’true’) //显示继续提示,提示继续
stop() *->visualize fractioned scratch
open_zoom_window(0,round(Width/2),2,303,137,496,3,WindowHandleZoom)
dev_set_color(‘blue’) //设置显示颜色(蓝色),功能与dev_set_colored类似
dev_display(Image) //显示原图
dev_display(SelectedRegions) //显示选中的区域图
disp_continue_message(WindowID,’black’,’true’) //显示继续提示信息
stop() *->merge fractioned scratches via morphology
union1(SelectedRegions,RegionUnion) //合并所有区域
dilation_circle(RegionUnion,RegionDilation,3.5) //用半径3.5 的掩膜进行膨胀
dev_display(Image) //显示原图
dev_display(RegionDilation) //显示膨胀后的区域图
disp_continue_message(WindowID,’black’,’true’)//显示继续提示信息
stop()
skeleton(RegionDialtion,Skeleton)      //计算区域的中轴,见例程:surface_scratch.hdev
connection(Skeleton,Errors) //连通操作,以便后面进行区域选择
dev_set_colored(12) //设置颜色
dev_display(Image) //显示原图
dev_display(Errors) //显示所有抓痕
disp_continue_message(WindowID,’black’,’true’) //显示继续提示信息
stop() *->distinguish small and large scratches
close_zoom_window(WindowHandleZoom,Width,Height) //关闭缩放窗口
select_shape(Errors,Scratches,’area’,’and’,50,10000)//选择区域面积在50到10000的作为划痕
select_shape(Errors,Dots,’area’,’and’,1,50) //选择区域面积在1到50 的作为点
dev_display(Image) //显示原图
dev_set_color(‘red’) //设置区域显示颜色为红色
dev_display(Scratches) //显示条状划痕(显示为红色)
dev_set_color(‘blue’) //设置区域显示颜色蓝色
dev_display(Dots) //显示点状划痕(显示为蓝色)

Halcon学习笔记之缺陷检测(一)的更多相关文章

  1. Halcon学习笔记之缺陷检测(二)

    例程:detect_indent_fft.hdev 说明:这个程序展示了如何利用快速傅里叶变换(FFT)对塑料制品的表面进行目标(缺陷)的检测,大致分为三步: 首先,我们用高斯滤波器构造一个合适的滤波 ...

  2. Halcon学习笔记之支持向量机(二)

    例程:classify_halogen_bulbs.hdev 在Halcon中模式匹配最成熟最常用的方式该署支持向量机了,在本例程中展示了使用支持向量机对卤素灯的质量检测方法.通过这个案例,相信大家可 ...

  3. OpenCV 学习笔记 07 目标检测与识别

    目标检测与识别是计算机视觉中最常见的挑战之一.属于高级主题. 本章节将扩展目标检测的概念,首先探讨人脸识别技术,然后将该技术应用到显示生活中的各种目标检测. 1 目标检测与识别技术 为了与OpenCV ...

  4. halcon学习笔记——机器视觉工程应用的开发思路【转】

    转自:http://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html 机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应 ...

  5. OpenCV 学习笔记 05 人脸检测和识别

    本节将介绍 Haar 级联分类器,通过对比分析相邻图像区域来判断给定图像或子图像与已知对象是否匹配. 本章将考虑如何将多个  Haar 级联分类器构成一个层次结构,即一个分类器能识别整体区域(如人脸) ...

  6. 【转】cs231n学习笔记-CNN-目标检测、定位、分割

    原文链接:http://blog.csdn.net/myarrow/article/details/51878004 1. 基本概念 1)CNN:Convolutional Neural Networ ...

  7. Halcon学习笔记1

    转:https://www.cnblogs.com/hanzhaoxin/archive/2013/02/15/2912879.html 机器视觉工程应用主要可划分为硬件和软件两大部分. 硬件:工程应 ...

  8. Halcon学习笔记之支持向量机(一)

    例程:class_overlap_svm.hdev 说明:这个例程展示了如何用一个支持向量机来给一幅二维的图像进行分类.使用二维数据的原因是因为它可以很容易地联想成为区域和图像.本例程中使用了三个互相 ...

  9. mxnet深度学习实战学习笔记-9-目标检测

    1.介绍 目标检测是指任意给定一张图像,判断图像中是否存在指定类别的目标,如果存在,则返回目标的位置和类别置信度 如下图检测人和自行车这两个目标,检测结果包括目标的位置.目标的类别和置信度 因为目标检 ...

随机推荐

  1. android百度地图中的地图缩放级别

    前期搭建百度地图的环境就不说了,网上一搜一大把,这里只讲地图的缩放,大神可以直接绕道 首先在类的内部初始化一个百度地图的对象 private BaiduMap mBaiduMap; 然后在OnCrea ...

  2. Linux下向SVN服务器添加新文件步骤

    1.将文件checkout到本地目录 svn checkout path(path是服务器上的目录)   例如:svn checkout svn://192.168.1.1/pro/domain    ...

  3. shell运行报 too many arguments错误

    有时候shell在运行的时候可能会报 too many arguments错误,出现这种错误的一般情况是出现了多值问题,也就是一个变量可能有多个值了. 例:#!/bin/sh echo "I ...

  4. C# 序列化(二)二进制序列化的案例

    这篇是针对上一篇讲序列化的文章的一个实际案例,WinForm程序的主界面如下:

  5. iOS 自定义view里实现控制器的跳转

    1.view里实现控制器的modal 拿到主窗口的根控制器,用根控制器进行modal需要的modal的控制器 场景:点击自定义view里的按钮实现控制器的modal UIViewController ...

  6. 实例介绍Cocos2d-x开关菜单

    开关菜单是MenuItemToggle类实现的,它是一种可以进行两种状态切换的菜单.它可以通过下面的函数创建: static MenuItemToggle*createWithCallback  ( ...

  7. iOS定位 - 普通定位(没有地图) - 反地理编码(得到具体位置)

    #import <CoreLocation/CoreLocation.h> 使用到的头文件 要引入CoreLocation这个包 <CLLocationManagerDelegate ...

  8. 生动详细解释javascript的冒泡和捕获,包懂包会(转)

    前言:虽然精通jquery,但对它的原型javascript却不是很了解,最近在学习javascript中遇到了一些困难,比如冒泡和捕获,很多次被提到,但又不知究竟应用在何处.找到了一些好文章解惑,在 ...

  9. 遇见NodeJS:JavaScript的贵人

    在大家的印象中,相当长一段时间里,JavaScript是一门脚本语言,一般不能成为某个项目的担纲主角,作用只是在浏览器里帮忙校验校验输入是不是正确,响应一下鼠标.键盘事件,或者让某个HTML元素动起来 ...

  10. ArcGIS Desktop开发基础(转)

    http://www.cnblogs.com/maweifeng/archive/2006/07/19/455024.html  原文地址 ArcGIS Desktop开发的类型 ○ 自定义ArcMa ...