当前位置: 首页> 教育> 培训 > 传统CV算法——threshold阈值算法介绍

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

时间:2025/7/11 8:20:34来源:https://blog.csdn.net/weixin_42917352/article/details/118684586 浏览次数:0次
  • 阈值化函数
  • 我的理解为,在计算机图像视觉中,我们常见的RGB图像表现的信息过多,可能会存在于一些掺杂的噪声(因为针对视觉目标不是我们需要的),因此使用阈值算法,直接效果就是可以降噪,特征更加的明显化。
  • 一般使用灰度图,需要使用单通道的图片才可以进行阈值化,针对RGB或者HSV格式的图片,我们需要进行灰度化操作才可以进行阈值算法的使用。
import cv2 as cvimg = 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 pltimg = 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()

在这里插入图片描述

关键字:传统CV算法——threshold阈值算法介绍

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: