今天主要学习阈值处理

一、全局阈值

阈值:阈值就是一个指定的像素灰度值的范围,假设阈值为0~255灰度值,阈值处理就是将图像中的像素灰度值与该阈值进行比较,落在该范围内的像素成为前景,其余的像素成为背景

1.threshold

*全局阈值
read_image(Image,'C:/Users/Desktop/code/data/codes.jpg')
rgb1_to_gray(Image, GrayImage)
threshold(GrayImage, Region, 0, 128)

表示输入图像为GrayImage,输出0~128灰度范围内的像素区域Region

halcon自适应局部直方图均衡化 halcon自适应阈值_Desktop

2. auto_threshold

*自适应阈值
read_image(Image1,'C:/Users/Desktop/code/data/shapes.jpg')
rgb1_to_gray(Image1, GrayImage1)
auto_threshold(GrayImage1, Regions, 8)

 8:表示参数Sigma为对灰度直方图进行高斯平滑的核的大小

Sigma值越大,平滑效果越显著,直方图波峰越少,分割的区域越少

Sigma值越小,直方图平滑的效果越不明显,分割的次数越多

3.binary_threshold

*自动全局阈值分割
read_image(Image2,'C:/Users/Desktop/code/data/codes.jpg')
rgb1_to_gray(Image2, GrayImage2)
binary_threshold(GrayImage2, Region1, 'max_separability', 'dark', UsedThreshold)

max_separability:表示在直方图中对最大的可分性进行分割

dark:表示提取较暗部分

halcon自适应局部直方图均衡化 halcon自适应阈值_学习_02

二、局部阈值分割法

1.dyn_threshold

该算子分为三步:

a.读取原始图像

b.使用平滑滤波器对原始图像进行适当平滑

c.使用算子比较原始图像与均值处理后的图像局部像素差异,将差异值大于设定值的点提取出来

read_image(Image,'C:/Users/Desktop/code/data/text.jpg')
rgb1_to_gray(Image, GrayImage)
*由于图像对比度比较低,因此对图像进行相乘,增强对比度
mult_image(GrayImage, GrayImage, ImageResult, 0.005, 0)
*使用平滑滤波器对原始图像进行适当平滑
mean_image(ImageResult, ImageMean, 50, 50)
*动态阈值分割,提取字符区域
dyn_threshold(ImageResult, ImageMean, RegionDynThresh, 4,'not_equal')
*开运算,去除无意义的小的杂点
opening_circle(RegionDynThresh, RegionOpening, 1.5)
dev_clear_window()
dev_display(RegionOpening)

 

read_image(Image1,'C:/Users/Desktop//code/data/garlic.jpg')
rgb1_to_gray(Image1, GrayImage1)
mean_image(GrayImage1, ImageMean1, 30, 30)
dyn_threshold(Image1,ImageMean1, RegionDynThresh1, 30, 'not_equal')
*腐蚀操作,去除杂点
erosion_circle(RegionDynThresh1, RegionErosion, 1.5)

halcon自适应局部直方图均衡化 halcon自适应阈值_Desktop_03

 三、其他阈值

1.var_threshold

该算子分割的依据是局部的均值和标准差,选择图像中邻域像素满足阈值条件的区域进行分割

该阈值不是一个固定的值,而是在点(x,y)的邻域中使用矩形mask进行扫描,分别用点(x,y)的灰度与均值图像中的点(x,y)的灰度,和矩形的中心点的标准差灰度进行比较

read_image(Image,'C:/Users/Desktop/code/data/holes.jpg')
rgb1_to_gray(Image, GrayImage)
*设置矩形,选择ROI
gen_rectangle1(Rectangle,170,80,370,510)
reduce_domain(GrayImage, Rectangle, ImageReduced)
var_threshold(ImageReduced, Region, 15, 15, 0.2, 35, 'dark')

 

halcon自适应局部直方图均衡化 halcon自适应阈值_halcon自适应局部直方图均衡化_04

2.char_threshold

该算子一般用于提取字符,适用于在明亮的背景上提取黑暗的字符

运算过程:首先计算一个灰度曲线,然后给定一个Sigma值,用于平滑这个曲线,最后将前景与背景区分开来

read_image(Image1,'C:/Users/Desktop/code/data/char.jpg')
rgb1_to_gray(Image1, GrayImage1)
char_threshold(GrayImage1, Region, Characters, 6, 95, Threshold)

 

halcon自适应局部直方图均衡化 halcon自适应阈值_Desktop_05