Halcon阈值化算子dual_threshold和var_threshold的理解

Halcon中阈值二值化的算子众多,通常用得最多的有threshold、binary_threshold、dyn_threshold等。

threshold是最简单的阈值分割算子,理解最为简单;binary_threshold是自动阈值算子,它可以自动选出暗(dark)的区域,或者自动选出亮(light)的区域,理解起来也没有难度。

动态阈值算子dyn_threshold理解起来稍微复杂一点,使用dyn_threshold算子的步骤基本是这样的:

① 将原图进行滤波模糊处理。

② 用原图和模糊后的图逐个像素做比较,它可以根据参数分割出原图比模糊后的图灰度高(或者低)若干个灰度值的区域。

举例如下:

处理程序是这样的:

1 read_image (Image, ‘C:/Users/happy xia/Desktop/dynPic.png‘)
2 mean_image (Image, ImageMean, 9, 9)
3 dyn_threshold (Image, ImageMean, RegionDynThresh, 10, ‘dark‘)

程序分析:本例中,将图片模糊后,点阵字的黑色扩散了,随之就是字的黑色不如原图那么黑了,那么通过给定的限值“10”和“dark”,就可以将原图比模糊后的图暗10个灰阶以上的区域(即黑色文字部分)选出来了。

以上所说的三个算子并不是本文的重点,但却是理解下面的两个阈值分割算子的准备知识。

1、dual_threshold

先看程序和效果图再分析。

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 dual_threshold (Image, RegionCrossings, 174, 200, 180)

dual_threshold(Image : RegionCrossings : MinSize, MinGray, Threshold : )

该算子签名中:Threshold 表示用于分割的阈值数值,MinSize表示分割出来的区域的最小面积(即数像素的数目个数),MinGray表示分割出来的区域对应的原图中图像像素的最高灰度不能低于MinGray设定值。

注意图中蓝色矩形小色块的面积是175个像素,因此当MinSize = 174时,它可以被分割出来。

OK,我知道这么说比较拗口。下面我边改变参数边观察效果图,并做简要分析:

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 dual_threshold (Image, RegionCrossings, 176, 200, 180)

效果图如下:

由于最小面积设置为176,那么面积为175像素的矩形小色块就没有被分割出来。

再来改变MinGray参数:

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 dual_threshold (Image, RegionCrossings, 176, 216, 180)

此时观察到,最右边那个齿轮本来分割出来的区域没有了!

通过取色器观察可知,这块区域最亮的灰度大概比211高一点点。

我们把这个值略微调低再看看:

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 dual_threshold (Image, RegionCrossings, 176, 210, 180)

最右边那个齿轮右下角那一块又被分割出来了!

相信通过这样参数的反复调节,大家已经彻底明白了dual_threshold算子的意义和用法。

我们看这个算子的名称——dual是“双”的意思,也就是双阈值。如果我们让参数列表中的MinGray = Threshold,那就是单阈值了。

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 dual_threshold (Image, RegionCrossings, 176, 180, 180)

这个算子是很高效的。如果要完成上面这个程序这样的功能,用threshold算子的话,代码要这样写:

1 read_image (Image, ‘C:/Users/happy xia/Desktop/2.png‘)
2 threshold (Image, Region, 180, 255)
3 connection (Region, ConnectedRegions)
4 select_shape (ConnectedRegions, SelectedRegions, ‘area‘, ‘and‘, 176, 9999999)

也就是说dual_threshold一条算子顶这三条算子。

dual_threshold算子的缺陷:它只能分割出灰度值高的亮区域,不能分割出灰度值低的暗区域。

下面介绍var_threshold算子。

2、var_threshold

(待续,先睡觉)

时间: 2024-10-27 01:22:02

Halcon阈值化算子dual_threshold和var_threshold的理解的相关文章

Opencv3编程入门笔记(4)腐蚀、膨胀、开闭运算、漫水填充、金字塔、阈值化、霍夫变换

