)
计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载本文围绕 computervision-recipes 仓库中confidence_based_Sauvola_binarization模块系统讲解一种对经典 Sauvola 二值化进行改进的文档图像处理技术通过为背景像素引入置信度评分在二值化过程中保留更多前景信息从而改善扫描文档图像的可读性与清晰度。读完本文你将掌握该算法的数学原理、核心实现函数SauvolaModBinarization的参数含义与默认取值以及基于默认参数和自定义参数的实际调用方法。该算法属于仓库 document_cleanup文档图像清理 方向的子模块。在文档清理任务中输入往往是带有噪声、阴影或扫描痕迹的文档图像目标是去除噪声元素、提升可读性与可见性而二值化正是这一流程中最基础也最关键的一步——它负责把前景文字、笔迹、图形与背景纸张像素可靠地区分开来。什么是文档图像二值化二值化Binarization是一种将前景像素与背景像素分割开来的技术。正如模块 README 所述最朴素的二值化手段是对灰度或彩色扫描文档图像直接做阈值化thresholding设定一个全局阈值像素值大于阈值则判为前景通常置 255否则判为背景置 0。然而真实扫描文档常存在光照不均、纸张发黄、阴影遮挡等问题单一全局阈值难以同时处理好整幅图像。Sauvola 算法通过在每个像素的局部邻域窗口内自适应计算阈值正是应对上述场景的经典方案本文介绍的置信度增强技术则是在此基础上的进一步改进。Sauvola 算法回顾局部自适应阈值公式在改进版算法的示例 Notebook Modified-Sauvola_Binarization.ipynb 中给出了 Sauvola 算法的阈值计算公式原文公式 1$$ T_W(p) m_{W}^{p} \times \left[ 1 k \times \left( \frac{s_{W}^{p}}{R} - 1 \right) \right] $$其中对于输入图像 $I$$R \frac{\max(I) - \min(I)}{2}$$m_{W}^{p}$、$s_{W}^{p}$ 分别是以像素 $p$ 为中心的 $n \times n$ 窗口 $W$ 内的灰度均值与标准差$k$ 为调节因子取值位于 $0 \le k \le 1$ 之间默认取 $0.5$。可以看出Sauvola 阈值并非全局常数而是随局部窗口内均值和标准差的统计特性自适应变化在对比度较高标准差大的区域自动调整阈值从而能更好地处理光照不均匀的文档。在仓库的源码与 Notebook 中第一遍 Sauvola 阈值由skimage.filters.threshold_sauvola计算得到窗口大小通常取图像较小边长的一定比例并强制取奇数。置信度改进的核心思想经典 Sauvola 虽然自适应但在二值化过程中仍可能丢失部分前景信息——尤其是与背景灰度接近的浅色笔迹、印章或弱对比边缘。本模块的改进思路参见 README 与 Notebook是为背景像素引入一个置信度评分confidence score从而在最终二值图像中保留更多前景信息。具体地对每个像素 $p$ 定义置信度 $C$原文公式 2$$ C_W(p) \begin{cases} \dfrac{I(p) - T_W(p)}{\max(I) - T_W(p)} \text{if } I(p) T_W(p) \ 0 \text{otherwise} \end{cases} $$其中 $I(p)$ 为像素 $p$ 的灰度值$T_W(p)$ 为其局部 Sauvola 阈值$\max(I)$ 为整幅输入图像的最大像素值。该置信度的直观含义是当某像素灰度高于其局部 Sauvola 阈值时它高出阈值的程度被归一化到 $(0, 1]$ 区间作为该像素属于前景的可信程度反之若像素灰度低于阈值则置信度直接置 0。算法随后利用这一置信度值生成一幅新的置信度图像 $I_c$再对 $I_c$ 再次应用 Sauvola 公式计算阈值并用这些新阈值生成最终二值图像——这正是源码中的两遍two-passSauvola结构第一遍对原始灰度图 $I$ 应用 Sauvola得到局部阈值 $T_1$置信度映射由公式 2 计算每个像素的置信度 $C$并缩放到 $[0, 255]$ 形成中间图像 $I_c$第二遍对置信度图像 $I_c$ 再次应用 Sauvola得到阈值 $T_2$二值化根据 $I_c$ 与 $T_2$ 的大小关系输出最终二值图像。由于置信度图像放大了前景像素与局部阈值的相对差异第二次 Sauvola 分割时能更细致地保留弱前景信息这是该改进算法能保留更多前景信息的根本原因。更详细的推导与实验依据可参阅随模块附带的论文 ModifiedSauvola.pdf。核心实现剖析SauvolaModBinarization 函数整个算法的核心实现位于 ModifiedSauvola_Binarization.py由一个独立的函数SauvolaModBinarization完成依赖numpy、cv2OpenCV与skimage.filters.threshold_sauvola。函数签名与完整实现如下import numpy as np import cv2 from skimage.filters import threshold_sauvola def SauvolaModBinarization(image, n151, n251, k10.3, k20.3, defaultTrue): if default: n1 int(0.05 * min(image.shape[0], image.shape[1])) if (n1 % 2 0): n1 n1 1 n2 int(0.1 * min(image.shape[0], image.shape[1])) if (n2 % 2 0): n2 n2 1 k1 0.5 k2 0.5 if image.ndim 3: gray cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) else: gray np.copy(image) T1 threshold_sauvola(gray, window_sizen1, kk1) max_val np.amax(gray) min_val np.amin(gray) C np.copy(T1) C C.astype(np.float32) C[gray T1] (gray[gray T1] - T1[gray T1]) / (max_val - T1[gray T1]) C[gray T1] 0 C C * 255.0 new_in np.copy(C.astype(np.uint8)) T2 threshold_sauvola(new_in, window_sizen2, kk2) binary np.copy(gray) binary[new_in T2] 0 binary[new_in T2] 255 return binary对照上文的算法流程可以逐段对应源码中的实现步骤参数解析与默认值计算当defaultTrue时依据图像较小边长按比例推导n1、n2并将偶数窗口强制加 1 调整为奇数skimage的threshold_sauvola要求窗口尺寸为奇数k1、k2均设为 0.5。灰度转换输入为 3 通道图像时用 OpenCV 的COLOR_BGR2GRAY转为灰度输入本身为单通道灰度图时直接拷贝使用。注意这里默认假设彩色输入是 BGR 通道顺序即cv2.imread的默认读取结果。第一遍 Sauvola调用threshold_sauvola(gray, window_sizen1, kk1)得到逐像素阈值矩阵T1。置信度计算与缩放对gray T1的像素按公式 2 计算归一化置信度其余像素置信度置 0整体乘以 255 后转换为uint8中间图像new_in即置信度图像 $I_c$。第二遍 Sauvola 与二值化对new_in以窗口n2、系数k2再次计算阈值T2然后按低于阈值置 0、高于阈值置 255生成并返回与输入等尺寸的二值图像。核心参数详解与取值建议函数提供了 4 个核心算法参数与 1 个开关参数完整参数含义如下表依据源码 docstring 与实现参数类型含义defaultTrue时的取值n1int第一遍 Sauvola 的窗口大小图像较小边长的 5%且强制取奇数n2int第二遍 Sauvola 的窗口大小图像较小边长的 10%且强制取奇数k1float第一遍 Sauvola 的 $k$ 值0.5k2float第二遍 Sauvola 的 $k$ 值0.5defaultbool是否使用上述默认参数True从源码实现可以推断出以下调参规律窗口大小n1、n2直接决定局部统计的邻域范围窗口过小会使局部均值和标准差对噪声敏感窗口过大会使阈值趋于全局化、丢失自适应优势。第一遍窗口默认取较小边长的 5%更细粒度地捕捉局部前景第二遍取 10%在置信度图上做较稳健的二次分割两者均需为奇数偶数会自动 1 校正。系数k1、k2控制阈值对局部标准差偏离的敏感程度取值介于 0 到 1 之间默认 0.5 是 Sauvola 算法文档与实现的常用经验值。defaultFalse模式用于需要针对特定文档类型微调的场景此时n1、n2、k1、k2完全由调用方传入但需要调用方自行保证窗口为奇数。实战用法默认参数与自定义参数示例 Notebook Modified-Sauvola_Binarization.ipynb 提供了完整的、可直接复现的调用示例。首先导入依赖与模块import numpy as np import cv2 from matplotlib import pyplot as plt from skimage.filters import threshold_sauvola import ModifiedSauvola_Binarization as MSB基线对比经典 Sauvola 二值化Notebook 先用与默认改进参数一致的设置窗口为较小边长的 5%、取奇数$k0.5$跑一遍经典 Sauvola作为效果对比基线filename test_images/2.jpeg in_color cv2.imread(filename, 1) # BGR 彩色读取 win_size int(0.05 * min(in_color.shape[0], in_color.shape[1])) if win_size % 2 0: win_size win_size 1 k 0.5 gray cv2.cvtColor(in_color, cv2.COLOR_BGR2GRAY) T threshold_sauvola(gray, window_sizewin_size, kk) binary np.copy(gray) binary[gray T] 0 binary[gray T] 255默认参数调用改进算法使用改进算法时只需一行调用内部会自动按默认规则推导n1 5%、n2 10%、k1 k2 0.5binary_default MSB.SauvolaModBinarization(in_color)自定义参数调用针对对比度较弱的文档可以显式传入自定义窗口与系数此时需将default置为Falsek1 0.5 k2 0.5 n1 int(0.04 * min(in_color.shape[0], in_color.shape[1])) if n1 % 2 0: n1 n1 1 n2 int(0.09 * min(in_color.shape[0], in_color.shape[1])) if n2 % 2 0: n2 n2 1 binary_nondefault MSB.SauvolaModBinarization( in_color, n1, n2, k1, k2, defaultFalse )上述代码展示了完整的实战流程读取彩色文档图像 → 可选用经典 Sauvola 做基线 → 用默认参数调用改进算法 → 用自定义参数本例窗口比例取 4% 与 9%调用并对比。函数返回值与输入图像尺寸一致可直接用plt.imshow(binary, cmapgray)或cv2.imwrite输出查看/保存。效果对比置信度增强如何保留更多前景模块的 README 通过三组测试图像test_images/目录下的2.jpeg、10.jpeg、new1.jpg展示了改进前后的直观差异每组均对比经典 Sauvola 的输出results 目录 中以_old结尾的2_bin_old.png、10_bin_old.png、new1_bin_old.png与置信度增强 Sauvola 的输出以_new结尾的2_bin_new.png、10_bin_new.png、new1_bin_new.png。从这些对比结果可以看出改进后的二值图像在前景区域保留了更完整的信息原本被经典 Sauvola 误判为背景而吞掉的浅色笔迹与细节在置信度增强版本中被保留下来。这一改进方向与本模块所属的 文档图像清理 任务目标一致——去除噪声的同时最大化保留文字等前景内容的可读性。关于定量指标、更多实验细节与算法论证请查阅附带的论文 ModifiedSauvola.pdf。环境依赖与运行准备模块 README 明确列出的依赖版本如下Python 3.7numpy 1.16OpenCVcv24.2scikit-imageskimage0.17threshold_sauvola来自skimage.filters因此 scikit-image 是算法的关键依赖OpenCV 用于读取图像与 BGR→灰度转换numpy 承担全部矩阵运算。在满足上述版本的 Python 环境中可通过以下方式使用该模块作为脚本/模块运行将ModifiedSauvola_Binarization.py放入工作目录后import ModifiedSauvola_Binarization as MSB即可调用按 Notebook 方式复现依次执行 Modified-Sauvola_Binarization.ipynb 中的单元格可完整走通经典 Sauvola → 改进算法默认参数→ 改进算法自定义参数的对比流程并使用 matplotlib 可视化中间结果测试图像仓库的 test_images 目录 提供了2.jpeg、10.jpeg、new1.jpg等多张样例文档图像results 目录 中存放了对应的新旧二值化结果便于直接核验算法输出。进一步阅读与延伸算法出处模块附带的论文 ModifiedSauvola.pdf其中包含置信度公式的完整推导与实验验证。可运行示例Modified-Sauvola_Binarization.ipynb 覆盖了本文全部代码示例与可视化输出。核心源码ModifiedSauvola_Binarization.py 是该算法的唯一实现文件约 50 行便于直接阅读与二次改造。所属方向document_cleanup文档图像清理 下还包含基于深度学习的轻量级文档清理方案ICDAR 2021与本二值化算法互为补充可结合具体场景选用。综上所述本模块以两遍 Sauvola 置信度映射为核心设计通过一次极简的代码实现在经典自适应二值化框架内显著提升了对弱前景信息的保留能力。无论你是想快速获得更优的文档二值化结果还是希望理解自适应阈值算法的改进思路SauvolaModBinarization都是一个易于复现、便于二次开发的优秀起点。赞分享计算机视觉深度学习【免费下载链接】computervision-recipesBest Practices, code samples, and documentation for Computer Vision.项目地址https://gitcode.com/gh_mirrors/co/computervision-recipes点击查看免费下载相关推荐OpenCV 图像抠图实战基于 Information Flow 的信息流 Alpha Matting 算法解析OpenCV 图像抠图实战基于 Information Flow 的信息流 Alpha Matting 算法解析 导读 Alpha Mattingalpha计算机视觉图像处理机器学习文档增强技术RAG_Techniques中的信息丰富化处理方法文档增强技术RAG_Techniques中的信息丰富化处理方法 引言为什么需要文档增强 在传统的检索增强生成Retrieval Augmented Ge示例工程TakePhoto EXIF信息处理保留图片元数据的方法TakePhoto EXIF信息处理保留图片元数据的方法 在Android应用开发中处理图片时常常会遇到EXIFExchangeable Image Fi移动开发图像处理上一篇如何用5分钟打造专业邮件签名开源神器全解析下一篇语义相似度阈值优化实战指南突破检索性能瓶颈的关键技术创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考