图像处理 倾斜检测
来源:互联网 发布:淘宝代销怎么改价格 编辑:程序博客网 时间:2024/05/07 05:30
头疼了两天总算整明白了:
前言:
在ocr(数字图像文本识别)过程中,由于图像的不可控性,总会存在一定角度的倾斜。倾斜角度要满足一定范围:
θ≤d/L (θ即倾斜角度,d为文本行距,L为文本行长)
若超出这个范围,则可能将下(上)一行的文字拼接到本行,替代原有文字,产生误断。
通常来讲:θ应在2度以内。
为了避免或者是纠正这种问题,就需要对图像进行预处理,进行倾斜检测:
检测方法
有如下假设:搜索图像都已进行了二值化处理(非黑即白)(常用方法:中值阈值,最佳阈值,otu算法)。图像大小为M*N,图像只是倾斜,并未上下翻转。
直线在想素质上的特点:扫描图像中一条直线方程上的坐标点,会发现黑点最多(N<Max(M,N))。
方法1:投影法。
思想是:如图所示,扫描有限条直线(m条),统计每条直线上法线方向黑点最多(最少)的一斜行。在所有最值中,最大的那行所对应的斜率mx/n的绝对值即倾斜角度的正切值。
实现方法:输入int[][] pixels;
输出int[][] A;
步骤: 1初始化参数int a=n, b=0, count=0, max=0,c=0;
直线方程:y=ax/b;法线方程y=bx/a+c
2 for(;b<m;b++){
max=0;
for(int i=0;i<n;i++){
//统计对应斜率(a,b)时,过点(i*b/a,i)的法线上的黑点数;
count=0; c=(a*a-b*b)*i/a*a
for(int j=0;j<m;i++)
if(pixels[j][b/a*j+c]==1)count++;
if(count>max){
max=count;
A[b][0]=i;//记录每种斜率上黑点最多的斜行,和最大值;
A[b][1]=max;
}
}
}
3接下来是对数组A的分析了。这个数组保存了图像各个方向上最长直线的斜率和位置。
选择合理的其中一个作为倾斜角度,即可。也可简单的只去最大值;因为文本图像通常没有很
多的噪声,不会出现大的色块。其实依照数组你甚至可以重绘所有被检测到的直线。
方法2:hough变换:
原理:
图像中任意一条直线的方程可写为Ax+By=C;做归一化处理可得方程Ax+By=1;那么一条直线将唯一的被数对(A,B)确定。
过任意一点(a,b)的直线方程为Ma+Nb=1;若p1(a,b),p2(c,d)共线(不是几何意义的共线,而是有条线,两点均在此线上)Ax+By=1可得:M1a+N1b=1与M2c+N2d=1交于(A,B)点.
如图所示:
那么在扫描整幅图像时:可作如下处理:
0.初始条件:int[][] AB;
1.i=0->m;j=0->n
if(pixels[i][j]==1)
a=0->max;b=0->max
if(ai+bj==1)
AB[i][j]++;
2.寻找AB中的最大值,其对应坐标(i,j);就是所求倾斜角的-i/j就是倾斜角的正切值。
实现:
上述原理中有一处不好处理就是AB的取值范围,不好确定。
做如下改进即可,原图像中直线的方程设为:
p=xcosa+ysina;(a为图像中直线倾斜角度的余角,p为原点到直线的距离)
则A->p/sina b->p/cosa 0<a<180 0<p<sqrt(m*m+n*n);
即做了一个十字坐标系xoy到极坐标系poa的转换。
PS:由此可以看到直线检测在图像处理中是如何运作的。是跟曲线方程特征而决定的。同理其他曲线,也可根据曲线方程的特点有hough变换得到。投影法就略显困难。因此hough变换被广泛用于图像中图形识别过程中。
但是hough变换也存在缺点:计算量大,优点是图像内容无关。
- 图像处理 倾斜检测
- 图像倾斜
- 倾斜图像
- 图像处理 C语言 文本图像的倾斜校正
- 图像处理 C语言 文本图像的倾斜校正
- 【图像处理】图像边缘检测
- LEADTOOLS使用教程:图像的倾斜校正处理
- c#图像处理-边缘检测
- 图像处理-纹理检测-lbp
- 图像处理与边缘检测
- 图像处理------Canny边缘检测
- 图像处理--角点检测
- 【图像处理】车道线检测
- 图像处理25:边缘检测
- 【图像处理】彩色图像边缘检测
- 【OpenCV3图像处理】图像特征点检测
- 车牌图像倾斜校正
- 使用Matrix倾斜图像
- c# 设计模式:工厂方法模式
- [out/target/product/generic/obj/SHARED_LIBRARIES/libstagefright_intermediates/OMXCodec.o] Error 1的解决
- mule 带项目启动
- 「学习笔记——Linux」Linux软件安装:源代码编译与软件安装
- SSH & J2EE
- 图像处理 倾斜检测
- VI 编辑器 设置行数 颜色等
- C++使用内存泄漏检错
- Android如何检测网络的类型为3G、2G、wap、wifi .
- php数组
- 如何向领导汇报工作(3)
- shell 删除行末 ^M
- LDD3读书笔记----分配内存
- 如何清理eclipse中android插件