传统CV算法——threshold阈值算法介绍

news2024/11/13 3:29:51
  • 阈值化函数
  • 我的理解为,在计算机图像视觉中,我们常见的RGB图像表现的信息过多,可能会存在于一些掺杂的噪声(因为针对视觉目标不是我们需要的),因此使用阈值算法,直接效果就是可以降噪,特征更加的明显化。
  • 一般使用灰度图,需要使用单通道的图片才可以进行阈值化,针对RGB或者HSV格式的图片,我们需要进行灰度化操作才可以进行阈值算法的使用。
import cv2 as cv

img = cv.imread("./images/1.jpg")

gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)

ret,binary = cv.threshold(gray,0,255,cv.THRESH_BINARY | cv.THRESH_OTSU)

cv.imshow("gray",gray)

cv.imshow("binary",binary)
cv.waitKey(0)
  • 阈值化的方式有很多,有针对像素对半分的,也有针对大于阈值进行操作或者小于阈值进行操作的。

  • 自适应阈值化

  • 自适应均值化

  • 自适应高斯均值化
    在计算机视觉中,阈值处理是图像分割的重要技术。OpenCV 提供了多种阈值处理方法,其中包括全局阈值(cv.threshold)和自适应阈值(cv.adaptiveThreshold)。以下是对这两种方法的详细介绍,包括它们的区别、数学原理、输入参数等。

