【图像处理】阈值分割

2023-11-08

图像阈值分割

一、简介

阈值分割常用在灰度图像中,将灰度值以一定的阈值进行分割,分为0或者255,使图像的像素值只有0或者255(非黑即白)。由于不同物体的像素值不同,根据设置的阈值,将图像中的物体以像素级分割出来,有利于图像的进一步处理,使图像变得简单,而且数据量减小,能凸显出感兴趣的目标的轮廓。要进行二值图像的处理与分析,首先要把灰度图像二值化,得到二值化图像。

二、二值化处理(全局阈值)

图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。
常用的二值化处理格式选择:

在这里插入图片描述
在这里插入图片描述

# -*- coding:utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt 

img = cv2.imread('img.jpg')
#img --彩色图片
#阈值 这里将80 设置为阈值,大于80的全部变为后边给定的255,小于80的转为0
#最大值 255
#格式cv2.THRESH_BINARY   二值处理,
# ret,阈值;bin,二值处理后的图像
ret, thresh1 = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY)
ret, thresh2 = cv2.threshold(img, 80, 255, cv2.THRESH_BINARY_INV)
ret, thresh3 = cv2.threshold(img, 80, 255, cv2.THRESH_TRUNC)
ret, thresh4 = cv2.threshold(img, 80, 255, cv2.THRESH_TOZERO)
ret, thresh5 = cv2.threshold(img, 80, 255, cv2.THRESH_TOZERO_INV)
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in range(6):
    plt.subplot(2,3, i+1)
    plt.imshow(images[i])
plt.suptitle('fixed threshold')
plt.show()

在这里插入图片描述

示例中使用的是原彩色图,二值化时将图片每个通道都进行了二值化处理。当使用灰度图片时,即可显示非黑即白的图片。

示例:

import cv2
import numpy as np
# 直接读取灰度图,没有其他色彩,阈值变换后只剩黑白。
img = cv2.imread('img.jpg', 0)
ret,bin = cv2.threshold(img,80,255,cv2.THRESH_BINARY)

原图:在这里插入图片描述
效果图:在这里插入图片描述

三、自适应阈值

当同一副图像需要不同部分需要不同的亮度时,全局阈值就不太适用了,这时需要使用到自适应阈值,自适应阈值会在图片中的不同区域计算不同的阈值,得到一个层次分明的图像。

代码示例:

# -*- coding:utf-8 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt 

#使用自动阈值时,只能使用单通道图片
img = cv2.imread('img.jpg',0)
# adaptiveThreshold(src,maxValue,adaptiveMethod,thresholdType,blockSize,C,dst=None)
#maxValue:Double类型的,阈值的最大值
#adaptiveMethod:Int类型的,这里有两种选择
# 	ADAPTIVE_THRESH_MEAN_C(通过平均的方法取得平均值)
# 	ADAPTIVE_THRESH_GAUSSIAN_C(通过高斯取得高斯值)
# thresholdType:Int类型的,方法如下:
# 	THRESH_BINARY 二进制阈值化 -> 大于阈值为1 小于阈值为0
# 	THRESH_BINARY_INV 反二进制阈值化 -> 大于阈值为0 小于阈值为1
# 	THRESH_TRUNC 截断阈值化 -> 大于阈值为阈值,小于阈值不变
# 	THRESH_TOZERO 阈值化为0 -> 大于阈值的不变,小于阈值的全为0
# 	THRESH_TOZERO_INV 反阈值化为0 -> 大于阈值为0,小于阈值不变
#blockSize:Int类型的,这个值来决定像素的邻域块有多大。
# C:偏移值调整量,计算adaptiveMethod用到的参数。
thresh1 =cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C,cv2.THRESH_BINARY,25,10)
thresh2 = cv2.adaptiveThreshold(img,255,cv2.ADAPTIVE_THRESH_MEAN_C,cv2.THRESH_BINARY,25,10)
images = [img,thresh1,thresh2]

for i in range(3):
    plt.subplot(1,3, i+1)
    plt.imshow(images[i])
plt.show()

在这里插入图片描述

四、大津阈值法(Otsu’s Binarization)

大津阈值法是一种基于直方图的二值化方法,需要和全局阈值共同使用。

过程:

  1. 计算图像直方图;
  2. 设定一阈值,把直方图强度大于阈值的像素分成一组,把小于阈值的像素分成另外一组;
  3. 分别计算两组内的偏移数,并把偏移数相加;
  4. 把0~255依照顺序多为阈值,重复1-3的步骤,直到得到最小偏移数,其所对应的值即为结果阈值。

代码示例:

