图像处理 | 图像二值化

news2025/1/13 1:30:52

在图像处理领域,图像二值化是一个重要的操作,它将彩色或灰度图像转换为只有两种颜色(通常是黑白)的图像。二值化广泛应用于文字识别、图像分割、边缘检测等领域,尤其在处理简洁和高对比度的图像时非常有效。本文将深入介绍图像二值化的概念、原理、常见算法及应用场景。


1. 什么是图像二值化?

图像二值化是指将彩色或灰度图像转换为二值图像(也称为黑白图像)的过程。二值图像只有两种像素值,一般是0和255,分别代表黑色和白色。

二值化的目标

通过将图像中的像素值转化为两个极端值(通常是0和255),使得图像的特征更加突出,便于进一步的图像处理,比如轮廓提取、对象检测等。

常见应用

  • 字符识别:如OCR(光学字符识别)技术。
  • 目标检测:在图像中分割出目标。
  • 图像分割:根据某些条件将图像划分为前景和背景。

2. 图像二值化的原理

图像的每一个像素都有一定的灰度值(灰度图像)。二值化的目的是根据某个阈值,将图像的像素值分为两类:

  • 前景(目标):图像中的感兴趣部分,通常为白色(255)。
  • 背景:图像中不需要关注的部分,通常为黑色(0)。

在具体实现时,图像的每个像素值与预设的阈值进行比较:

  • 如果像素值大于阈值,则该像素为白色(255)。
  • 如果像素值小于或等于阈值,则该像素为黑色(0)。

这种方法的关键在于如何选择阈值。阈值的选择将直接影响二值化效果的好坏。


3. 二值化算法

3.1 全局阈值法

最简单的一种二值化方法。选择一个固定的阈值,遍历每一个像素,将其灰度值与该阈值进行比较,大于阈值的像素值变为255,其他变为0。

实现步骤:
  1. 读取灰度图像。
  2. 选择一个阈值。
  3. 对图像中的每个像素进行比较,应用二值化规则。
import cv2

# 读取图像
image = cv2.imread('example.jpg', 0)

# 设置阈值
threshold_value = 127

# 应用全局阈值
_, binary_image = cv2.threshold(image, threshold_value, 255, cv2.THRESH_BINARY)

