今天主要学习阈值处理
一、全局阈值
阈值:阈值就是一个指定的像素灰度值的范围,假设阈值为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
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:表示提取较暗部分
二、局部阈值分割法
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)
三、其他阈值
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')
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)