img = cv2.imread('img.jpg',0)
ret,thresh = cv2.threshold(img,80,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【图像处理】阈值分割 的相关文章

随机推荐

  • WordBias

    目录 WordBias 安装 界面 案例1 极端主义 案例2 pretty beautifull 论文 词嵌入做为一种词向量模型 可以从文本中计算出隐含的上下文情景信息 态度及偏见 通过词向量距离的测算 就可以间接测得不同群体对某概念 组织
  • 软件工程毕业设计选题c语言,经典软件工程专业论文选题 软件工程专业论文题目选什么比较好...

    100道 关于经典软件工程专业论文选题汇总 作为大学生的毕业生应该明白了软件工程专业论文题目选什么比较好 选一个好的题目后续的软件工程专业论文写作起来会更轻松 一 比较好写的软件工程专业论文题目 1 面向软件工程专业的 算法设计与分析 课程
  • python的exec函数

    exec 是 Python 内置的一个函数 用于在运行时执行动态生成的 Python 代码 它以字符串形式接收一个代码块 并将其编译并执行为可执行的 Python 代码 exec 函数的语法如下 exec object globals No
  • Android控件之AutoCompleteTextView、MultiAutoCompleteTextView探究

    在Android中提供了两种智能输入框 它们是AutoCompleteTextView MultiAutoCompleteTextView 它们的功能大致一样 显示效果像Google搜索一样 当你在搜索框里输入一些字符时 至少两个字符 会自
  • 【商业知识】中国消费者洞察

    文章目录 一 市场 中国消费市场已进入复苏期 二 政策 政策不断优化消费环境 三 社会 消费者逐步步入正确消费时代 四 品牌 科普专业知识 加深消费者对技术力的感知 五 电商直播 提供源头优质产品 提高生活质量 六 信息平台 科学消费和内容
  • C++ 模板特化

    我们不可能写出对所有类型都适合的模板 某些情况下 通用模板定义对于某个类型可能是完全错误的 这个时候我们需要编写比模板函数更有效率的函数 这就是模板特化 思考一个例子 编写比较函数的泛型函数模板 template
  • 使用IDEA打不开setting怎么解决?

    问题 汉化IDEA后 怎么打不开setting 解决办法 在关闭idea的条件下 使用解压软件打开汉化包 打开不是解压哦 将其messages文件夹内的 IdeBundle properties 系统设置 setting 外观选项加载不出来
  • 建立实体类和数据库映射(注解)

    1 建立实体类和数据库映射 Select select from user Results id resultMap value Result id true property userId column id Result propert
  • 服务器中勒索病毒了

    非常重要的一点 备份好数据 异地备份
  • 多版本node的安装与切换详细操作

    多版本node的安装与切换详细操作 安装多版本node的原因 方法一 利用nvm进行管理 NVM 简介 安装前须知 卸载已安装的nodeJS nvm 的安装与使用 node 的不同版本安装及切换 方法二 通过配置环境变量 切换node时只需
  • LeetCode刷题指南(一)

    以下是我个人做题过程中的一些体会 1 LeetCode的题库越来越大 截止到目前 已经有321个问题了 对于大多数人来说 没有时间也没有必要把所有题目都做一遍 时间充裕可以随意 刷个100题左右应该就差不多了 可以考虑序号为前100多的题目
  • js编程题总结

    lazyman 实现一个LazyMan 可以按照以下方式调用 LazyMan Hank 输出 Hi This is Hank LazyMan Hank sleep 10 eat dinner 输出 Hi This is Hank 等待10秒
  • QT常见错误及解决方法

    1 error header was not declared in this scope 在使用此变量之前没有对其进行定义 2 error RtlWerpReportException failed with status code 10
  • 树莓派体验12 - 树莓派I2C接口获取温湿度

    i2c tools工具安装 apt get install i2c tools i2c tools包含如下命令 i2cdetect i2cdump i2cget i2cset 通过raspi config打开树莓派I2C 执行i2cdete
  • 30天自制操作系统学习-第14天

    1 提高分辨率 修改asmhead nas画面模式的设定 只考虑支持QEMU模拟器的显卡 设定画面模式 MOV BX 0x4101 VBE的640x480x8bi彩色 MOV AX 0x4f02 INT 0x10 MOV BYTE VMOD
  • Windows CMD 添加自定义快捷指令

    首先在想要存放快捷指令文件的位置创建一个txt文档 我放在了c盘的user文件夹下 使用vscode打开刚刚创建的txt文件 把后缀改为 bat记住要确认改成了 bat而不是 bat txt 随便写点快捷指令 可以先拿start 浏览器来测
  • 基于SSM的商城管理系统

    1 项目介绍 基于SSM的商城管理系统6拥有管理员账号 具有商品管理 会员管理 添加视频 购物车 搜索商品等功能 2 项目技术 后端框架 SSM Spring SpringMVC Mybatis 前端技术 jsp css JavaScrip
  • ResNet解决了什么问题?

    ResNet解决的根本问题是什么 相同深度的一般前向网络的解集合和resnet的解集合是相等的 所以resnet解决的并不是模型表达能力的问题 而是模型优化问题 ResNet是如何解决优化问题的 1 更平滑的解空间的流形 从文献Visual
  • 锋利的 jQuery(一)--配置jQuery、 解决jQuery和其他库的冲突

    1 配置jQuery环境 1 获取jQuery最新版本 进入jQuery的官方网站http jquery com 如图所示的右边的GRAB THE LATEST VERSION区域 下载最新的jQuery库文件 2 jQuery库类型说明
  • 【图像处理】阈值分割

    图像阈值分割 一 简介 阈值分割常用在灰度图像中 将灰度值以一定的阈值进行分割 分为0或者255 使图像的像素值只有0或者255 非黑即白 由于不同物体的像素值不同 根据设置的阈值 将图像中的物体以像素级分割出来 有利于图像的进一步处理 使