文档图像倾斜角检测及校正(一)(Matlab)

版权声明:转载请注明作者和出处。 https://blog.csdn.net/LQMIKU/article/details/79138811

文档图像倾斜角检测及校正(一)

  • 霍夫变换原理
  • Matlab程序

阅读之前注意:

Hi,你好,我是Cooper Liu,欢迎来到我写的“文档图像校正”系列博客。基于三种原理,我写了四个实验性的Matlab验证程序,以及两个文档校正Matlab程序。在这里你将能够获取所有的源代码以及测试图片,完全可以在你自己的Matlab上跑这些程序。

如果你是学生,请注意不要抄袭,课程设计作业的话,这种程序仅仅只能让你得到80%左右的成绩。
如果你是工作人士或者只是感兴趣的极客,Okay,我想这些程序对于理解原理是如何应用为程序的已经足够 。

最后,请勿将这些资源用于商业用途(如你所见,这些程序都非常的初级)或者是谋取个人利益,知识在传播的过程中能展现更大的价值^-^

本文阅读建议用时:32min
本文阅读结构如下表:

项目 下属项目 测试用例数量
霍夫变换原理 0
Matlab程序 1

霍夫变换原理

所谓霍夫变换,即对于图像平面上的一个点(x , y ),我们采用参数方程p=x*cos(θ)+y*sin(θ)把这个点映射到参数p-theta平面,那么图像平面上的一个点就对应p-theta平面的一条曲线,其中的p表示图像平面中的这个点所在直线到原点的距离,theta表示这个点所在直线与X轴的夹角。

又因为图像平面上的一个点对应一系列穿过这个点的直线,即有一系列对应的p和theta,所以一个点在参数p-theta平面对应着一条正弦曲线。由此我们可以推导,如果是图像平面上的一条直线,那么直线上的每个点在参数p-theta平面对应的曲线都会相交于同一点,即当前直线的(theta, p)。

基于霍夫变换原理,我们可以在p-theta平面找到最多曲线相交的那点,这一点对应着图像平面最长的直线(可以是连续的也可以是不连续的)。这个点的theta坐标即是我们要寻找的倾斜角。1

Matlab程序

基于以上原理,我编写了Matlab程序来进行实验,源代码可以参考angleDetection1.m文件。测试图片为line5.bmp。2
测试图片可以从这里获取,链接:https://pan.baidu.com/s/1dGmmGjn 密码:okt3

以下是实验结果:
实验结果
时间

如果您不想打开新的页面查看matlab源代码,也可以直接参考以下代码:

%%本版基于霍夫变换原理
%%2018.01.16 by Cooper Liu
%%Questions? Contact me: [email protected]
clear;clc; %清空之前的变量
I=imread('line5.bmp'); %读取图像
level=graythresh(I); %使用最大类间方差法找到图片的一个合适的阈值
bw=im2bw(I,level); %根据阈值,使用im2bw函数将灰度图像转换为二值图像时
figure(1);imshow(bw);
[m,n]=size(bw); %获取尺寸
pMax=round(sqrt(m^2+n^2)); %计算最大p
thetaMax=180; %设定最大角度
countMatrix=zeros(pMax,thetaMax); %关于p和角度的计数矩阵
tic;
for i=1:m
    for j=1:n
        if bw(i,j)==0
            for theta=1:thetaMax %对theta作循环
                p=floor( abs( i*cos(3.14*theta/180) + j*sin(3.14*theta/180) ) ); %在theta循环过程中计算图像矩阵中一个像素点对应的p值
                countMatrix(p+1,theta)=countMatrix(p+1,theta)+1; %像素点对应的计数矩阵中(p+1,theta)处计数
            end
        end
    end
end
[m,n]=size(countMatrix);
for i=1:m
    for j=1:n
        if countMatrix(i,j)>countMatrix(1,1)
            countMatrix(1,1)=countMatrix(i,j); %获取最多曲线的相交点
            angle=j; %获取相交点处对应的角度
        end
    end
end
toc;
angle %这里得到的角度是 原点到直线的垂线 与X轴的夹角
if angle<=90
    rot=-angle;
else
    rot=180-angle;
end
pic=imrotate(I,rot,'crop'); %旋转图像
figure(2);imshow(pic);

扫描二维码关注公众号,回复: 3808172 查看本文章


  1. 参考文献:[1] 荆雷,张欣,郭金鑫.基于版面的拍照文档图像倾斜校正.激光与红外[J].2010,第10期
  2. 同时感谢愿意在网络上分享自己想法的各位博主。

猜你喜欢

转载自blog.csdn.net/LQMIKU/article/details/79138811