精华内容
下载资源
问答
  • 二值化算法

    2016-07-02 16:54:19
    使用MATLAB实现的图像二值化处理算法,有Otsu全局二值化算法,kittler 最小分类错误(minimum error thresholding)全局二值化算法,niblack局部二值化算法
  • 二值化算法:Otsu算法、Bernsen算法、Niblack算法、循环阈值算法、迭代二值化算法等matlab代码,入门级
  • 图像的二值化算法

    2017-09-29 23:34:38
    来自一片博客,写的很好,整理下 ,图像的二值化算法,介绍全局二值化,自适应的二值化,已经二值化算法总结。
  • wellner二值化算法

    2013-12-30 08:41:03
    wellner二值化算法,是一种局部二值化算法,有一定用处,请参数
  • 图像二值化算法

    2013-05-10 12:35:30
    图像二值化算法二值化算法使用的是HSL色彩空间,通过H或L的阈值来完成
  • 位图二值化算法

    2013-03-14 23:47:23
    位图二值化算法
  • 图像二值化算法研究与实现 摘 要图像二值化是图像预处理中的一项重要技术在模式识别光学字符识别医 学成像等方面都有重要应用论文介绍了图像及数字图像处理技术的一些概念和相关知 识对VC++软件的发展和软件在图像...
  • 图像二值化是一个很基础的操作,一个好的二值化算法,往往如神来之笔,解决一些棘手的算法问题。它也是最基本的图像分割算法。应用领域比较广泛:比如在 二维码识别、OCR字符识别、以及各种 基于轮廓、形状 等搜索...

    图像二值化是一个很基础的操作,一个好的二值化算法,往往如神来之笔,解决一些棘手的算法问题。它也是最基本的图像分割算法。

    应用领域比较广泛:比如在 二维码识别、OCR字符识别、以及各种 基于轮廓、形状 等搜索算法,都是先基于二值化算法,然后分析形状和识别。

    二值化主要分为2个种类:

    1. 局部二值化算法:自适应高斯、自适应均值、NiblackNickSauvolaWolf 等等
    2. 单阈值二值化(全局二值化)算法:OTSU、KMeans、Triangle、最小熵、均值、分位数等等。
    3. 多阈值二值化算法:muti-OTSU, 极大稳定区域,以及一些 分割算法。

    我目前集成了一些 二值化算法,各有不同的效果,根据应用场景,使用效果最好的算法。

    cac5e0ed7aa621b610a994b32d869dad.png

    局部二值化

    f9b8c0f0621d632b59e8f2f54a2ca357.png

    全局二值化

    464ecd7a02699ee961ff871135b808ca.png

    手动二值化

    大部分算法,都是 OpenCV内置的,我只是改动了一下接口,然后更好的集成到我的测试平台中。

    比如:最大类间方差算法(OTSU)

    70f043d3ec375ac856f1ecd8db2717fc.png

    简单封装

    KLIB_DECL double hist_otsu(const Mat& _src) {Size size = _src.size();int step = (int)_src.step;if (_src.isContinuous()){size.width *= size.height;size.height = 1;step = size.width;}const int N = 256;int i, j, h[N] = { 0 };for (i = 0; i < size.height; i++){const uchar* src = _src.ptr() + step*i;j = 0;for (; j < size.width; j++)h[src[j]]++;}double mu = 0, scale = 1. / (size.width*size.height);for (i = 0; i < N; i++)mu += i*(double)h[i];mu *= scale;double mu1 = 0, q1 = 0;double max_sigma = 0, max_val = 0;for (i = 0; i < N; i++){double p_i, q2, mu2, sigma;p_i = h[i] * scale;mu1 *= q1;q1 += p_i;q2 = 1. - q1;if (std::min(q1, q2) < FLT_EPSILON || std::max(q1, q2) > 1. - FLT_EPSILON)continue;mu1 = (mu1 + i*p_i) / q1;mu2 = (mu - q1*mu1) / q2;sigma = q1*q2*(mu1 - mu2)*(mu1 - mu2);if (sigma > max_sigma){max_sigma = sigma;max_val = i;}}return max_val;}

    这段代码,就是我从 OpenCV源码库里抄录下来的,主要是我想提供 灵活阈值,增加一个系数。

    其他算法类似,我都进行了一些集成和封装。

    测试 全局二值化算法:

    fda9c68575414e0e514d85888a6b9096.png

    拖拽算法模块树

    显示的效果如下:

    482808e4e45e45f30c6640aae495cd4a.png

    全局二值化效果

    其中 全局阈值

    KMeans 115

    OTSU 117

    分位数 129

    极大值比例 196

    均值 124

    全局最小熵 101

    三角值 115.

    6e0dc5b4a2c850d74a617b3b0acbbd67.png

    OTSU的参数设置和查看

    其中算法耗时,都比较短:

    [KAlgImgConvertBGR2Gray] 执行时间[0.6386(ms)][KAlgImgBinKmens] 执行时间[0.3835(ms)][KAlgImgBinOTSU] 执行时间[0.2565(ms)][KAlgImgBinPtile] 执行时间[0.2422(ms)][KAlgImgBinMaxPercent] 执行时间[0.3607(ms)][KAlgImgBinMean] 执行时间[0.1119(ms)][KAlgImgBinEntropy] 执行时间[0.2979(ms)][KAlgImgBinTriangle] 执行时间[0.2244(ms)]

    局部二值化算法测试

    2d9bea8203b49a7725a2b9d2865adb31.png

    局部二值化效果

    可以明显感受到 有些局部二值化 和 边缘检测 效果类似。

    其中算法耗时:

    [KAlgImgBinNiblack] 执行时间[4.2036(ms)][KAlgImgBinNick] 执行时间[4.7597(ms)][KAlgImgBinSauvola] 执行时间[4.1442(ms)][KAlgImgBinWellner] 执行时间[3.126(ms)][KAlgImgBinWolf] 执行时间[6.3202(ms)][KAlgImgBinHysteresisAuto] 执行时间[13.1141(ms)][KAlgImgBinAdaptGauss] 执行时间[0.9003(ms)][KAlgImgBinAdaptMean] 执行时间[0.3454(ms)]

    这些二值化算法,各有特色,在某些特殊场景下,是很有意义的。

    先了解算法,然后测试算法,最后在实际中使用算法,并改进算法。

    图像处理,是一个长期积累的过程。大家如果感兴趣,我继续分享学过的图像处理算法。

    展开全文
  • 一文搞懂图像二值化算法一文搞懂图像二值化算法

    一文搞懂图像二值化算法一文搞懂图像二值化算法

    展开全文
  • 大津算法,也被称作最大类间方差法,是一种可以自动确定二值化中阈值的算法,从类内方差和类间方差的比值计算得来: 小于阈值 t 的类记作 0,大于阈值 t 的类记作 1; w0 和 w1 是被阈值 t 分开的两个类中的像素数...

    1.Ostu算法原理

    使用大津算法来二值化图像!大津算法,也被称作最大类间方差法,是一种可以自动确定二值化中阈值的算法,从类内方差和类间方差的比值计算得来:

    • 小于阈值 t 的类记作 0,大于阈值 t 的类记作 1;
    • w0 和 w1 是被阈值 t 分开的两个类中的像素数占总像素数的比率(满足 w0+w1=1);
    • S0^2, S1^2 是这两个类中像素值的方差;
    • M0, M1 是这两个类的像素值的平均值;

    也就是说:

    类内方差:Sw^2 = w0 * S0^2 + w1 * S1^2
    类间方差:Sb^2 = w0 * (M0 - Mt)^2 + w1 * (M1 - Mt)^2 = w0 * w1 * (M0 - M1) ^2
    图像所有像素的方差:St^2 = Sw^2 + Sb^2 = (const)
    根据以上的式子,我们用以下的式子计算分离度:  
    分离度 X = Sb^2 / Sw^2 = Sb^2 / (St^2 - Sb^2)

    也就是说:我们要是分离度X最大,在图像灰度之中遍历0-255,计算所有的分离度,则可以已找到最大的分离度,从而找到最佳的二值化阈值。

    其次计算分离度的最大值时,可以简化式子。X=Sb^2 / (St^2 - Sb^2),因为St^2是常数,所以设Sb^2=y变成了数学上的X=\frac{y}{c-y}的最小值,结果数学上的运算得X=\frac{c}{c-y}-1,所以当y最最大时,可以得到最大的X。

    换言之,如果使 Sb^2 = w0 * w1 * (M0 - M1) ^2 最大,就可以得到最好的二值化阈值 t。

    2.Ostu直观印象

    对于直方图有两个峰值的图像,大津法求得的T近似等于两个峰值之间的低谷。

    假设用大津法求得的T=0.5294,转换在[0,255]之间为134.9970,正好是两个峰值之间低谷的位置。

    OpenCV的二值化操作中,有一种“大津阈值处理”的方法,使用函数cvThreshold(image,image2,0,255,CV_THRESH_OTSU) 实现,该函数就会使用大律法OTSU得到的全局自适应阈值来进行二值化图片,而参数中的threshold不再起作用。

    3.改进算法

    见此文:

    https://blog.csdn.net/jinshengtao/article/details/19506005

     

    展开全文
  • 常用的全局二值法和局部二值法算法存在细节丢失、噪声引入、运算时间过长等弊端。...通过MATLAB仿真,与常用二值化算法进行比较,验证提出的多窗口图像二值化算法具有处理简单、运算速度快、鲁棒性较好等优点。
  • OCR文档二值化算法8-25

    2020-08-25 12:29:06
    调研和实现了四种二值化算法,分别是大津全局二值化算法、动态二值化算法、循环背景差分二值化算法以及Sauvola′sSauvola′s局部二值化算法。 结果显示,在无光照影响的扫描图像中,大津全局二值化算法的结果文字...

     

    本文主要是二值化算法在OCR中的应用调研总结。调研和实现了四种二值化算法,分别是大津全局二值化算法、动态二值化算法、循环背景差分二值化算法以及Sauvola′sSauvola′s局部二值化算法。 结果显示,在无光照影响的扫描图像中,大津全局二值化算法的结果文字连通性更好,背景更干净,速度更快;局部二值化有效应对光照不均等情况,但二值化文字的边缘存在毛刺,背景有较多噪音,计算资源要求大于全局二值化;所有通用的基于统计信息的二值化对较大面积且深度较高的干扰点和干扰块都无能为力,需要在二值化算法中整合文档图像或者文字的特定特征,使二值化算法具备区分文字前景和背景的能力,能区别地进行二值化操作。 二值化算法的选择,需要根据图像情况和处理时间要求进行选择。一般来说,干扰有限且质量可控的应用中(如印刷体)宜采用大津或者普通的局部二值化实现的二值化算法;干扰多且不可控的应用(如手持设备拍摄图像)宜采用则需要精细设计的局部二值化算法。

    关键字

    二值化、全局二值化、局部二值化、OCR

    0. Introduction

    0.1 通用二值化

    二值化算法是传统数字图像处理的基础,常作为图像处理与识别算法流程的预处理模块。其旨在保留图像中有意义的前景,其他则作为背景。图像二值化有以下好处:

    1. 仅保留前景部分,去除不必要的噪音和干扰,对后面的算法起了一种类似值归一化的作用,提升后续各种图像处理算法或者模式识别算法的效果。
    2. 二值化后的图像内存占用更小、计算更快,可以大幅度提升整体算法流程的运行效率。

    二值化算法属于数字图像处理的分割算法,再上溯则是模式识别里的分类算法。其解决的问题就是:以最小的代价取一个分类平面,将所有像素分类成两个类别。但是”二值化算法“常常狭义地特指将灰度图像通过取阈值的形式分割成前后景。给定一个灰度图像II,其在(i,j)(i,j)上的位置上的像素值为I(i,j)I(i,j),该点的二值化阈值为T(i,j)T(i,j), 则得到二值化结果Ibinary(i,j)Ibinary(i,j)。整个过程只有一个未知量,即二值化阈值TT,因此二值化的核心就在于TT如何求取。

    TT本质上就是二值分类的分类平面,TT取的质量直接决定了二值化效果的好坏。从模式识别的角度,TT的取值方法很多,简单如hard code的常量、无监督算法如基于统计信息分析和聚类等,以及需要在线学习的有监督算法。目前绝大多数教材中的二值化算法其实仅特指基于常量和区域统计信息分析的阈值选取算法。

    常量阈值是最简单粗暴的方法,但是常量意味着适用性的丢失,会出现一个图一个效果的现象。更好的方法是动态阈值选择,现有的二值化算法几乎都基于区域统计信息的方法,如统计灰度直方图等。根据统计区域的大小不同,可大概分为全局二值法和局部二值法。

    全局二值法:统计图像中所有的像素点信息,得到一个阈值,该阈值与位置无关,即所有的像素分割均采用该阈值。经典算法有大津二值化算法。

    局部二值化:统计某位置像素点周边一定区域的信息,每个位置均得到一个二值阈值,因此又称为动态二值法。该方法能够有效应对同一图像内方差大的情况,如光照不均匀和非均匀干扰等;统计区域大小可以根据实际情况而定,当统计区域为整个图像时,此时局部二值化就变成了全局二值化。

    算法 特点 优缺点 经典算法
    全局二值化 根据全图统计信息得到一个阈值,所有像素位置均采用该阈值 计算速度快,但是适应性差,只能用于高质量的扫描OCR等。 大津
    局部二值化 针对每个像素位置,在其附近小范围区域内统计信息得到一个阈值,因此同一图像内不同位置的阈值都不一样 计算速度慢,但是适应性强。更可能应用于噪声不可控的实际场景中。 高斯动态二值化

    0.2 OCR二值化问题分析

    OCR处理目的是将文本图形中关键内容(如文字公式等)进行提取以进行后续识别。相比较于日常媒体图像数据,OCR图像来源与扫描或者手持设备拍摄,一般为白底黑字,因此对二值化具有先天的适应性。然而,文本图像中仍存在运动模糊、镜头模糊、干扰墨迹、光照不均等情况。要求二值化算法能够尽可能准确地提取文本部分,而且提取的文本背景具有高识别度,以进行后续OCR算法识别。

    1. 预处理

    由于图像存在运动模糊以及其他类型的噪音影响,图像中的像素值并非是平滑的,会存在异常值(尤其是高梯度附近区域)。采用统计信息所得的阈值先天地无法应对这部分异常值像素,因此会出现雪霜或者杂块的二值化结果(如下图)。

     

    因此首先要对图像进行去噪和增强。去噪和增强的具体方法就是滤波,相当于频域上的高低带通,保留需要的频段信号。常见的低通滤波算子如高斯滤波等,其虽然能有效平滑毛刺像素值,但是其空间位置无差别地滤波会影响需要保留的高梯度区域,导致图像模糊。因此图像的预处理部分既需要平滑毛刺,又需要保梯度。双边滤波和导向滤波是符合要求的两种方法。以下是经过双边滤波再进行二值化的结果。

     

    2. 全局二值化

    全局二值化所有像素点采用统一的阈值,可以有效应对灰度均匀或者平缓变化的图像,且计算速度相对局部二值化相对更优。二值化阈值多来源于全局图像信息分析,如直方图统计。 大津二值化算法是全局二值化中的突出代表,其搜索在0-255之间进行阈值搜索,目标使二值化后的类间方差最大化。大津二值化算法在扫描图像中(无光照不均、大面积斑块)表现较好。其结果的文字边缘毛刺现象较轻、文字二值化后连通性更好且速度极快。可见下图对比:

     

     

    3. 动态二值化

    与全局二值化算法考虑全局信息不同,局部二值化算法集中更多的注意力在局部范围内,但也并非只考虑局部,同时整合全局的统计信息可以做到局部与全局兼顾。除此之外,还需要考虑不同图像之间的差异性。因此真正的动态二值化的动态有两层含义:

    1. 同一图像内不同像素位置的动态。

    2. 不同图像之间的动态。

    该部分主要涉及我测试到的三种算法:高斯动态二值化循环去背景动态二值化以及针对文本数据的Sauvola’s动态二值化算法。

    3. 1 高斯动态二值化算法

    高斯动态二值化算法是比较基础的局部二值化算法,其考虑固定窗口WW内的灰度值的高斯加权和。当然,广义的局部二值化还可以采用均值、中值等其他加权方式。其表达形式:

    T=sumdeltawIw−Cons T=sumdeltawIw−Cons 

    sumdeltawIwsumdeltawIw为WW窗口加权和,加权方式常见有高斯平均与平均两种。常数ConsCons为偏置修正量,所有像素共享与位置无关。

    ConsCons的大小极大影响着二值化效果,主要是准确率与召回率之间的权衡。当C比较小,文字部分的召回率更高,视觉体现是字体部分二值化结果清晰、连通性好。但是背景部分会出现误检测,出现大量的杂质和噪音。另ConsCons Hardcode式的选取方法使其数据间适应性较差,不同批样的图片需要人工重新调试选择。 针对常量CC需要人工调试这一缺点,有一个改进方法是将cons表达为全局均值与方法的函数,因此每个图像都有一个对应的常量。其 表达式:

    Cons=f(mglobal,stdglobal) T=mlocal−Cons m=sumdeltawIwCons=f(mglobal,stdglobal) T=mlocal−Cons m=sumdeltawIw

    ConsCons表示式的选取需要人工尝试,经验下Cons=0.05mCons=0.05m可获得一定的通用效果。

    尽管如此,由于所有像素点共用一个ConsCons,当背景出现较黑斑点时,无法考虑局部的情况,进行有效的抑制。所以这种方法是一种完全局部二值化算法。

    3.2 Sauvola’s局部二值化算法

    对于基于opencv动态二值化算法的无视局部信息的缺点,Sauvola’s在不同的像素位置引入不同的偏差,由于加入和全局方差动态范围参数R,局部信息中加入全局方差对比信息,使得在全局图像中,方差大的区域(潜在存在文字区域)像素点阈值更高,方差小的区域(背景区域)阈值更低。表达式[1]:

    T=m[1+K(fracsR−1)] T=m[1+K(fracsR−1)] 

    其中fracmsfracms为局部均值方差,R为方差动态范围,k为阈值。

    R为全局方差的动态范围。注意在论文中取为128,但实际不可用。R需要反映局部方差在全图中的统计信息,经验可取为区域方差统计的中值、均值或者最大值。K与R一起影响着对背景与文字区域的二值化区分度,一般来说,k越大,R越小,两者差别越大,背景越干净,但文字二值化连通性更差。经验下:

    k=0.1 R=fracmax(stdglobal)3k=0.1 R=fracmax(stdglobal)3

    由于Sauvola′sSauvola′s需要计算所有区域的均值与方差,计算速度比只算均值局部动态二值化算法更慢。

    3.3 循环背景差分二值化算法

    参考于[1],主要思想是循环地减去全局平均灰度再进行直方图均衡化,最终当全局平均灰度小于一定阈值后再进行二值化操作。本质上该算法可看做二值化操作之前的平滑去背景操作。但由于是全局操作,在实际中对光照不均以及干扰斑块消除效果微乎其微,没有达到去背景效果。最终结果不如论文展示。

     

    Summary

     

    P_5: 从左到右分别为原图、基于opencv动态二值化、Sauvola′sSauvola′s、循环背景差分、大津 扫描图像(少干扰):

    基于opencv动态二值化<=大津二值化<=Sauvola′s基于opencv动态二值化<=大津二值化<=Sauvola′s

    手持设备拍照(光照不均):

    大津二值化<<基于opencv动态二值化<=Sauvola′s大津二值化<<基于opencv动态二值化<=Sauvola′s

    运行速度:

    Sauvola′s<基于opencv动态二值化<全局二值化(大津等)Sauvola′s<基于opencv动态二值化<全局二值化(大津等)

    上述讨论涉及的二值化算法实际上都可作为通用的二值化算法,很少为文本特定特征作优化。调研过程中,发现大部分论文均在Sauvols′sSauvols′s二值化上加入各种预处理与后处理,算法流程较为复杂。从Sauvola′sSauvola′s的结果可发现,最好的二值化算法应该是全局与局部结合,在局部阈值当中加入全局信息(突出背景与文字的差别),加入的全局信息可以如Sauvola′sSauvola′s中的方差动态范围,还可以如连通域分析或者聚类分析(水漫算法),或者其他文档特有的特征信息。日后如果需要加强二值化效果,可以往这个方向思考(全局与局部结合)。另外,老生常谈:速度与效果不可兼得。

    拓展分析-基于深度学习的二值化算法

    //TODO

    Referecne

    [1] Adaptive document image binarization [2] A Binarization Algorithm specialized on Document Images and Photos

    展开全文
  • matlab 经典二值化算法

    2012-03-19 23:35:14
    matlab 几种经典二值化算法,kapur算法,niblack算法,otsu算法等
  • //=============================================================== //FileName: // 大津二值化算法.cpp //Date: // 2019/12/6 //Author: // khoing(https://blog.csdn.net/qq_45391763) //=...
  • 使用python实现大津二值化算法,简单直白地讲解大津二值化算法
  • 图像二值化算法分析和实现,里面详细讲解二值化的算法
  • 基于纹理的牌照二值化算法
  • 在很多图像处理的过程中,经常需要对灰度图像进行二值化。本文对几种常用的图像二值化算法进行了阐述,并通过仿真,进行比较研究。根据实验结果,阐明了各种算法的优缺点。
  • 一种局部二值化算法:Sauvola算法

    千次阅读 2019-06-17 17:14:00
    之前接触过全局二值化(OTSU算法),还有OPENCV提供的自适应二值化,最近又了解到一种新的局部二值化算法,Sauvola算法。 转载自:http://www.dididongdong.com/archives/4048 值得注意的是,计算r×r邻域内像素...
  • Wellner 自适应阈值二值化算法
  • 智能小车使用的摄像头数据算法,有二值化算法 跳变演算法
  • 图像二值化算法总结

    千次阅读 2013-12-17 09:33:46
     2010年的很长时间都在做图像二值化算法方面的工作,看了一些论文,总结了一些算法,总的来说,在这方面的算法特别多,大致可以分成两类,全局阈值二值化和...Otsu二值化算法Bernsen二值化算法Niblack二值化算法
  • 基于matlab的医学图像二值化算法,图像处理中常用于图片的预处理。
  • 而现有的二值化算法时间复杂度高,并且缺乏针对性。提出了一种专门针对商务名片的快速二值化算法,该算法利用颜色模型,通过优化带权误差平方和目标函数找到最优阈值,并给出一个快速迭代算法。经过大量实验证明,...
  • 基于块方向图的指纹图象二值化算法研究,王靖琰,,本文通过研究块方向图计算方法和动态阀值二值化,并将块方向图应用于二值化,提出了一种新的指纹图象二值化方法。
  • sauvola是一种考虑局部均值亮度的图像二值化方法, 以局部均值为基准在根据标准差做些微调.算法实现上一般用积分图方法来实现的. 步骤1 计算区域像素积分和和积分平方和 步骤2 计算标准差,标准差的计算方法为: std...
  • 基于空间分布的最大类间方差二值化算法基于空间分布的最大类间方差二值化算法
  • 图像二值化方法,针对在图像二值化过程中动态选取阈值难的问题,在分析了全局阈值法和局部阈值法各自优缺点的基 础上,提出了一种基于贝叶斯算法的全局阈值法和局部阈值法相结合的二值化方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,031
精华内容 2,012
关键字:

二值化算法