# 显示结果
cv2.imshow("Binary Image", binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数说明

  • src:输入图像(可以是灰度图像,也可以是单通道图像)。输入图像的类型应为 CV_8U(8-bit unsigned integer),即图像的像素值范围是 [0, 255]。

  • thresh:阈值(标量)。将输入图像中的像素值与此阈值进行比较,以决定哪些像素应该设置为 0,哪些像素应该设置为 maxval(通常为 255)。

  • maxval:最大值。小于阈值的像素将被设置为 0(或其他自定义值),大于阈值的像素将被设置为 maxval(通常为 255)。

  • type:阈值类型,决定如何对像素值进行处理。常见的阈值类型有:

    • cv2.THRESH_BINARY:如果像素值大于阈值,设置为 maxval,否则设置为 0(黑色)。
    • cv2.THRESH_BINARY_INV:如果像素值大于阈值,设置为 0, 否则设置为 maxval(白色反转)。
    • cv2.THRESH_TRUNC:如果像素值大于阈值,将其截断为阈值(即设为 thresh),否则保持原值。
    • cv2.THRESH_TOZERO:如果像素值大于阈值,保持原值,否则设置为 0。
    • cv2.THRESH_TOZERO_INV:如果像素值大于阈值,设置为 0,否则保持原值。
  • retval:返回值,通常是所用的阈值。如果是 THRESH_OTSUTHRESH_TRIANGLE,返回值为计算出的阈值。

  • dst:输出图像,二值化后的图像。

常见的阈值类型

  • cv2.THRESH_BINARY:传统的二值化,如果像素值大于阈值 thresh,则将其设为 maxval,否则设为 0(黑色)。
  • cv2.THRESH_BINARY_INV:反转的二值化。如果像素值大于阈值 thresh,则将其设为 0(黑色),否则设为 maxval(白色)。
  • cv2.THRESH_TRUNC:阈值截断。如果像素值大于 thresh,则将其值截断为 thresh,否则保持不变。
  • cv2.THRESH_TOZERO:如果像素值大于 thresh,则保持原值,否则设为 0。
  • cv2.THRESH_TOZERO_INV:反转的 TOZERO。如果像素值大于 thresh,则设为 0,否则保持原值。
优缺点:
  • 优点:实现简单,计算量小。
  • 缺点:阈值选取困难,尤其是图像背景与前景对比不明显时,效果不佳。

3.2 自适应阈值法

自适应阈值法是针对全局阈值法的一种改进,它根据图像局部区域的特征动态计算每个像素的阈值,适用于不同光照条件下的图像。自适应阈值法可以有效解决光照不均匀问题。

实现步骤:
  1. 将图像划分为多个小区域(通常是窗口)。
  2. 对每个小区域计算局部的阈值。
  3. 使用局部阈值进行二值化。
import cv2

# 读取图像
image = cv2.imread('example.jpg', 0)

# 自适应阈值
binary_image = cv2.adaptiveThreshold(image, 255, cv2.ADAPTIVE_THRESH_MEAN_C,
                                     cv2.THRESH_BINARY, 11, 2)

# 显示结果
cv2.imshow("Binary Image", binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

参数说明

  • src:输入图像(必须是灰度图像,即单通道图像)。输入图像的类型可以是 CV_8U(8-bit unsigned integer),通常是灰度图像。

  • maxValue:最大值,即二值化后的最大像素值。通常设为 255,代表最大亮度。

  • adaptiveMethod:自适应阈值计算方法,有两种可选的计算方式:

    • cv2.ADAPTIVE_THRESH_MEAN_C:基于邻域区域的平均值来计算阈值。
    • cv2.ADAPTIVE_THRESH_GAUSSIAN_C:基于邻域区域的加权和(高斯加权)来计算阈值。
  • thresholdType:阈值类型,指定如何应用计算出的阈值:

    • cv2.THRESH_BINARY:大于阈值的像素设为 maxValue,否则设为 0(黑色)。
    • cv2.THRESH_BINARY_INV:与 cv2.THRESH_BINARY 相反,小于阈值的像素设为 maxValue,否则设为 0。
  • blockSize:邻域区域的大小(奇数)。它决定了用于计算每个像素阈值的区域大小。例如,blockSize=11 意味着每个像素的阈值是以一个 11x11 的邻域窗口计算的。必须是奇数(如 3, 5, 7, 9, 11 等)。

  • C:常数项,用于调整阈值。计算出的局部阈值会减去常数 C,它的作用是调节二值化的灵敏度。这个参数可以使阈值更高或更低,通常设置为一个小的整数(如 5 或 10)。

优缺点:
  • 优点:适应性强,能处理光照不均匀的图像。
  • 缺点:计算量较大,处理速度较慢。

3.3 Otsu's 阈值法

Otsu’s 阈值法是一种基于图像灰度分布的自动阈值选择方法,它通过最大化类间方差来选择最佳的阈值。该方法不需要人工设定阈值,适合于图像中前景和背景对比强烈的情况

实现步骤:
  1. 计算图像的直方图。
  2. 通过 Otsu 方法选择一个最优阈值,使得前景和背景的类间方差最大。
  3. 使用该阈值进行二值化。
import cv2

# 读取图像
image = cv2.imread('example.jpg', 0)

# 使用Otsu的阈值方法
_, binary_image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# 显示结果
cv2.imshow("Binary Image", binary_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
优缺点:
  • 优点:无需人工设定阈值,自动化程度高,适用于对比度强的图像。
  • 缺点:当图像背景与前景不明显区分时,效果不理想。

4. 图像二值化的应用场景

4.1 光学字符识别(OCR)

OCR 技术用于从扫描的文档或图像中提取文字。二值化在 OCR 中起到了关键作用,通过将图像转换为黑白色,减少了干扰信息,增强了字符的对比度,进而提高了识别精度。

4.2 目标检测与分割

二值化常用于将目标与背景分离。在目标检测任务中,二值化有助于简化图像,快速提取出目标区域。

4.3 医学图像处理

在医学图像中,二值化常用于分割图像中的病变区域。例如,使用二值化处理 CT 或 MRI 图像,以提取肿瘤或其他异常组织的区域。

4.4 边缘检测

通过二值化后的图像,可以更加清晰地显示出图像的边缘,进而用于后续的边缘检测或轮廓提取等操作。


5. 总结

图像二值化是图像处理中非常基础且重要的操作。它将图像中的信息压缩为仅含两种颜色的图像,在许多领域中都有广泛应用。通过简单的阈值选择或更先进的自适应和 Otsu 方法,图像的前景和背景可以被清晰地分离出来,从而为后续的图像分析和处理提供便利。

  • 全局阈值法:简单高效,但在复杂图像中可能效果不好。
  • 自适应阈值法:适应性强,处理光照不均匀的图像效果好。
  • Otsu's 方法:自动选择最优阈值,适用于前景与背景对比明显的图像。

随着技术的不断发展,二值化技术在人工智能、医学影像、图像识别等领域的应用将越来越广泛。如果你也在处理图像时遇到二值化的需求,选择合适的算法将极大地提升你的工作效率和精度。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275746.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…

Web基础之什么是HTTP协议

Q:什么是HTTP协议? 概念:Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。 特点: 1.基于TCP协议:面向连接,安全 2.基…

#渗透测试#谷歌扩展学习#编写一个属于自己的谷歌扩展

目录 一、Chrome扩展程序是什么 二、如何自己编写一个简单谷歌扩展 1. 创建项目文件夹 2. 创建 manifest.json 文件 3. 创建 popup.html 文件 4. 创建 popup.js 文件 5. 加载扩展程序到Chrome浏览器 6. 测试扩展程序 三、Chrome插件图标设计技巧 1. 简洁明了 2. 独特…

LayerNorm的思考

文章目录 1. LayerNorm2. 图解3. softmax4. python 代码 1. LayerNorm y x − E [ x ] v a r ( x ) ϵ ∗ γ β \begin{equation} y\frac{x-\mathrm{E}[x]}{\sqrt{\mathrm{var}(x)\epsilon}}*\gamma\beta \end{equation} yvar(x)ϵ ​x−E[x]​∗γβ​​ 2. 图解 矩阵A …

ExplaineR:集成K-means聚类算法的SHAP可解释性分析 | 可视化混淆矩阵、决策曲线、模型评估与各类SHAP图

集成K-means聚类算法的SHAP可解释性分析 加载数据集并训练机器学习模型 SHAP 分析以提取特征对预测的影响 通过混淆矩阵可视化模型性能 决策曲线分析 模型评估(多指标和ROC曲线的目视检查) 带注释阈值的 ROC 曲线 加载 SHAP 结果以进行下游分析 与…

Kafka 会丢消息吗?

目录 01 生产者(Producer) 02 消息代理(Broker) 03 消费者(Consumer) 来源:Kafka 会丢消息吗? Kafka 会丢失信息吗? 许多开发人员普遍认为,Kafka 的设计本身就能保证不会丢失消息。然而,Kafka 架构和配置的细微差别会导致消息的丢失。我们需要了解它如何以及何时…

Open FPV VTX开源之第一次出图

Open FPV VTX开源之第一次出图 1. 源由2. 连线2.1 飞控2.2 调试 3. serial3.1 启动log - uboot3.2 登录版本 - linux3.3 获取有线IP 4. ssh - linux5. PixelPilot出图6. 总结7. 参考资料8. 补充 - 8812AU网卡 1. 源由 在《Open FPV VTX开源之硬件规格及组成》章节中&#xff0…

仓颉笔记——写一个简易的web服务并用浏览器打开

创建一个web服务端,同时创建一个客户端去读取这个服务端。 也满足浏览器打开web的需求。 直接上代码。 import net.http.* import std.time.* import std.sync.* import std.log.LogLevel// 1. 构建 Server 实例 let server ServerBuilder().addr("127.0.0.1&…

Trie树算法

Trie树,也称为前缀树或字典树,是一种特殊的树型数据结构。它用于存储一组字符串,使得查找、插入和删除字符串的操作非常高效。类似这种, 模板: 这是用数组来模拟上图中的树的结构,逻辑上和上图结构一致。 …

03-51单片机定时器和串口通信

一、51单片机定时器 1.定时器介绍 1.1为什么要使用定时器 在前面的学习中,用到了 Delay 函数延时,这里学习定时器以后,就可以通过定时器来完成,当然定时器的功能远不止这些: 51 单片机的定时器既可以定时&#xff…

搭建docker私有化仓库Harbor

Docker私有仓库概述 Docker私有仓库介绍 Docker私有仓库是个人、组织或企业内部用于存储和管理Docker镜像的存储库。Docker默认会有一个公共的仓库Docker Hub,而与Docker Hub不同,私有仓库是受限访问的,只有授权用户才能够上传、下载和管理其中的镜像。这种私有仓库可以部…

【深度学习】核心概念-人工神经网络(Artificial Neural Network, ANN)

人工神经网络是一种受生物神经系统启发的机器学习模型,旨在通过连接大量的节点(称为神经元或节点)来模拟人脑的学习方式。它是一种在监督学习和非监督学习中广泛应用的深度学习模型。 人工神经网络的基本结构 一个人工神经网络通常由以下三个…

切比雪夫插值

切比雪夫插值是一种基于切比雪夫节点的多项式插值方法,其优势是减少插值误差(特别是龙格现象:表现为高维插值时在边缘处插值误差骤增)。本文对其基本操作进行说明。 1. 切比雪夫节点 切比雪夫插值的核心是使用切比雪夫节点作为插值点。切比雪夫节点是切…

ELK的搭建

ELK elk:elasticsearch logstatsh kibana统一日志收集系统 elasticsearch:分布式的全文索引引擎点非关系型数据库,存储所有的日志信息,主和从,最少需要2台 logstatsh:动态的从各种指定的数据源,获取数据…

【物联网原理与运用】知识点总结(上)

目录 名词解释汇总 第一章 物联网概述 1.1物联网的基本概念及演进 1.2 物联网的内涵 1.3 物联网的特性——泛在性 1.4 物联网的基本特征与属性(五大功能域) 1.5 物联网的体系结构 1.6 物联网的关键技术 1.7 物联网的应用领域 第二章 感知与识别技术 2.1 …

英文字体:复古八十年代优雅品牌邀请函电影标题设计衬线字体 Eighties Nostalgia Font

嘿,大家好,我希望你们一切顺利,考虑到现在世界上发生的一切,你们在生活的各个方面都取得了进步。过去 3 年对我们所有人来说都是过山车,我一直非常怀念美好的时光。怀旧之情将我带到了 Pinterest,自然而然地…

GPT大模型下,如何实现网络自主防御

近年来,随着GPT大模型的出现,安全领域的攻防对抗变得更加激烈。RSAC2023人工智能安全议题重点探讨了人工智能安全的最新发展,包括人工智能合成器安全、安全机器学习以及如何利用渗透测试和强化学习技术来确保人工智能模型的安全性和可靠性。 …

Spring Framework 5.3.x源码构建 (jdk-1.8, gradle 7.5.1, idea2024.3)

1、下载jdk安装并配置环境变量(自行百度) https://www.oracle.com/java/technologies/downloads/#java8 2、下载spring-framework源码,切换分支到5.3.x https://github.com/spring-projects/spring-framework.git 备用地址 https://gitco…

韩顺平老师Linux学习笔记【持续更新...】

1、课程内容 1.1、课程大纲 1.2、Linux使用在哪些地方 Linux运维工程师Linux嵌入式工程师Linux下开发项目:JavaEE、大数据、Python、PHP、C/C、Go 1.3、Linux的应用领域 个人桌面领域服务器领域(最强领域)嵌入式领域 2、Linux入门 2.1、…

代码随想录算法训练营day27

代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…