基于MATLAB的数字文档自动倾斜检测与校正系统
项目简介
本项目是一个基于MATLAB开发的高效图像处理系统,专用于解决文档数字化过程中常见的图像倾斜问题。系统能够自动生成含有模拟文本和噪声的测试图像,通过一系列图像处理算法自动检测文档的倾斜角度,并利用仿射变换进行高精度的几何校正。该系统对于提升OCR(光学字符识别)的前置处理质量及版面分析的准确性具有重要意义。
功能特性
- 全流程自动化处理:从图像生成、预处理、特征提取到角度计算与校正一气呵成。
- 模拟数据生成:内置合成图像生成器,可设置特定角度、添加模拟文本行及椒盐噪声,便于算法验证。
- 抗噪预处理:结合高斯滤波与Otsu自适应阈值算法,有效应对文档中的噪点干扰。
- 高精度倾斜检测:基于霍夫变换(Hough Transform),角度检测分辨率设置为0.1度,支持±90度范围内的倾斜检测。
- 鲁棒的角度计算:通过多峰值检测与中位数滤波机制,剔除表格竖线或非文本纹理造成的干扰角度。
- 高质量图像重构:采用双线性插值算法进行图像反转,最大程度保留图像细节。
- 多维结果可视化:提供原图、边缘特征图、霍夫空间谱图、校正后图像及水平投影分析的对比展示。
系统要求
- MATLAB R2018a 或更高版本
- Image Processing Toolbox(图像处理工具箱)
使用方法
- 将代码保存为
main.m。 - 在MATLAB命令窗口中直接运行
main 函数。 - 系统将自动执行以下步骤:
* 生成一张设定倾斜角(默认-12.5度)的模拟文档图像。
* 控制台输出真实设置角度与算法检测到的计算角度。
* 弹出结果窗口,展示处理过程中的中间结果及最终校正效果。
详细实现原理与代码逻辑
本项目在 main.m 中实现了完整的文档校正流水线,具体逻辑如下:
1. 模拟数据生成
为了确保系统无需外部文件即可运行,代码中包含了一个
generateSyntheticDocImage 辅助函数。
- 文本模拟:在白色背景上绘制黑色矩形条来模拟文本行,行宽和位置带有一定的随机性。
- 噪声添加:引入椒盐噪声(Salt & pepper)模拟扫描仪产生的噪点。
- 初始倾斜:使用
imrotate 按照预设角度(如 -12.5度)旋转图像,并处理旋转产生的空白区域填充为背景色。
2. 图像预处理
- 灰度化:检测输入图像是否为RGB,如果是则转换为灰度图。
- 高斯滤波:使用
imgaussfilt(Sigma=0.8)对灰度图进行平滑处理,旨在减少背景噪声,防止其在边缘检测阶段被误识别为结构特征。 - 阈值计算:利用
graythresh 计算Otsu全局最佳阈值,虽然代码中生成了二值图,但后续边缘检测直接基于去噪后的灰度图进行,以保留更多亚像素级细节。
3. Canny边缘检测
采用Canny算子提取图像的边缘特征。相比于Sobel或Prewitt,Canny算法在噪声抑制和边缘连接性之间取得了更好的平衡,能够清晰地提取出文本行的上下轮廓,为霍夫变换提供纯净的输入数据。
4. 核心倾斜检测(霍夫变换)
这是系统的核心模块,用于精确定位文本行的方向:
- 参数空间映射:调用
hough 函数,设置Theta分辨率为0.1度,将边缘图像从笛卡尔空间映射到极坐标参数空间。 - 峰值提取:使用
houghpeaks 寻找霍夫累加器矩阵中强度最高的前5个峰值。这些峰值代表了图像中显著直线的法线参数。 - 角度换算:
* MATLAB中水平线的法线角度通常接近 ±90度。
* 系统通过计算检测角度与水平法线(90度)的偏差来推导文本行的实际倾斜角(Scale: detectedTheta - 90 或 + 90)。
- 异常值过滤:通过
abs(skewAngles) < 45 过滤掉接近0度(即垂直线)的干扰项(如文档边缘或纵向分割线),最后取剩余有效角度的中位数作为最终计算角度,极大地提高了算法的鲁棒性。
5. 图像校正
- 基于计算出的倾斜角,使用
imrotate 函数对原图进行反向旋转。 - 采用双线性插值(Bilinear)算法,在保持图像平滑度的同时避免锯齿效应。
- 通过参数
'loose' 确保旋转后的图像包含全部内容,避免角落信息丢失。
6. 结果验证与分析
系统通过图形化界面展示处理效果,特别引入了
水平投影分析:
- 对校正后的图像进行二值化反转(文字为亮色)。
- 计算每一行的像素累加和(水平投影)。
- 判据:如果图像校正水平,投影曲线将呈现出峰谷分明的特征(峰代表文本行,谷代表行间距);若仍有倾斜,峰谷将变得模糊平缓。这一步直观地验证了校正算法的有效性。