【OCR 学习笔记】二值化——局部阈值方法

二值化——局部阈值方法

  • 自适应阈值算法
  • Niblack算法
  • Sauvola算法

自适应阈值算法

自适应阈值算法1用到了积分图(Integral Image)的概念。积分图中任意一点 ( x , y ) (x,y) (x,y)的值是从图左上角到该点形成的矩形区域内所有值的和。即:
I ( x , y ) = ∑ x ′ ≤ x y ′ ≤ y i ( x ′ , y ′ ) I(x,y)=\sum_{\substack{x'\leq x \\ y' \leq y}}i(x',y') I(x,y)=xxyyi(x,y)
比如下图中的 9 9 9,就是左上角的 4 + 1 + 0 + 4 4+1+0+4 4+1+0+4
积分图

自适应算法的主要思想是以一个像素点为中心设置大小为 s × s s \times s s×s 的滑窗,滑窗扫过整张图像,每次扫描均对窗口内的像素求均值,并将均值的 1 − t % 1-t \% 1t% 作为局部阈值 。若窗口中心的像素值低于局部阈值 ,赋值0;高于局部阈值 ,赋值为255。这种算法需要对很多相互有重叠的区域进行多次加和计算。而积分图的使用可以有效地降低计算的复杂度和操作总次数。

为了计算积分图,需要在每个位置存储其左边和上方所有 f ( x , y ) f(x,y) f(x,y) 值的总和:
I ( x , y ) = f ( x , y ) + I ( x − 1 , y ) + I ( x , y − 1 ) − I ( x − 1 , y − 1 ) I(x,y)=f(x,y)+I(x-1,y)+I(x,y-1)-I(x-1,y-1) I(x,y)=f(x,y)+I(x1,y)+I(x,y1)I(x1,y1)
得出积分图之后,从滑窗左上角 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)到滑窗右下角 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的矩形内的数值总和均可以使用式(1.1)计算:
∑ x = x 1 x 2 ∑ y = y 1 y 2 f ( x , y ) = I ( x 2 , y 2 ) − I ( x 2 , y 1 − 1 ) − I ( x 1 − 1 , y 2 ) + I ( x 1 − 1 , y 1 − 1 ) ( 1.1 ) \sum_{x=x_1}^{x_2}\sum_{y=y_1}^{y2}f(x,y)=I(x_2,y_2)-I(x_2,y_1-1)-I(x_1-1,y_2)+I(x_1-1,y_1-1) \qquad (1.1) x=x1x2y=y1y2f(x,y)=I(x2,y2)I(x2,y11)I(x11,y2)+I(x11,y11)(1.1)

如下图中左上角 ( x 1 , y 1 ) (x_1,y_1) (x1,y1)到右下角 ( x 2 , y 2 ) (x_2,y_2) (x2,y2)的矩形 D D D内的数值总和由它左边 C C C和上边 B B B以及左上角 A A A的矩形算得: ( A + B + C + D ) − ( A + B ) − ( A + C ) + A (A+B+C+D)-(A+B)-(A+C)+A (A+B+C+D)(A+B)(A+C)+A
矩形总和计算
或者仍然用下面这张图来理解吧:
矩形的算法
如果红色方框为滑窗区域,在原始数据中的和是 4 + 1 + 1 + 0 = 6 4+1+1+0=6 4+1+1+0=6。如果要通过右边的积分图来运算的话,就是 16 − 7 − 7 + 4 = 6 16-7-7+4=6 1677+4=6。可以看到用积分图计算出来的结果是准确的。

滑窗矩形区域的均值则为:
m ( x , y ) = ∑ x = x 1 x 2 ∑ y = y 1 y 2 f ( x , y ) ( x 2 − x 1 ) ⋅ ( y 2 − y 1 ) ( 1.2 ) m(x,y) = \frac{\sum_{x=x_1}^{x_2}\sum_{y=y_1}^{y2}f(x,y)}{(x_2-x_1) \cdot (y_2-y_1)} \qquad (1.2) m(x,y)=(x2x1)(y2y1)x=x1x2y=y1y2f(x,y)(1.2)

接着,就可以计算局部阈值了:
T ( x , y ) = m ( x , y ) ⋅ 100 − t 100 ( 1.3 ) T(x,y) = m(x,y) \cdot \frac{100-t}{100} \qquad (1.3) T(x,y)=m(x,y)100100t(1.3)

整个自适应阈值算法的过程共扫描全图2次:

  1. 第一次扫描获得积分图;
  2. 第二次扫描根据式 (1.1) 和 (1.2) 计算每次扫描窗口内像素值的平均值,然后根据 (1.3) 计算局部阈值。若窗口内某一像素点的值大于该阈值,则对应输出255,反之则输出0。

Niblack算法

