Halcon学习(4-6)Region处理:动态阈值,分水岭


dyn_threshold算子


动态阈值算子应付以下情况:


对于一些应用来说,确定一个全局阈值是不可能的,比如,因为

没有通用的参考图像来确定阴影校正

图像的背景是非均匀的

物体在局部范围内通常比背景亮些或者黑些

在这种情况下,寺找一个固定阈值来区分物体和背景是丌太容易的

问题: 局部邻域的确定

局部邻域可以由平滑滤波器来确定(比如, mean_image或binomial_filter)


动态阈值算子的经验说明:


滤波的mask尺寸确定了做能分割出来物体的最大尺寸

经验之谈

    mean_image的滤波尺寸> 被提取物体的直徂

类似条件应用到Gauss filter

如果滤波掩码尺寸太大,那么相邻非常近的物体将会连在一块

劢态阈值也会返回沿着边缘的处理结果

局部阈值斱法

通过平均图像灰度来确定局部邻域

使用的滤波掩码尺寸大于字符的笔划宽度,推荐2×D+1

选出的所有像素要比局部邻域要黑,也就是比均值滤波后的图像要黑

同常下面两个算子配合使用:

mean_image(Image, ImageMean, 21, 21)

dyn_threshold(Image, ImageMean,Region, 15, 'dark')


一个例子:

下图中需要提取全部的小斑点。其困难有两点:

  1. 大斑点与小斑点之间无法通过同一个阈值参数分割,因为灰度值差异太大。

  2. 小斑点之间其实也无法使用同一个阀值参数进行分割。道理同上面。


原图:

image.png



下面的代码很好的完成了任务要求:

read_image (Image, 'particle')
*获取图像
 
dev_display (Image)
*显示图像
 
threshold (Image, Large, 110, 255)
*灰度阈值分割图像
 
dilation_circle (Large, LargeDilation, 7.5)
*圆角膨胀
 
dev_display (Image)
dev_set_draw ('margin')
dev_set_line_width (3)
dev_set_color ('red')
dev_display (LargeDilation)
dev_set_draw ('fill')
*显示图像
 
complement (LargeDilation, NotLarge)
*返回补集图像,即获得去除大斑点后的图像NotLarge
 
reduce_domain (Image, NotLarge, ParticlesRed)
*减去除了NotLarge图像,即去除大斑点后的图像,减少运算
 
mean_image (ParticlesRed, Mean, 31, 31)
*平滑处理图像
 
dyn_threshold (ParticlesRed, Mean, SmallRaw, 3, 'light')
*选择灰度阈值;当前背景之间差异明显时,可以设定全局阈值进行threshold,
*但很多情况下由于背景不均一,
*目标体经常表现为比背景局部亮一些或暗一些,无法确定全局阈值操作,
*需要通过其邻域找到一个合适的阈值进
*行分割。ThresholdImage是参考图像,通过与OrigImage对比找到领域确定阈值,
*一般采用平滑滤波算子
*(如mean_image)获取参考图像。offset设定邻域比较的区间范围,
*灰度值变化在offset范围内均是可以接受的。
opening_circle (SmallRaw, Small, 2.5)
*消除小区域(小于圆形结构元素)和光滑的边界地区
 
connection (Small, SmallConnection)
*显示联通区域
 
dev_display (Image)
*这句不加窗口显示效果会有雪花
 
dev_set_colored (12)
dev_display (SmallConnection)
*显示结果图像


 下面给出动态阈值算子的三个参数的中间结果图像。

image.png

图1: 区域ParticlesRed


image.png

图2: 区域Mean


image.png

图3  dyn_threshold算子计算后的结果


当前背景之间差异明显时,可以设定全局阈值进行threshold,但很多情况下由于背景不均一,目标体经常表现为比背景局部亮一些或暗一些,无法确定全局阈值操作。

如果对ParticlesRed区域做阈值,你会发现无论怎么调节最小与最大灰度值分割线,都无法分割出如图3那样的全部的小斑点。
这个时候就需要使用算子dyn_threshold

image.png


var_threshold算子


这个也属于动态阈值算子。

这个算子有着以下特征:

较好地分开前景和背景

对丌合适的参数设置丌敏感

因为只使用单个算子就能实现,所以编程容易

缺点是相比dyn_threshold而言需要更长的执行时间


