利用OpenCV实现旋转文本图像矫正的原理及OpenCV代码

曾经终败给现在 2022-09-21 13:25 292阅读 0赞

对图像进行旋转矫正,关键是要获取旋转角度是多少!获取了旋转角度就可以用仿射变换对图像进行矫正,图像旋转的代码可以参考我的博文http://blog.csdn.net/wenhao_ir/article/details/51469085

旋转角度怎么获取?可以对图像作傅里叶变换获取这个角度,具体怎么求,请听我慢慢道来!

文本图像的明显特征就是存在分行间隔,那么行与文字之间这个灰度值变化就不如真正的文字及文字间的变化剧烈,那么相应的这些地方的频谱值也低,即频谱的低谱部分,因为傅里叶变换就是表征图像各点的变化频率的嘛~当文本图像旋转时,基频域中的频谱也会随之改变,那么我就可以根据这一特点来计算这个角度。

具体的步骤如下:

⑴读取图像,读出的同时转化为灰度图像,代码如下:

代码中用到的图像的下载链接为:http://pan.baidu.com/s/1miMuqJQ

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

⑵图像DFT尺寸变换,快速傅里叶变换是基于图像尺寸是2、3或5的倍数完成的,因此对于输入源图像,首先应将其变换成DFTSize,OpenCV中提供了函数getOptimalDFTSize()来实现尺寸转换。

图像DFT尺寸转换代码下如下:

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

运行结果如下图所示:

20160622163520353

⑶DFT变换,源代码如下:具体的原理可以参考我写的博文http://blog.csdn.net/wenhao_ir/article/details/51142979

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

运行结果如下图所示

20160622172307998

⑷频域中心移动

提问:为什么要进行频域中心的移动?答案在我的博文http://blog.csdn.net/wenhao_ir/article/details/51689960

我这里对这个问题再补充说几句吧!
傅里叶变换得到的低频部分在边缘角中,高频部分位于图像中心,对于倾斜文本图像,我们更关心的是图像中的低频部分,因此需要将其与高频部分互换中心。

代码如下:

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

运行结果如下图所示:

20160622173139806

⑸倾斜角检测。经过频域中心移动后,由上图可以看出,只需要检测出图像中直线的倾斜角就可以对旋转文本进行校正。计算直线倾斜角有多种方法,这里采用霍夫变换线 检测方法进行直线倾斜角的计算,首先将傅里叶变换后的频谱图进行固定二值化处理,这里阈值的选择和场景有很大关系,要根据实际应用场景进行合理调整;然后根据霍夫变换检测直线的步骤来完成图像中的直线检测,具体霍夫变换的原理我后面会写博文介绍;直线检测完了后计算图像直线的角度,然后用这个角度对原图进行仿射变换矫正。

倾斜角检测的代码如下:

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

运行结果如下图所示:

20160623130134387

20160623130658411201606231306584112016062313065841120160623130658411

实际上,这幅图像我在美图秀秀中旋转了20度左右,可见,程序得出的角度是非常OK的!

⑹仿射变换矫正。对得到的线角度计算旋转矩阵,利用仿射变换完成旋转文本矫正。

仿射变换矫正代码如下:

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

运行结果如下图所示:

20160623130431516

可见,矫正的效果是很好的。

最后再给大家一个完整版的代码吧!

代码中用到的图像的下载链接为:http://pan.baidu.com/s/1miMuqJQ

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

代码请访问https://blog.csdn.net/lehuoziyuan/article/details/84135634获取

发表评论

表情:
评论列表 (有 0 条评论,292人围观)

还没有评论,来说两句吧...

相关阅读

    相关 opencv 图像各方向旋转

    1. 简介 计算机图形学中的应用非常广泛的变换是一种称为仿射变换的特殊变换,在仿射变换中的基本变换包括平移、旋转、缩放、剪切这几种。本文以及接下来的几篇文章重点介绍一下关于旋