Niblack算法同样是根据窗口内的像素值来计算局部阈值的,不同之处在于它不仅考虑到区域内像素点的均值和方差,还考虑到用一个事先设定的修正系数 k k k来决定影响程度。
T ( x , y ) = m ( x , y ) + k ⋅ s ( x , y ) T(x,y)=m(x,y)+k\cdot s(x,y) T(x,y)=m(x,y)+ks(x,y)

  • T ( x , y ) T(x,y) T(x,y)为阈值;
  • m ( x , y ) m(x,y) m(x,y)为均值;
  • s ( x , y ) s(x,y) s(x,y)为方差?标准差;

上式的定义的阈值的含义为与窗口内像素值的均值相差 k k k个标准差的值。小于阈值的判定为北京,反之则判定为前景。

Niblack算法的缺陷主要有两方面:

  1. r × r r \times r r×r 的滑窗会导致在边界区域 ( r − 1 ) / 2 (r-1)/2 (r1)/2 的像素方位内无法求取阈值;
  2. 如果 r × r r \times r r×r 滑窗内全部是背景,那么该算法必然会使该区域一部分像素点成为前景,形成伪噪声。

因此,滑窗的边长 r r r 的选取非常关键——若窗口太小,则可能会被背景包含,从而不能有效的抑制噪声;若窗口太大,则会导致细节丢失。

Sauvola算法

Sauvola算法2使针对文档二值化处理,在Niblack算法基础上的改进:
T = m [ 1 + k ( s R − 1 ) ] ( 3.1 ) T=m \left[1+k(\frac{s}{R}-1) \right] \qquad (3.1) T=m[1+k(Rs1)](3.1)

  • R R R 是标准方差的动态范围,若当前输入图像是8位灰度图像,则 R = 128 R=128 R=128

Sauvola算法在处理光线不均匀或染色图像时,比Niblack算法拥有更好的表现,因为(3.1)式以自适应的方式放大了标准差的作用。
乘以 m m m 系数会降低背景区域阈值的范围,这可以有效地减少染色、污渍等带来的影响。
Sauvola算法的二值化效果
从上图可以看出,在光照不均匀的情况下,Sauvola算法比Niblack能保留更多的细节。


  1. Bradley D, Roth G. Adaptive Thresholding using the Integral Image. Journal of Graphics Tools ,2007, 12:2, 13-21. DOI: 10.1080/2151237X.2007.10129236 ↩︎

  2. Lazzra G, Geraud T. Efficient Multiscale Sauvola Binarizaiton. International Journal on Document Analysis and Recognition, 2014, 17(2); 105-123. DOI: 10.1007/s10032-013-0209-0 ↩︎

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

模板[C++]

目录 1.🚀泛型编程🚀 2.🚀函数模板🚀 2.1 ✈️函数模板概念✈️ 2.2 ✈️函数模板格式✈️ 2.3✈️函数模板的原理✈️ 2.4 ✈️函数模板的实例化✈️ 2.5 ✈️模板参数的匹配原则✈️ 3.🚀类模板&#x1f680…

文件中找TopK问题 的详细讲解

一:问题: 从一个包含10000整数的文件中找出最大的前10个数。 二:方法: 1:先直接拿文件的前10个数,建造一个小堆 2:再依次读取文件中,剩下的数,比堆顶大,则…

学习记录第二十九天

信号量————来描述可使用资源的个数 信号量(Semaphore)是一种用于控制多个进程或线程对共享资源访问的同步机制。在C语言中,通常我们会使用POSIX线程(pthread)库来实现信号量的操作 信号量有两个主要操作&#xf…

C语言 ——— 位段(位域)

目录 什么是位段 位段的内存分配 什么是位段 位段的声明和结构体是类似的 但有两个不同: 1. 位段的成员必须是整型家族: int(整型) ,unsigend int (无符号整型),sigend int&…

【初阶数据结构题目】32. 希尔排序

文章目录 希尔排序希尔排序的时间复杂度计算 希尔排序 希尔排序法又称缩小增量法。希尔排序法的基本思想是:先选定一个整数(通常是gap n/31),把待排序文件所有记录分成各组,所有的距离相等的记录分在同一组内&#x…

歌曲爬虫下载

本次编写一个程序要爬取歌曲音乐榜https://www.onenzb.com/ 里面歌曲。有帮到铁子的可以收藏和关注起来!!!废话不多说直接上代码。 1 必要的包 import requests from lxml import html,etree from bs4 import BeautifulSoup import re impo…

Qt作业合集

8.14作业 设置窗口,按钮,标签,行编辑器,实现快递速运登录页面 #include "mywidget.h"MyWidget::MyWidget(QWidget *parent): QWidget(parent) {//窗口//设置窗口的标题this->setWindowTitle("邮递系统")…

蚂蚁AL1 15.6T 创新科技的新典范

