灰度图像二值化阈值选取常用方法
- 格式:ppt
- 大小:395.50 KB
- 文档页数:14
文章标题:探寻C++ OpenCV图像处理中的阈值方法在C++ OpenCV中,图像处理的阈值方法是一个十分重要的技术,它可以对图像进行二值化处理,将图像中的目标对象和背景进行有效分割,为后续的图像识别和分析提供了基础。
本文将深入探讨C++ OpenCV中常用的阈值方法,以帮助读者更好地理解和运用这一技术。
1. 了解阈值的概念阈值处理是一种图像分割方法,通过对图像灰度值进行处理,将像素分为目标和背景两部分。
在C++ OpenCV中,常用的阈值方法包括全局阈值、自适应阈值和Otsu阈值等。
通过对比不同的阈值方法,我们可以更好地选择适合特定场景的阈值处理方案。
2. 全局阈值的应用全局阈值是最简单直观的阈值处理方法,在C++ OpenCV中可以使用cv::threshold函数进行实现。
通过设定一个全局固定的阈值,对整个图像进行二值化处理,将灰度值大于阈值的像素设为白色,小于阈值的像素设为黑色。
然而,在实际应用中,全局阈值可能对光照不均匀或者对比度较低的图像效果不佳,因此需要寻求更加灵活的阈值方法。
3. 自适应阈值的优势C++ OpenCV提供了自适应阈值方法,通过计算局部区域的灰度均值或加权平均值来确定阈值,有效应对了图像光照不均匀的情况。
自适应阈值方法使得图像的二值化处理更加灵活,可以适应不同光照条件下的图像处理需求。
4. Otsu阈值的特殊性Otsu阈值是一种自动确定阈值的方法,它能够根据图像的灰度分布特点,自动计算最佳阈值,进而实现图像的自适应二值化处理。
在C++ OpenCV中,Otsu阈值的应用需要结合cv::threshold函数进行实现,通过该方法,图像处理的效果更加准确和稳定。
总结与展望通过本文的探讨,我们对C++ OpenCV中阈值处理的方法有了更深入的了解。
在实际应用中,我们可以根据图像的特点和处理需求,选择合适的阈值处理方法,以实现图像的有效分割和处理。
未来,随着图像处理技术的不断发展,我们可以进一步探索更加高效和智能的阈值方法,为图像处理领域注入新的活力和可能性。
图像灰度化和二值化1.灰度化图像的灰度化处理的基本原理:彩色图像转化成为灰度图像的过程成为图像的灰度化处理。
彩色图像中的每个像素的颜色有R、G、B三个分量决定,而每个分量有255种值可取,这样一个像素点可以有1600多万(255*255*255)的颜色的变化范围。
而灰度图像是R、G、B三个分量相同的一种特殊的彩色图像,其一个像素点的变化范围为255种,所以在数字图像处理种一般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少一些。
灰度图像的描述与彩色图像一样仍然反映了整幅图像的整体和局部的色度和亮度等级的分布和特征。
方法:1.分量法:对于每一个像素点,取其任意一种(R或G或B)为该点的灰度值。
2.最大值法:对于每一个像素点,取Max(R,G,B)为该点的灰度值。
3.平均值发:对于每一个像素点,取Avg(R,G,B)为该点的灰度值。
4.加权平均法:对于每一个像素点,由于人眼对红色光,绿色光,蓝色光的敏感程度不同而赋予不同的权重,从而得到该点的灰度值。
公式如下:Gray = 0.30 * R + 0.59 * G + 0.11 *B为什么将彩色图像灰度化?我们识别物体,最关键的因素是梯度(现在很多的特征提取,SIFT,HOG等等本质都是梯度的统计信息),梯度意味着边缘,这是最本质的部分,而计算梯度,自然就用到灰度图像了。
颜色本身,非常容易受到光照等因素的影响,同类的物体颜色有很多变化。
所以颜色本身难以提供关键信息。
2010PAMI有colorSIFT的一些工作,本质也是不同通道的梯度。
梯度信息对于识别物体来说很重要。
所以我们可以把灰度图像看作图像的强度(Intensity),来求一些梯度特征。
比较常用的有HOG,LBP,SIFT等等。
如下图为行人检测中的hog模型。
通过hog来检测部件,最后找到图像中的行人。
(Reference: rbgirshick/voc-dpm)注:可视化为rgb图像,但输入是灰度图像,不要被骗了。
二值化阈值的选取方法
在进行二值化阈值选取时,可以采用以下几种常用的方法:
1. Otsu方法:Otsu方法是一种自适应的阈值选取方法,它能够根据图像的灰度分布自动选择最佳的阈值。
该方法首先计算图像的灰度直方图,然后根据直方图信息计算类间方差最小的阈值作为二值化阈值。
2. 基于峰值的方法:该方法通过寻找图像灰度直方图中的峰值来选取二值化阈值。
通常情况下,图像的背景和前景分别对应两个峰值。
可以选择两峰之间的谷底作为二值化阈值。
3. 基于聚类的方法:该方法通过对图像灰度值进行聚类来选取二值化阈值。
常用的聚类方法有K-means聚类和谱聚类等。
通过将灰度值分成两个簇,可以选择两个簇之间的分割点作为阈值。
4. 基于直方图的方法:该方法通过分析图像的灰度直方图,选择能够合理区分图像前景和背景的阈值。
可以根据直方图的形状、波峰和波谷等特征来选取阈值。
5. 基于统计分析的方法:该方法通过分析图像的灰度统计特征,例如均值、方差、中位数等,选择合适的阈值。
可以根据前景和背景的灰度分布特征来选择阈值。
以上方法中,Otsu方法是一种常用且较为常见的二值化阈值选取方法,可以适用于大多数图像二值化的场景。
但对于特殊图像场景,其他方法也可能更适合选择二值化阈值。
图像处理中的图像二值化算法随着科技的发展,图像处理技术应用越来越广泛。
作为一项基础技术,图像二值化算法在图像处理中扮演着非常关键的角色,它可以将图像分割成黑白两种颜色,也就是将图像中的灰度值转化为0和1,简化了后续的处理流程。
本文将介绍图像二值化算法的基本原理和应用情况。
一、二值化算法的基本原理在图像中,每个像素都有一定的灰度值,在8位灰度图像中,灰度值的范围在0-255之间,其中0是代表黑色,255代表白色。
当我们需要处理一张图片时,如果直接对每一个灰度值进行处理,那么处理的过程就会非常繁琐,因此,我们需要将图像灰度值转化为0和1两种数字进行处理。
常见的二值化算法有全局阈值算法、局部阈值算法、自适应阈值算法、基于梯度算法等。
其中,全局阈值算法是最基本、最简单的一种算法。
它将整张图像分成黑白两个部分,通过将整个图像的像素点的灰度值与一个固定的阈值进行比较,如果像素点的灰度值大于阈值,就将该像素点的灰度值置为1,否则置为0。
使用全局二值化算法的步骤如下:1.将图像读入到内存中;2.将图像转化为灰度图像;3.计算整个图像的平均灰度值,该平均灰度值作为全局阈值;4.将图像中每个像素点的灰度值与该全局阈值进行比较,灰度值大于等于该全局阈值的像素点赋值为255(代表白色),小于该阈值的像素点赋值为0(代表黑色);5.输出处理后的图像。
当然,这种方法的缺点也非常明显,那就是无法适应不同场合下的图像处理需求,处理效果难以保证。
因此,我们需要更为灵活的算法和方法来进行二值化处理。
二、不同类型的二值化算法1.基于直方图的全局阈值法二值化算法中的全局阈值算法通常是将整个图像分成两类像素:一类像素比较暗,另一类像素比较亮。
在直方图中,该分割就是直方图上的两个峰。
我们可以通过直方图分析来确定这个阈值,并将灰度值低于阈值的像素变为黑色,将灰度值高于阈值的像素变为白色。
对于图像I(x,y),它的灰度直方图h(i)可以表示为:h(i) = N(i) / MN (i=0,1,…,L-1)其中N(i)是图像中所有像素灰度值为i的像素数量,MN是总的像素数量,L是灰度级别数量(在8位图像中,L等于256)然后我们需要确定一个阈值T,所有像素点的灰度值小于T的变为黑色,大于等于T的变为白色。
二值化方法
二值化方法是一种将图像转换为黑白两种颜色的方法。
通常情况下,我们使用像素阈值方法将灰度图像转换为二值图像。
在这种方法中,我们将图像中的每个像素与特定阈值进行比较。
如果像素的灰度值高于阈值,则将其设置为白色,否则将其设置为黑色。
像素阈值方法有多种变体。
例如,全局阈值法使用固定的阈值值将整个图像转换为二值图像。
自适应阈值法则使用不同的阈值值将图像分成许多块,并在每个块中使用适当的阈值值。
这些方法的目的是根据图像的内容自适应地选择阈值值。
还有其他的二值化方法,例如Otsu二值化方法。
在这种方法中,我们选择一个阈值值,使得将图像分成两部分,使得两部分之间的方差最小。
这种方法被广泛应用于图像分割中,其中我们试图将图像分成不同的部分以进行后续处理。
总之,二值化方法是一种将图像转换为只有黑白两种颜色的方法。
它的目的是将图像分成明显的部分以便于后续处理。
这种方法有多种变体,每种变体都有自己的优点和缺点。
【数字图像处理】灰度图像⼆值化灰度图像每副图像的每个像素对应⼆维空间中⼀个特定的位置,并且有⼀个或者多个与那个点相关的采样值组成数值。
灰度图像,也称为灰阶图像,图像中每个像素可以由0(⿊)到255(⽩)的亮度值(Intensity)表⽰。
0-255之间表⽰不同的灰度级。
灰度图像⼆值化⼆值化:以⼀个值(阈值)为基准,⼤于(等于)这个值的数全部变为是1(或者0),⼩于等于这个数的就全部将他们变为0(或1)。
⼆值化算法处理飞思卡尔赛道思路:设定⼀个阈值valve,对于图像矩阵中的每⼀⾏,从左⾄右⽐较各像素值和阈值的⼤⼩,若像素值⼤于或等于阈值,则判定该像素对应的是⽩⾊赛道;反之,则判定对应的是⿊⾊的⽬标引导线。
记下第⼀次和最后⼀次出现像素值⼩于阈值时的像素点的列号,算出两者的平均值,以此作为该⾏上⽬标引导线的位置。
摄像头的⼆值化的代码:Void image_binaryzation(){for(int i=0;i{for(int j=0;j{if(Image[i][j] >= Threshold)Image_new[i][j]=1;elseImage_new[i][j]=0;}}}Row是对应采集到的⾏数,Col是列数,Image[i][j]是摄像头采集未⼆值化的数据存放的数组,Img[i][j]是新建的存放⼆值化后的数组。
合适的阈值在阈值⼆值化中,最主要的是选取合适的阈值,这也是⼆值化的难点所在。
常⽤的⼆值化阈值选取⽅法有双峰法、p参数法、⼤律法(Otsu法)、最⼤熵阈值法、迭代法等。
⼤律法(Otsu法)Otsu⽅法⼜名最⼤类间差⽅法,通过统计整个图像的直⽅图特性来实现全局阈值T的⾃动选取,其算法步骤为:1) 先计算图像的直⽅图,即将图像所有的像素点按照0~255共256个bin,统计落在每个bin的像素点数量2) 归⼀化直⽅图,也即将每个bin中像素点数量除以总的像素点3) i表⽰分类的阈值,也即⼀个灰度级,从0开始迭代4) 通过归⼀化的直⽅图,统计0~i 灰度级的像素(假设像素值在此范围的像素叫做前景像素) 所占整幅图像的⽐例w0,并统计前景像素的平均灰度u0;统计i~255灰度级的像素(假设像素值在此范围的像素叫做背景像素) 所占整幅图像的⽐例w1,并统计背5) 计算前景像素和背景像素的⽅差 g = w0*w1*(u0-u1) (u0-u1)6) i++;转到4),直到i为256时结束迭代7)将最⼤g相应的i值作为图像的全局阈值缺陷:OSTU算法在处理光照不均匀的图像的时候,效果会明显不好,因为利⽤的是全局像素信息。
图像二值化阈值选取常用方法最近在公司搞车牌识别的项目,车牌定位后,发现对车牌区域二值化的好坏直接影响后面字符切分的过程,所以就想把常用阈值选取方法做一个总结。
图像二值化阈值选取常用方法:1.双峰法。
2.P 参数法。
3.最大类间方差法(Otsu 、大津法)。
4.最大熵阈值法。
5.迭代法(最佳阈值法)。
1.双峰法在一些简单的图像中,物体的灰度分布比较有规律,背景与目标在图像的直方图各自形成一个波峰,即区域与波峰一一对应,每两个波峰之间形成一个波谷。
那么,选择双峰之间的波谷所代表的灰度值T 作为阈值,即可实现两个区域的分割。
如图1所示。
2.P 参数法当目标与背景的直方图分布有一定重叠时,两个波峰之间的波谷很不明显。
若采用双峰法,效果很差。
如果预先知道目标占整个图像的比例P ,可以采用P 参数法。
P 参数法具体步骤如下:假设预先知道目标占整个图像的比例为P ,且目标偏暗,背景偏亮。
1)、计算图像的直方图分布P(t),t=0,1,.....255。
2)、计算阈值T ,使其满足0()*Tt p t Pm n =-∑最小。
P 参数法一般用于固定分辨率下,目标所占整个图像比例已知的情况。
3.最大类间方差法(Otsu)最大类间方差法是由Otsu 于1979年提出的,是基于整幅图像的统计特性实现阈值的自动选取的,是全局二值化最杰出的代表。
Otsu 算法的基本思想是用某一假定的灰度值t 将图像的灰度分成两组,当两组的类间方差最大时,此灰度值t 就是图像二值化的最佳阈值。
设图像有L 个灰度值,取值范围在0~L-1,在此范围内选取灰度值T ,将图像分成两组G0和G1,G0包含的像素的灰度值在0~T ,G1的灰度值在T+1~L-1,用N 表示图像像素总数,i n 表示灰度值为i 的像素的个数。
已知:每一个灰度值i 出现的概率为/i i p n N =;假设G0和G1两组像素的个数在整体图像中所占百分比为01ϖϖ、,两组平均灰度值为01μμ、,可得概率:00=T ii p ϖ=∑11011L i i T p ωω-=+==-∑平均灰度值:00T i i ipμ==∑111L ii T i p μ-=+=∑图像总的平均灰度值:0011μϖμϖμ=+类间方差:()()()22200110101()g t ωμμωμμωωμμ=-+-=-最佳阈值为:T=argmax(g(t))使得间类方差最大时所对应的t 值。
图像预处理(⼆值化)图像预处理(⼆值化)本⽂的实验室主要通过opencv与python3实现,相关的代码可以在GitHub中找到。
1. 图像获取与灰度化通过摄像头获取到的图像为彩⾊的图像。
彩⾊图像主要分为两种类型,RGB及CMYK。
其中RGB的彩⾊图像是由三种不同颜⾊成分组合⽽成,⼀个为红⾊,⼀个为绿⾊,另⼀个为蓝⾊。
⽽CMYK类型的图像则由四个颜⾊成分组成:青C、品M、黄Y、⿊CMYK类型的图像主要⽤于印刷⾏业。
每个图像的像素通常对应于⼆维空间中⼀个特定的位置,并且有⼀个或者多个与那个点相关的采样值组成数值。
灰度图像,也称为灰阶图像,图像中每个像素可以由0(⿊)到255(⽩)的亮度值(Intensity)表⽰。
0-255之间表⽰不同的灰度级。
将彩⾊图像转化成为灰度图像的过程称为图像的灰度化处理。
灰度化,在RGB模型中,如果R=G=B时,则彩⾊表⽰⼀种灰度颜⾊,其中R=G=B的值叫灰度值,因此,灰度图像每个像素只需⼀个字节存放灰度值(⼜称强度值、亮度值),灰度范围为0-255。
彩⾊图像中的每个像素的颜⾊有R、G、B三个分量决定,⽽每个分量有255个值可取,这样⼀个像素点可以有1600多万(255255255)的颜⾊的变化范围。
⽽灰度图像⼀个像素点的变化范围为255种,所以在数字图像处理种⼀般先将各种格式的图像转变成灰度图像以使后续的图像的计算量变得少⼀些。
灰度图像的描述与彩⾊图像⼀样仍然反映了整幅图像的整体和局部的⾊度和亮度等级的分布和特征。
对于灰度化的⽅式有分量法、最⼤值法、平均值法,加权平均法等。
本⽂使⽤平均值法对图像进⾏灰度化。
对于平均值法,将彩⾊图像中的R、G、B三个分量的亮度求简单的平均值,将得到的值作为灰度值输出⽽得到灰度图。
其实现的表达式如下:通过实验得到得到如下图所⽰,灰度化前后:2.⼆值化通过以上对彩⾊图⽚进⾏灰度化以后,把获取到的灰度图像进⾏⼆值化处理。
对于⼆值化,其⽬的是将⽬标⽤户背景分类,为后续车道的识别做准备。
Tesseract 是一种光学字符识别引擎,能够将图像中的文字转换成可编辑的文本。
在使用 Tesseract 进行文字识别时,灰度处理和二值化处理是非常重要的步骤,能够有效提高识别准确率和效率。
一、灰度处理灰度处理是将彩色图像转换成灰度图像的过程。
在灰度图像中,每个像素点只有一个灰度值,表示其亮度。
对于彩色图像,每个像素点通常由红、绿、蓝三个颜色通道组成,而在灰度图像中,这三个通道的颜色信息被合并成一个灰度值。
1.1 灰度处理的作用灰度处理能够简化图像的信息,去除彩色信息,使得图像变得更加简洁明了。
这对于后续的文字识别非常有利,因为文字的识别与颜色无关,只与像素的亮度有关。
灰度处理还能够减小图像的体积,加快图像处理的速度。
1.2 灰度处理的方法灰度处理的方法有很多种,常见的有:1.2.1 加权平均法加权平均法是最常见的灰度处理方法之一。
通过对原彩色图像的每个像素点的RGB 值进行加权平均,计算得到相应的灰度值。
一般来说,使用以下公式进行计算:灰度值 = 0.299 * R + 0.587 * G + 0.114 * B其中 R、G、B 分别表示红、绿、蓝三个颜色通道的值。
1.2.2 最大值法和最小值法最大值法和最小值法分别是将原彩色图像的每个像素点的 RGB 值中的最大值或者最小值作为其灰度值。
这种方法简单快速,但会丢失一部分信息。
1.2.3 平均值法平均值法是将原彩色图像的每个像素点的 RGB 值的平均值作为其灰度值。
这种方法适用于大部分图像,能够有效保留图像的信息。
1.3 灰度处理的实现灰度处理的实现通常采用编程语言提供的图像处理库,如 OpenCV、PIL 等。
通过调用相关的函数,可以很方便地将彩色图像转换成灰度图像。
二、二值化处理二值化处理是将灰度图像转换成黑白图像的过程。
在二值化图像中,每个像素点只有两个取值,分别表示黑和白。
2.1 二值化处理的作用二值化处理能够进一步简化图像的信息,使得图像中的文字更加清晰醒目。
Arduino小车巡线程序的灰度阈值优化方案灰度阈值是指用于识别黑白线的阈值,通常通过比较当前像素的灰度值和设定的阈值来判断像素是黑色还是白色。
对于Arduino小车巡线程序来说,合适的灰度阈值是非常重要的,它直接影响着小车的巡线稳定性和准确性。
本文将提出一种优化方案,以提高Arduino小车巡线程序的灰度阈值。
1. 理解灰度阈值的概念灰度阈值是指将连续变化的灰度值划分为两个部分的一个固定值。
在黑白线巡线中,通常将灰度阈值设定为两者之间的一个值,以便判断当前像素是黑色还是白色。
2. 获取灰度阈值方法在进行灰度阈值优化之前,我们首先需要获取一个初始值。
可以通过两种方式来获取初始灰度阈值:(1) 手动设定法:通过观察图像,将灰度阈值设定为在黑色和白色之间的一个值。
(2) 自动设定法:通过程序自动获取图像的灰度阈值。
可以使用大津算法或其他自适应阈值算法来实现。
(1) 迭代法逼近法:根据当前阈值对图像进行二值化处理,然后根据小车巡线的准确性和稳定性进行评估,进一步调整阈值。
通过多次迭代,逐渐接近最佳灰度阈值。
(2) 统计学方法:根据图像的灰度分布特征,计算出最佳的二值化阈值。
可以通过计算图像的直方图,寻找灰度值的分割点来确定最佳阈值。
(3) 模糊法:考虑到图像中可能存在的噪声或干扰,可以采用图像的模糊化处理来平滑图像,然后再进行灰度阈值的设定。
常见的模糊处理算法有均值滤波、高斯滤波等。
4. 实例分析我们可以通过迭代法逼近法来优化该阈值。
将灰度阈值设定为100,然后运行程序,观察小车的巡线稳定性和准确性。
如果小车偏离了线路或者波动较大,说明阈值设置的不准确。
此时,可以逐渐增加或减小阈值,再次运行程序,继续观察小车的巡线情况。
通过多次迭代,直到找到最佳的灰度阈值。
5. 结论通过灰度阈值的优化,可以提高Arduino小车巡线程序的稳定性和准确性,从而更好地完成任务。
灰度阈值的优化方案中,迭代法逼近法、统计学方法和模糊法等都可以有效提高灰度阈值的准确性,具体选择哪种方法可以根据实际情况和需求来决定。
图像⼆值化,阈值处理(⼗)图像⼆值化:基于图像的直⽅图来实现的,0⽩⾊ 1⿊⾊ 定义:图像的⼆值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有⿊和⽩的视觉效果。
⼀幅图像包括⽬标物体、背景还有噪声,要想从多值的数字图像中直接提取出⽬标物体,常⽤的⽅法就是设定⼀个阈值T,⽤T将图像的数据分成两部分:⼤于T的像素群和⼩于T的像素群。
这是研究灰度变换的最特殊的⽅法,称为图像的⼆值化(Binarization)。
Python-OpenCV中提供了阈值(threshold)函数threshold(src, thresh, maxval, type, dst=None)函数:第⼀个参数 src 指原图像,原图像应该是灰度图。
第⼆个参数 x 指⽤来对像素值进⾏分类的阈值。
第三个参数 y 指当像素值⾼于(有时是⼩于)阈值时应该被赋予的新的像素值第四个参数 Methodsmethod阈值类型⼀般分为五种:cv2.THRESH_BINARY——⼤于阈值的部分像素值变为最⼤值,其他变为0cv2.THRESH_BINARY_INV——⼤于阈值的部分变为0,其他部分变为最⼤值cv2.THRESH_TRUNC——⼤于阈值的部分变为阈值,其余部分不变cv2.THRESH_TOZERO——⼤于阈值的部分不变,其余部分变为0cv2.THRESH_TOZERO_INV——⼤于阈值的部分变为0,其余部分不变import cv2 as cvimport numpy as np# 全局阈值def threshold_image(image):gray = cv.cvtColor(image, cv.COLOR_BGR2GRAY)cv.imshow("原来", gray)# ⼤律法,全局⾃适应阈值参数0可改为任意数字但不起作⽤ret, binary = cv.threshold(gray, 0, 255, cv.THRESH_BINARY | cv.THRESH_OTSU)print("yuzhi:%s" % ret)cv.imshow("OTSU", binary)# TRIANGLE法,,全局⾃适应阈值, 参数0可改为任意数字但不起作⽤,适⽤于单个波峰 ret, binary = cv.threshold(gray, 0, 255,cv.THRESH_BINARY | cv.THRESH_TRIANGLE) print("yuzhi:%s" % ret)cv.imshow("TRIANGLE", binary)# ⾃定义阈值为150,⼤于150的是⽩⾊⼩于的是⿊⾊ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY)print("yuzhi:%s" % ret)cv.imshow("define_yuzhi", binary)# ⾃定义阈值为150,⼤于150的是⿊⾊⼩于的是⽩⾊ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_BINARY_INV)print("yuzhi:%s" % ret)cv.imshow("define_rev", binary)# 截断⼤于150的是改为150 ⼩于150的保留ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TRUNC)print("yuzhi:%s" % ret)cv.imshow("jieduan1", binary)# 截断⼩于150的是改为150 ⼤于150的保留ret, binary = cv.threshold(gray, 150, 255, cv.THRESH_TOZERO)print("yuzhi:%s" % ret)cv.imshow("jieduan2", binary)src = cv.imread("yiner.jpg")threshold_image(src)cv.waitKey(0)cv.destroyAllWindows()函数threshold()的参数说明:#⼤律法,全局⾃适应阈值参数0可改为任意数字但不起作⽤cv.THRESH_BINARY | cv.THRESH_OTSU#TRIANGLE法,,全局⾃适应阈值, 参数0可改为任意数字但不起作⽤,适⽤于单个波峰cv.THRESH_BINARY | cv.THRESH_TRIANGLE# ⾃定义阈值为150,⼤于150的是⽩⾊⼩于的是⿊⾊cv.THRESH_BINARY# ⾃定义阈值为150,⼤于150的是⿊⾊⼩于的是⽩⾊cv.THRESH_BINARY_INV# 截断⼤于150的是改为150 ⼩于150的保留cv.THRESH_TRUNC# 截断⼩于150的是改为150 ⼤于150的保留cv.THRESH_TOZERO对应的阈值1 函数adaptiveThreshold( src,maxValue,adaptiveMethod,thresholdType,blockSize,C,dst=None)2 参数解说.第⼀个src:原始图像第⼆个maxValue:像素值上限第三个⾃适应⽅法adaptiveMethod: — cv2.ADAPTIVE_THRESH_MEAN_C :领域内均值 —cv2.ADAPTIVE_THRESH_GAUSSIAN_C :领域内像素点加权和,权重为⼀个⾼斯窗⼝第四个值的赋值⽅法: 只有cv2.THRESH_BINARY 和cv2.THRESH_BINARY_INV第五个blockSize 规定领域⼤⼩(⼀个正⽅形的领域)第六个常数C, 阈值等于均值或者加权值减去这个常数(为0相当于阈值就是求得领域内均值或者加权值) 这种⽅法理论上得到的效果更好,相当于在动态⾃适应的调整属于⾃⼰像素点的阈值,⽽不是整幅图像都⽤⼀个阈值。
二值化阈值的选取方法
二值化是将灰度图像转换为只有黑白两种颜色的图像。
而阈值决
定了哪些像素点应该变为黑色,哪些应该变为白色。
因此,阈值的选
取对二值化结果具有重要的影响。
常用的阈值选取方法有以下几种:
1. 固定阈值法:直接给定一个固定的阈值,将灰度图像中大于
该阈值的像素设为白色,小于等于该阈值的像素设为黑色。
简单易行,但对图像噪声等因素影响较大。
2. 均值法:计算灰度图像的平均灰度值,将平均值作为阈值。
简单易行,但对不同场景的图像效果不稳定。
3. Otsu法:将图像分成前景和背景两个类别,并计算类间方差。
选取类间方差最大的灰度值作为阈值。
适用范围广,但计算量较大。
4. 自适应阈值法:根据局部像素的均值或中值,选取不同的阈值,适合于光照不均匀的图像。
但对计算量要求较高。
根据图像的特点选择合适的阈值选取方法,可以得到更好的二值
化结果。
二值化图像?二值化——图像只有两种色,黑白。
0-1,0=黑,1=白灰度:0-255彩色:255,255,255定义:图像的二值化,就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的只有黑和白的视觉效果。
一幅图像包括目标物体、背景还有噪声,要想从多值的数字图像中直接提取出目标物体,常用的方法就是设定一个阈值T,用T将图像的数据分成两部分:大于T的像素群和小于T的像素群。
这是研究灰度变换的最特殊的方法,称为图像的二值化(Binarization)。
其实图像二值化的方法有不下二十种。
一般分为Global和Local两类,区别就是寻找那个阈值的时候使用到了哪里的信息。
一般是为了将感兴趣目标和背景分离。
图像的二值化是最简单的图像处理技术,它一般都跟具体算法联系在一起,很多算法的输入需要是二值数据。
比如你把图像文字转换为PDF 文字,PDF上只能是黑白两种颜色。
比如你给二维码解码,你需要知道哪块黑哪块白。
去掉图像两个字,二值化在视觉里面应用场景多一些。
比如早期的人脸检测很多手势识别的方法,第一步要找到皮肤块,所以需要把图像分为皮肤区域和非皮肤区域,这也算是一种二值化,但通常在方法上用的可能不是基于直方图的了(可能是ID3,随机森林,SVM,甚至神经网络)。
比如Haar特征,以及后来的BRIEF和FAST等,还有LBP实际上都是用到二值的思想。
图像二值化可以看作是聚类,可以看作是分类……这些其实不重要,重要的是它快。
它最明显的意义就是简化后期的处理,提高处理的速度。
`但是单一的图像二值化方法(指基于直方图的二值化)往往比不过其他的方法,因为,毕竟你信息丢了太多。
但是二值化快啊……你可以进行一百次不同的二值化,然后再得到一个更好的结果……上面右图中下面两个图是还可以对二值图像进行编码。
编码后就更好压缩了,那么我们就可以高度节省内存。
图像二值化方法:全局阈值局部阈值9.2 OpenCV中图像二值化方法:评判某个算法是否好,就看二值化图像信息是否丢失了很多。