阈值分割图像

阈值分割概念
阈值处理是指剔除图像内像素值高于一定值或者低于一定值的像素点。从而将一幅灰度图像处理为一幅二值图像,有效的实现前景和背景的分离。

二值化,顾名思义,就是将某张图像的像素改成只有两个值,其操作的图像也必须是灰度图。
阈值分割的常用技术

  1. 全局阈值分割

  2. 自适应局部阈值分割
    阈值分割的目的
    1、突出目标对象
    2、简化形态分析

3、增强对比
threshold函数
double threshold(InputArray src, OutputArray dst, double thresh, double maxval, int type);
src:输入图像。
dst:输出图像,与输入图像具有相同的大小和类型。
thresh:设定的阈值。
maxval:当 type 参数为 THRESH_BINARY 或 THRESH_BINARY_INV 时需要设定的最大值。
type:阈值分割的类型


**阈值法(**THRESH_BINARY)
阈值法就是通过设置一个阈值,将灰度图中的每一个像素值与该阈值进行比较,小于等于阈值的像素就 被设置为0(黑),大于阈值的像素就被设置为maxval,将原始图像处理为仅有两个值的二值图像。


反阈值法(THRESH_BINARY_INV


**截断阈值法(**THRESH_TRUNC)
截断阈值法,指将灰度图中的所有像素与阈值进行比较,像素值大于阈值的部分将会被修改为阈值,小 于等于阈值的部分不变。换句话说,经过截断阈值法处理过的二值化图中的最大像素值就是阈值。


低阈值零处理(THRESH_TOZERO
低阈值零处理,字面意思,就是像素值小于等于阈值的部分被置为0(也就是黑色),大于阈值的部分不变。


超阈值零处理(THRESH_TOZERO_INV
超阈值零处理就是将灰度图中的每个像素与阈值进行比较,像素值大于阈值的部分置为0(也就是黑色),像素值小于等于阈值的部分不变。


OTSU****阈值法
OTSU算法是通过一个值将这张图分前景色和背景色(也就是灰度图中小于这个值的是一类,大于这个值的是一类)。
该方法使用的是聚类的思想,它把图像中所有像素点的像素值按灰度级分为两组。原则:
两组之间,灰度值差异最大。
每组之内,灰度值差异最小。
OTSU 阈值法通过以下步骤找到最佳阈值:

  1. 计算直方图:计算图像的灰度直方图。
  2. 计算类内方差和类间方差:对于每一个可能的阈值,计算分割后的两个类的方差。
  3. 选择最佳阈值:选择使类内方差最小(即类间方差最大)的阈值。
    参数type增加"cv2.THRESH_OTSU"参数。
    返回值ret是使用OTSU方法计算并得到的最优阈值
    通过OTSU算法得到阈值之后,就可以结合上面的方法根据该阈值进行二值化,即使在计算出阈值后结合了阈值法和反阈值法。

注意:使用OTSU算法计算阈值时,组件中的thresh参数将不再有任何作用。


自适应局部阈值分割
与全局阈值法相比,自适应二值化更加适合处理亮度分布不均的图像。自适应二值化法能够根据图像的不同区域计算不同的阈值,从而更好地处理亮度不均匀的图像。这种方法的主要优势包括:

  1. 局部适应:自适应二值化法通过对每个小区域分别计算阈值,从而保留更多的细节。

  2. 细节保留:自适应二值化法通过计算局部区域的阈值,可以更好地保留图像中的细节。

  3. 灵活性:自适应二值化法提供了多种计算局部阈值的方法,例如均值法和高斯加权平均法等。
    adaptiveThreshold 函数
    adaptiveThreshold(src, dst, maxValue, adaptiveMethod, thresholdType, blockSize, C);
    src:输入图像,必须是单通道灰度图像
    dst:输出图像,与输入图像 src 具有相同大小和类型。
    maxValue:阈值处理后最大值。
    adaptiveMethod自适应阈值方法。可选择以下两种方法:
    ADAPTIVE_THRESH_MEAN_C`:在小区域内计算平均值作为阈值。
    ADAPTIVE_THRESH_GAUSSIAN_C :在小区域内计算高斯加权和作为阈值。
    thresholdType:阈值类型.
    THRESH_BINARY :大于阈值的像素值设置为 maxValue ,其余设置为 0。
    THRESH_BINARY_INV :大于阈值的像素值设置为 0,其余设置为 maxValue 。
    blockSize:指定计算阈值的邻域大小。

C:从计算得到的阈值中减去的常数值。用于微调二值化结果。
取均值**(ADAPTIVE_THRESH_MEAN_C)**
我们所用到的不断滑动的小区域被称之为,比如3X3的小区域叫做3X3的核,并且核的大小都是奇数个,也就是3X3、5X5、7X7等。
加权求和**(ADAPTIVE_THRESH_GAUSSIAN_C)**
小区域内的像素进行加权求和得到新的阈值,其权重值来自于高斯分布
而在opencv里,当kernel(小区域)的尺寸为1、3、5、7并且用户没有设置sigma的时候(sigma <= 0),核值就会取固定的系数,这是一种默认的值是高斯函数的近似。

相关推荐
Lihua奏13 小时前
从单核到多核:CPU为什么不能再只靠提频变快
深度学习
拾年27514 小时前
大模型的"聪明"从哪来?聊聊 AI 数据集的那些事儿
人工智能·深度学习·机器学习
韩师傅3 天前
海天线算法的前世今生
python·计算机视觉
韩师傅3 天前
当你的甲方设备过烂,要如何快速出效果?
python·计算机视觉
韩师傅3 天前
当你的甲方吐槽天空不够蓝,你应该如何应对
python·计算机视觉
饼干哥哥5 天前
开源Skills|搭建亚马逊动态关键词库系统,每天抓SSS级机会词
人工智能·深度学习·数据分析
武子康7 天前
调查研究-191 SenseVoice 不只是 ASR:把语音从“转文字“升级成“理解状态“
人工智能·深度学习·openai
武子康8 天前
调查研究-189 Kronos 调研:金融 K 线基础模型,是真突破,还是量化圈的新玩具?
人工智能·深度学习·openai
兵慌码乱9 天前
基于 MediaPipe 与 PySide2 的手势交互音乐控制系统实现:轻量化视觉交互全流程解析
python·opencv·计算机视觉·人机交互·手势识别·mediapipe·pyside2
小小杨树12 天前
读懂色彩:拍照调色不再难
算法·计算机视觉·配色