下面示例可以很好分离出前景与背景。

    rgb1_to_gray(Image, GrayImage)
    var_threshold(GrayImage, Region, Width, Height, 0.2, 19, 'dark')

image.png



watersheds_threshold分水岭阈值算子


 如果对比度差异比较少,watersheds_threshold 可以使得相邻的盆地合并

 即使在有噪声的条件下,也可以分割区域


watersheds_threshold (GrayImage, Basins, 33)

image.png


区域连通算子regiongrowing

regiongrowing(Image : Regions : Row, Column, Tolerance, MinSize : )

区域连通算子( 区域连通算法,将图象被分割为区域 ): 


  Row:被测试的区域的垂直距离

  Column:被测试的区域的水平距离

  Tolerance:两个点之间的最大的灰度差距 :|g_1 - g_2| < Tolerance

  MinSize:最小的输出区域(记输出的连通区域的尺寸)


例 :regiongrowing (Image, Regions, 3, 3, 6, 100)

原图:

image.png


regiongrowing(Image,Regions,3,3,26,55)
处理结果如下图,可以很好的分离了黑白区域!

image.png


--------------------- 

作者:hackpig
来源:www.skcircle.com
版权声明:本文为博主原创文章,转载请附上博文链接!


halocn基础系列教程列表:


Halcon学习(27-2)halcon测量技术:找线

Halcon学习(27-1)halcon测量技术:亚像素,亚像素精度

Halcon学习(26)dev_get_preferences的用法

Halcon学习(25)if、switch和try

Halcon学习(24)总结(1)

Halcon学习 (22-2) 标定助手

Halcon学习(22)摄像机标定(函数详解)

Halcon学习(21)摄像机标定常用函数(2)

Halcon学习(20)摄像机标定常用函数(1)

Halcon学习(19)标定文件的生成

Halcon学习(18)如何制作标定板

Halcon学习(17)标定板的规格

Halcon学习(16)函数调用

Halcon学习(15)角点检测

Halcon学习(14)绘图

Halcon学习(13)参数和数据结构

Halcon学习(11)边缘检测

Halcon学习(9)两幅图像之间处理

Halcon学习(8)文本操作

Halcon学习(7)图像中显示文字

Halcon学习(6)计数与排序

Halcon学习(5)获取特征点

Halcon学习(4-7)Region相关的算子

Halcon学习(4-6)Region处理:动态阈值,分水岭

Halcon学习(4-5)Region处理:合并区域,扩大和缩小区域,取区域特征值

Halcon学习(4-4)Region处理: 区域相减,区域求补集

Halcon学习(4-3)Region处理:区域连通

Halcon学习(4-2)Region处理:选择区域,分割图像

Halcon学习(4-1)ROI感兴趣区域,reduce_domain和crop_domain,鼠标绘制区域

Halcon学习(3)赋值与数组操作

Halcon学习(2)图像获取与相关参数

Halcon学习(1)读取多张图片


视觉检测之产品瑕疵检测


视觉检测之产品瑕疵检测(1)污点检测

视觉检测之产品瑕疵检测(2)金属表面疤痕

视觉检测之产品瑕疵检测(3)赃污检测

视觉检测之产品瑕疵检测(4)表面划痕


视觉检测之焊点检测


视觉检测之焊点检测(五):动态定位焊点区域ROI续

视觉检测之焊点检测(六):过滤非焊点区域的方法总结

 视觉检测之焊点检测(四):动态定位焊点区域ROI

视觉检测之焊点检测(三):从干扰背景中提取焊点

视觉检测之焊点检测(二):基于形态学的基础焊点检测方法

视觉检测之焊点检测(一):客户需求和焊点检测工艺要求


模板匹配/仿射变换


halcon之屌炸天的变形匹配(1)

Halcon二维仿射变换实例探究

Halcon中模板匹配方法的总结归纳

Halcon之NCC模板扫盲贴

HALCON形状模板匹配shape_model经验及例子

halcon模板匹配,创建模板的总结

Halcon视觉检测——基于灰度的模板匹配

halcon模板匹配 scaled_shape_model模板的另一个例子

Halcon二维仿射变换实例探究

Halcon中两种实现旋转的方法rotate_image和affine_trans_image

halcon的 shape_model模板匹配的算子使用流程的总结

find_shape_mode参数详解及时长优化

halcon的三种模板匹配方法总结

Halcon基于形状特征的模板匹配


本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864