1. 全局阈值(cv.threshold

定义:全局阈值是将整个图像应用一个固定的阈值进行二值化处理。所有像素值大于该阈值的像素被设置为最大值(通常是255),而小于该阈值的像素被设置为0。

数学原理
给定一个图像 I ( x , y ) I(x, y) I(x,y),全局阈值处理可以表示为:
T = threshold ( I ( x , y ) , thresh , maxval , type ) T = \text{threshold}(I(x, y), \text{thresh}, \text{maxval}, \text{type}) T=threshold(I(x,y),thresh,maxval,type)
其中:

  • I ( x , y ) I(x, y) I(x,y) 是输入图像的像素值。
  • thresh \text{thresh} thresh 是全局阈值。
  • maxval \text{maxval} maxval 是要分配给大于阈值的像素的值(通常为255)。
  • type \text{type} type 是阈值类型(如 cv.THRESH_BINARYcv.THRESH_BINARY_INV)。

输入参数

  • src:输入图像(单通道)。
  • thresh:阈值。
  • maxval:最大值。
  • type:阈值类型。

2. 自适应阈值(cv.adaptiveThreshold

定义:自适应阈值是根据图像的局部特征动态计算阈值。它在图像的每个小区域内计算阈值,从而更好地处理光照不均匀的情况。

数学原理
自适应阈值处理可以表示为:
T ( x , y ) = mean ( I ( x ′ , y ′ ) ) − C T(x, y) = \text{mean}(I(x', y')) - C T(x,y)=mean(I(x,y))C
其中:

  • T ( x , y ) T(x, y) T(x,y) 是位置 ( x , y ) (x, y) (x,y) 的自适应阈值。
  • mean ( I ( x ′ , y ′ ) ) \text{mean}(I(x', y')) mean(I(x,y)) 是在邻域 N N N 内的像素值的平均值。
  • C C C 是一个常数,用于调整阈值。

自适应阈值的公式可以表示为:
dst ( x , y ) = { maxval , if  I ( x , y ) > T ( x , y ) 0 , otherwise \text{dst}(x, y) = \begin{cases} \text{maxval}, & \text{if } I(x, y) > T(x, y) \\ 0, & \text{otherwise} \end{cases} dst(x,y)={maxval,0,if I(x,y)>T(x,y)otherwise

输入参数

  • src:输入图像(单通道)。
  • maxValue:最大值(通常为255)。
  • adaptiveMethod:自适应方法(如 cv.ADAPTIVE_THRESH_MEAN_Ccv.ADAPTIVE_THRESH_GAUSSIAN_C)。
  • thresholdType:阈值类型(如 cv.THRESH_BINARYcv.THRESH_BINARY_INV)。
  • blockSize:邻域大小(必须是奇数)。
  • C:从计算的阈值中减去的常数。

3. 区别

  • 阈值计算

    • 全局阈值:使用一个固定的阈值处理整个图像。
    • 自适应阈值:根据局部区域的特征动态计算阈值。
  • 适用场景

    • 全局阈值:适用于光照均匀的图像。
    • 自适应阈值:适用于光照不均匀或具有复杂背景的图像。
  • 处理效果

    • 全局阈值:可能会导致某些区域的细节丢失。
    • 自适应阈值:能够保留更多的细节,适应不同的光照条件。

总结

  • cv.threshold 是全局阈值处理,适用于光照均匀的图像。
  • cv.adaptiveThreshold 是自适应阈值处理,适用于光照不均匀的图像。
  • 两者的选择取决于具体的应用场景和图像特征。
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread("./images/2.jpg",cv.IMREAD_GRAYSCALE)
img = cv.GaussianBlur(img,(5,5),sigmaX=0)

ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)

#  blockSize为邻域块的大小、C为偏移值
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,cv.THRESH_BINARY,blockSize=9,C=2)

th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,cv.THRESH_BINARY,blockSize=9,C=2)

titles = ["Original Image",
          "Global Thresholding(V=127)",
          "Adaptive Mean Thresholding",
          "Adaptive Gaussian Thresholding"]

images = [img,th1,th2,th3]

for i in range(4):
    plt.subplot(2,2,i+1)
    plt.imshow(images[i],"gray")
    plt.title(titles[i])
    plt.xticks([])
    plt.yticks([])
plt.show()

在这里插入图片描述

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

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

相关文章

微信公众号获取 openid: 从零到一快速实现一个微信公众号授权项目

一. 前言 上一篇文章说到,微信官方团队发了一则公告,美其名曰:“为了优化开发体验,避免多个同一功能接口对开发者造成困扰,微信团队将对下发统一消息接口进行如下调整。” 正是由于这个调整,而将部分开发者…

力扣: 快乐数

文章目录 需求分析代码结尾 需求 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。 然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。 …

社群空间站9.9付费入群系统二开源码 易支付版全套搭建教程

1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data/tpl/app/default/yy_shequn2/lib/epay.config.php…

【动捕_VRPN_ROS2】安装vrpn_client_ros2库将动捕数据转换ROS2话题

安装vrpn_client_ros2库将动捕数据转换ROS2话题 环境: Ubuntu :20.04 LTS ROS :ROS2 Foxy 安装VRPN库 执行以下命令安装VRPN库。 git clone https://github.com/vrpn/vrpn.git mkdir -p vrpn/build cd vrpn/build cmake .. make sudo …

【技术】叉车防撞报警系统的原理及应用场景

叉车作为一种大型货物的运输机械,自出现之后大大提高了人们在日常工作的运输效率,但是同样存在着一部分弊端,例如存在着较多的视觉盲区,随着人们对于叉车的日常使用,叉车的安全事故愈发严重,很容易发生碰撞…

C#高级:递归2-根据ID反向递归求其所有的祖先节点信息

目录 一、实现demo 二、封装方法 【ID>祖先ID】 【ID>祖先实体】 三、递归讲解 一、实现demo class MainClass {static List<Person> PersonList new List<Person>(){new Person(){ Id1,ParentIDnull,Name"小明曾祖父",},new Person(){ Id2…

《论面向方面的编程技术及其应用》写作框架,软考高级系统架构设计师

论文真题 随着社会信息化进程的加快&#xff0c;计算机及网络已经被各行各业广泛应用&#xff0c;信息安全问题也变得愈来愈重要。它具有机密性、完整性、可用性、可控性和不可抵赖性等特征。信息系统的安全保障是以风险和策略为基础&#xff0c;在信息系统的整个生命周期中提…

基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、SSM项目源码 系统展示 基于SpringBootVue的西安旅游管理系统网站【附源码文档】、…

美团OC感想

OC感想 晚上十点拿到美团意向了 到家事业部。&#xff0c;日常实习没过&#xff0c;暑期实习没过&#xff0c;秋招终于意向了&#xff0c;晚上十点发的&#xff0c;整整激动到一点才睡着&#xff0c;不仅因为这是秋招的第一个意向&#xff0c;更因为这是我一直心心念念想去的地…

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中&#xff0c;管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等&#xff0c;都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools&#xff1f; pip-tools 是一组命令行工具&…

2024-09-08 小红书机试 解题报告 | 珂学家

前言 题解 这是2024年9月8号的小红书机试题。 看到群里有人在讨论&#xff0c;小红书的机试题&#xff0c;顺手做了下&#xff0c;感觉挺有意思的。 现在的机试题&#xff0c;是真的难&#xff0c;好卷。 A. 机器人 题目描述: m * n的格子&#xff0c;都有一个方向指令LRUD…

挑战当前最难、规模最大多模态评测基准MME-RealWorld,QwenVL-2位列第一但并未及格

32 个标注者&#xff0c;29,429 条标注数据&#xff0c;图像平均分辨率 20001500&#xff0c;当前最难最大的纯手工标注图像感知 benchmark 来了&#xff01;现有模型没有一个在总分上取得 60% 以上的准确率。 论文链接&#xff1a; https://arxiv.org/abs/2408.13257 项目主…

MLLM(三)| BigModel平台正式上线Plus系列全家桶

2024年8月28日&#xff0c;在ACM SIGKDD&#xff08;国际数据挖掘与知识发现大会&#xff0c;KDD&#xff09;会议现场&#xff0c;智谱AI重磅推出新一代全自研基座大模型GLM-4-Plus、图像/视频理解模型GLM-4V-Plus和文生图模型CogView-3-Plus。 1、模型介绍页&#xff1a;htt…

Maven项目父模块POM中是否应该包含SpringBoot打包插件(spring-boot-maven-plugin)

父模块POM是否包含SpringBoot打包插件 一、场景 一个基于SpringBoot的Maven父子模块的项目&#xff08;一个父项目中包含多个子项目&#xff09;&#xff0c;父模块 POM文件中&#xff0c;是否应该包含打包需要的插件&#xff08;spring-boot-maven-plugin&#xff09;&#…

strcat函数的使用和模拟实现

目录 1.头文件 2.函数功能​编辑 3.注意事项&#xff1a; 4.strcat函数模拟实现&#xff1a; 方源一把抓住VS2022&#xff0c;催动春秋产的气息&#xff0c;顷刻炼化&#xff01; 1.头文件 strcat函数的使用&#xff0c;需要头文件 #include<string.h>2.函数功能 s…

✨机器学习笔记(二)—— 线性回归、代价函数、梯度下降

Course1-Week1: https://github.com/kaieye/2022-Machine-Learning-Specialization/tree/main/Supervised%20Machine%20Learning%20Regression%20and%20Classification/week11️⃣线性回归&#xff08;linear regression&#xff09; f w , b ( x ) w x b f_{w,b}(x) wx b …

【深度学习讲解笔记】前言

小编为AI专业的本科学生&#xff0c;最近入手了一本《深度学习讲解》的书&#xff0c;由于封面画了苹果&#x1f34e;&#xff0c;所以也叫苹果书&#xff0c;这本书目前在全网的热度很高。 本书是根据李宏毅老师讲授的《机器学习》课程编写的&#xff0c;作者是来自DataWhale…

SCI顶刊中“introduction”经典模板,建议收藏!

Introduction Introduction 的行文框架是一个从较宽泛的学术领域逐渐缩小到你的研究目标的过程。 1.研究背景和重要性 (Background AndImportance) • Mention of previous work on the subject • A statement of the importance of the subject 引言部分的第一段需要给出…

(Charles)如何抓取手机http的报文

抓包的目的&#xff1a; 发现bug需要定位要抓包 检查数据传输的安全性 接口测试遇到需求文档不全要抓包 抓包主要抓取的是http协议&#xff08;https协议&#xff09;的报文 http协议规范客户端和服务端的数据传输格式&#xff0c;是一个标准和规范 每个http连接包括请求消息和…

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya&#xff08;不是本人&#xff0c;claude AI&#xff09;在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容&#xff1a; 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用&…