19      腐蚀erode.膨胀dilate 腐蚀和膨胀是针对图像中的白色部分(高亮部分)而言的,不是黑色的.除了输入输出图像外,还需传入模板算子element,opencv中有三种可以选择:矩形MORPH_RECT,交叉形MORPH_CROSS,椭圆形MORPH_ELLIPSE.Matlab中会有更多一点的模板. 例如: Mat element = getStructuringElement(MORPH_RECT,Size(15,15)); erode(srcImage,dstImage,

OpenCV的阈值化函数threshold

在OpenCV中,threshold用来进行对图像(二维数组)的二值化阈值处理 通过查找OpenCV在线文档,发现存在很多函数: 其函数原型如下: 1. C版本的:函数原型: void cvThreshold( const CvArr* src, CvArr* dst, double threshold,double max_value, int threshold_type ); src,dst: 不必多说,其要求类型一致性: threshold:需要设置的阈值,当像素值大于某个数字时,设定一

【练习6.1】阈值化、腐蚀、cvFilter2D及自定义滤波器

提纲 题目要求 程序代码 结果图片 要言妙道 题目要求: 用cvFilter2D创建一个滤波器,只检测一副图像里的60度角的直线.将结果显示.做一下分部步操作: a.自定义卷积核,使用cvFilter2D,处理图像 b.对a的结果图片阈值化,是60度上的直线更清晰 c.对b的结果腐蚀 备注: 对于这道题,我的理解是,只保留一副图片60度角上的直线,是为了增加对自定义滤波器的熟悉度 在Opencv卷积滤波cvFilter2D一文中有更多常用的滤波器模板可以借鉴 程序代码: 1 // OpenCVE

opencv学习之路(13)、图像阈值化

一.图像阈值化简介 二.固定阈值 三.自适应阈值 1 #include<opencv2/opencv.hpp> 2 using namespace cv; 3 4 void main(){ 5 Mat src=imread("E://1.jpg",0);//以灰度模式读入 6 Mat dst; 7 //threshold(src,dst,100,255,CV_THRESH_BINARY); 8 //adaptiveThreshold(src,dst,255,CV_ADAPT

【练习5.6】漫水填充法、阈值化、cvSaveImage保存格式

提纲 题目要求 程序代码 结果图片 题目要求: 从噪声图像中创建一个清晰的掩码.完成练习5后,保留图形中最大的图形区域.在图像的左上角设置一个指针,然后让他遍历图像.当你发现像素值为255的时候,存储其位置,然后对其漫水填充,新颜色值为100,.读出漫水填充法返回的连续区域,记录下其面积.如果图像中有另一个较大的区域,那么用0值对这个相对较小的区域进行颜色填充,然后删除已记录的面积.如果新的区域大于之前的区域,那么以0值填充之前的区域并删除他的位置.最后以颜色值255填充剩余的最大区域,显示结果

灰度图像阈值化分割常见方法总结及VC实现

转载地址:http://blog.csdn.net/likezhaobin/article/details/6915755 在图像处理领域,二值图像运算量小,并且能够体现图像的关键特征,因此被广泛使用.将灰度图像变为二值图像的常用方法是选定阈值,然后将待处理图像的每个像素点进行单点处理,即将其灰度值与所设置的门限进行比对,从而得到二值化的黑白图.这样一种方式因为其直观性以及易于实现,已经在图像分割领域处于中心地位.本文主要对最近一段时间作者所学习的阈值化图像分割算法进行总结,全文描述了作者对每种

【数字图像处理】五.MFC图像点运算之灰度线性变化、灰度非线性变化、阈值化和均衡化处理具体解释

本文主要讲述基于VC++6.0 MFC图像处理的应用知识,主要结合自己大三所学课程<数字图像处理>及课件进行解说.主要通过MFC单文档视图实现显示BMP图片点运算处理.包含图像灰度线性变换.灰度非线性变换.图像阈值化处理.图像均衡化处理等知识,并结合前一篇论文灰度直方图进行展示 .同一时候文章比較具体基础,希望该篇文章对你有所帮助,尤其是刚開始学习的人和学习图像处理的学生. [数字图像处理]一.MFC具体解释显示BMP格式图片 [数字图像处理]二.MFC单文档切割窗体显示图片 [数字图像处理]

OpenCV实现图像阈值化

纯粹阅读,请移步OpenCV实现图像阈值化 效果图 源码 KqwOpenCVBlurDemo 阈值化是一种将我们想要在图像中分析的区域分割出来的方法. 我们把每个像素值都与一个预设的阈值做比较,再根据比较的结果调整像素值. 类似这样 Imgproc.threshold(src,src,100,255,Imgproc.THRESH_BINARY); 其中100是阈值,255是最大值(纯白色的值). 常量 名称 常量 二值阈值化 Imgproc.THRESH_BINARY 阈值化到零 Imgproc

openCV—Python(10)—— 图像阈值化处理

一.函数简介 1.threshold-图像简单阈值化处理 函数原型:threshold(src, thresh, maxval, type, dst=None) src:图像矩阵 thresh:阈值 maxVal:像素最大值 type:阈值化类型 2.adaptiveThreshold-图像自适应阈值化处理 函数原型:adaptiveThreshold(src, maxValue, adaptiveMethod, thresholdType, blockSize, C, dst=None) sr