● 哈希率:算力达到15.6T(相当于15600G),即每秒能够进行15.6万亿次哈希计算,在同类产品中算力较为出色,能提高WA掘效率。 ● 功耗:功耗为3510W,虽然数值看似不低,但结合其…

内存泄漏之如何使用Visual Studio的调试工具跟踪内存泄漏?

使用Visual Studio的调试工具跟踪内存泄漏是一个系统性的过程,主要包括启用内存泄漏检测、运行程序、分析内存使用情况以及定位泄漏源等步骤。 Visual Studio提供了多种方式来检测内存泄漏,你可以根据自己的需求选择合适的方法。 注意:下面…

【TiDB】10-对 TiDB 进行 TPC-C 测试

目录 1、安装bench工具 2、插入数据 3、运行测试 4、测试结果分析 4.1、总体性能概览 4.2、事务类型详细性能 4.3、错误事务分析 4.4、结论与建议 5、清理测试数据 TPC-C 是一个对 OLTP(联机交易处理)系统进行测试的规范,使用一个商…

大数据技术—— Clickhouse安装

目录 第一章 ClickHouse入门 1.1 ClickHouse的特点 1.1.1 列式存储 1.1.2 DBMS的功能 1.1.3 多样化引擎 1.1.4 高吞吐写入能力 1.1.5 数据分区与线程级并行 1.1.6 性能对比 第二章 ClickHouse的安装 2.1 准备工作 2.1.1 确定防火墙处于关闭状态 2.1.2 CentOS取消…

论文阅读笔记:ST-MetaNet-1

目录 前言 摘要 CCS 关键词 介绍 时空相关性的复杂组合 空间相关性 时间相关性 时空相关性的多样性 本篇博客结语 前言 读这篇论文边读边学,每天坚持发博客,看到哪学到哪,这系列文章既有翻译,又有深度详细解释&#xff…

2024开源资产管理系统推荐 8款免费开源IT资产管理系统/软件

开源资产管理系统 开源资产管理系统是帮助企业管理、跟踪和优化其资产的强大工具。这些系统能够自动记录资产的详细信息,如采购日期、使用情况、维护记录等,从而实现资产的全生命周期管理。企业可以通过这些系统优化资产使用效率,减少资产闲…

【瑞芯微RV1126(深度学习模型部署)】部署自己训练的yolov8-seg,实现足型检测!

前言 如果按照本系列第一篇博客那样交叉编译了opencv,那本文有些步骤就不用了,比如交叉编译工具链的下载,所以自己斟酌步骤。 本系列第一篇:https://blog.csdn.net/m0_71523511/article/details/139636367 本系列第二篇&#xff…

数字化转型底座-盘古信息IMS OS,可支撑构建MES/WMS/QCS/IoT等工业软件

在当今这个数字化浪潮汹涌的时代,众多企业纷纷踏上数字化转型之路。对于部分想自研工业软件的企业来说,一个强大、灵活且可扩展的数字化底座显得尤为重要。盘古信息IMS OS,,正是这样一款能够支撑构建MES(制造执行系统&…

井字棋游戏(HTML+CSS+JavaScript)

🌏个人博客主页:心.c 前言:这两天在写植物大战僵尸,写不动了,现在和大家分享一下之前我写的一个很简单的小游戏井字棋,这个没有AI,可以两个人一起玩,如果大家觉得我哪里写的有一些问…

BQ27441初始化配置程序,电压、SOC等参数读取程序

系列文章目录 1.元件基础 2.电路设计 3.PCB设计 4.元件焊接 5.板子调试 6.程序设计 7.算法学习 8.编写exe 9.检测标准 10.项目举例 11.职业规划 文章目录 前言一、模拟IIC二、BQ27441初始化配置程序三、学习资料 前言 送给大学毕业后找不到奋斗方向的你(每周不定…

html+css+js网页制作 自定义电商10个页面

htmlcssjs网页制作 自定义电商10个页面 网页作品代码简单,可使用任意HTML编辑软件(如:Dreamweaver、HBuilder、Vscode 、Sublime 、Webstorm、Text 、Notepad 等任意html编辑软件进行运行及修改编辑等操作)。 获取源码 1&#…

机器学习 第11章-特征选择与稀疏学习

机器学习 第11章-特征选择与稀疏学习 11.1 子集搜索与评价 我们将属性称为“特征”(feature),对当前学习任务有用的属性称为“相关特征”(relevant feature)、没什么用的属性称为“无关特征”(irrelevant feature)。从给定的特征集合中选择出相关特征子集的过程&a…

UART通信实现与验证(RS485)

前言 UART是一种常用的串行通信协议,RS485则是一种用于长距离和抗干扰的物理层标准。结合UART和RS485可以实现可靠的数据传输,特别是在多点通信和长距离应用中。通过合适的硬件连接、软件配置和验证测试,可以确保这一通信系统的稳定性和数据完…