基本文本图像的倾斜校正

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

课程设计说明书题目:基本文本图像的倾斜校正

学院(系)电气工程学院

年级专业: 11级仪表三班

学号: ************* 学生姓名: ****** 指导教师:

教师职称:副教授副教授

燕山大学课程设计(论文)任务书

摘要

数字信息时代人们更多地依赖图像这一媒介,而比较常用的文本图像的倾斜问题无疑图像应用的是一大障碍。为了解决文本倾斜的自动校正功能,本文列举了四种倾斜校正的方法,涉及到基于文本图像边缘、矩形边缘的校正、基于文字向各方向投影的校正、基于投影实现特殊方向的文本校正、基于傅立叶频域分析的校正四种方法。本文方法涵盖了图形图像边缘倾斜校正、表格的倾斜校正、打印及手写文本的倾斜校正、90度特殊角情况的文本校正、180度倒立文字的校正,适用面广。通过实验验证以及与目前具有相关代表性的方法对比,论证了本文所采用的算法对带有表格、图像、手写体,以及各种语言的文本具有很好的校正效果,具有良好的有效性和可靠性。

关键词:倾斜校正、文本、边缘、投影、傅里叶。

目录

一、引言 (5)

二、算法综述 (5)

三、各算法原理分析及实现代码: (5)

四、各算法评价 (16)

五、课程设计总结 (17)

参考文献 (17)

第一章引言

在现今数字信息化高速发展的大时代背景下,随着数码产品的拍照能力越来越出色,人们更多地将信息的存储和传输依靠在数字图像这一媒介上。而文字的数字图像化——数字化图书库、pdf纸质电子书、文字扫描的发展,无疑对文本的转换技术提出了更高的要求。谈到数字图像化文本,就不得不提到这一技术遇到的最大障碍之一:输入文本图像的倾斜问题。正基于这一普遍存在的问题,我们提出了文本、图像的倾斜校正这一课题。

第二章算法综述

论文的倾斜校正共涉及以下四种方法:

1)基于文本图像边缘、矩形边缘的倾斜校正。

2)基于文字向各方向投影的倾斜校正,90度以下都能用。

3)基于投影实现特殊方向的文本——垂直和倒立文本的校正。

4)基于傅立叶频域分析的文本、表格、图像的倾斜校正。

第三章各算法原理分析及实现代码

1)基于文本图像边缘、矩形边缘的倾斜校正

适用范围:具有清晰边缘的图片、形状,倾斜角小于45度。

1.将图像转化为灰度图像。使用MATLAB进行处理时,所读入的图像是RGB三维矩阵,

在以后的处理中用到的是灰度图像和二值图像,因此,必须经过处理变成灰度图像。

2.用im2bw函数实现图像的二值化,变成只有0和1的图片。一幅图像包括目标物体、

背景还有噪声,要想从多值的数字图像中直接提取出目标物体,最常用的方法就是

图像的二值化。灰度图像二值化处理是将图像上的点的灰度值置为0或1,本代码中选取的是自动二值i=im2bw(i,graythresh(i))。

3.找文本图片的两个边缘角所在的点。

通过i,j循环扫描,找到第一个灰度

值为1的点,也就是白点。找上边界

点:从第一个点(0,0)开始,在每

一行里逐列扫描,寻找第一列灰度值

为1像素点即上边界的角所在点,

(x1,y1),找到后立即停止寻找,跳

出循环;找左边界点:从第一个点(0,

0)开始,在每一列里逐行扫描,寻

找第一列灰度值为1像素点即左边界

的角所在点,(x2,y2),找到后立即停

止寻找,跳出循环。

4.两点式求斜率。通过(x1,y1),(x2,y2)

两点,用公式k=(y2-y1)/(x2-x1)求

找到的边缘的斜率,用反正切atan

函数求出倾斜角。

5.确定图像倾斜角。通过倾斜角大于45

度还是小于45度,确定图像是经过顺

时针旋转还是逆时针旋转产生的倾斜

6.倾斜校正。用imrotate函数实现倾斜

校正。

7.代码部分

clc;

clear;

i=imread('D:\12.png'); %读入图片

V = i;

i_hight=size(i,1);

i_width=size(i,2);

i=rgb2gray(i); %变灰度图片

i=im2bw(i,graythresh(i)) %自动二值化

sign=1; %循环找两个边缘点

for y=1:i_hight

for x=1:i_width

if i(y,x)==1 %在每一行里逐列扫描

sign=0;

x1=x;

y1=y;

break

end

end

end

for x=1:i_width %在每一列里逐行扫描

for y=1:i_hight

if i(y,x)==1

sign=0;

x2=x;

y2=y;

break

end

end

end

k=(y2-y1)/(x2-x1); %求两点确定的边缘直线的斜率

theta=atan(k); %求直线的倾斜角

a=theta*180/pi; %弧度转危角度

if (abs(a)<=45) %由倾角大小与45度的比较判断校正应该顺时针旋转还是逆时针旋转 imshow(V);

title('校正前图像') %输出原图像

figure

A=imrotate(V,a); %逆时针转a度

相关文档
最新文档