基于BP神经网络图像几何畸变的校正

前言:本文是是博主的毕设课题,同时也是老师的项目。为了完成毕设,博主查阅大量资料,啃了好多篇论文,更有通宵调试代码的经历。现在,写下来既是对自己辛苦工作的总结,也是希望对大家有所帮助。

博主设计的BP神经网络主要针对非线性畸变,核心思想是利用BP神经网络学习出原始图像和畸变图像对应坐标点之间的变化关系,即是利用神经网络拟合出对应坐标之间的映射关系(函数),然后利用图像插值的方法构造恢复图像实现畸变校正。

                                         

左图是一副凸形畸变的网格图,右图是经过BP神经网络校正之后的图像。可以看到,网格中间凸出的部分已经被展平,如果是一副有文本信息的图像,我们就可以对该部分的文本进行下一步的识别和处理。               

                        


本文会给出主要代码供大家参考。

本篇博客的结构如下:

一:BP神经网络简介

二:图像非线性畸变校正的具体实现过程

先从第一部分开始,什么是BP神经网络,以及它能做什么。

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

一:

BP神经网络是诸多人工神经网络中应用最广泛的一种,最早在1986年由科学家Rumelhart和McClelland提出,中文释义为误差反向传播网络,是一种前馈型网络,也是在所有人工神经网络中应用最多的神经网络。BP神经网络可以实现多种类分类问题,这是传统线性感知器所无法做到的。现在常用的BP神经网络,网络中的权值沿着梯度下降的方向进行调整,通过前向反馈不断调整权值,使得网络的实际输出与期望输出之间的误差均方差最小。BP神经网络的学习过程主要分为两个过程:一是信息的传递即从输入层到输出层的过程;二是误差的前向反馈即通过输出层逐层向前调整权值。也就是说在计算误差时,输出是按照从输入到输出的方向进行的,调整权值时按照从输出到输入的方向进行。第一个过程即信息前向传播的过程,输入信息通过隐藏层传递到输出层,选取合适的激活函数,经过激活函数进行非线性变换使其能够拟合非线性关系产生输出信号。如果实际输出与期望输出的均方误差大于给定的阈值相差,则会通过从输出层逐层向前调整权值,也即是反向的权值调整过程。以从各层叠加的误差信号作为权值调整的依据,逐层向前调整权值,经过反复的学习和训练,误差与均方差都小于给定的阈值时,则停止训练。

BP神经网络的结构主要有三个部分组成:输入层;隐藏层;输出层。每一层的神经元个数依据实际问题的需要而定。理论上BP神经网路可以实现任意d1维数据到d2维数据的映射。比如,输入的数据是二维的,通过BP神经网络可以输出一维的数据,也可以输出二维的数据。BP神经网络的这一性能使其在解决非线性问题时有着天然的优势。由于文本图像的几何畸变往往都是较为复杂的,即包含线性几何畸变,也包含非线性几何畸变,所以对一副畸变类型未知的图像,使用神经网络来拟合畸变坐标与未畸变坐标之间的映射关系不失为最好的选择。

用一幅图简单的描述网络的结构。


其中每条线上都有一个权值,表示前后神经元之间联系的强弱程度,这也是神经网络能够进行大量有效工作的基础。

本文针对文本图像非线性几何畸变设计的BP神经网络有一个输入层一个隐藏层和一个输出层,输入层有两个神经元,隐藏层包含20个神经元,输出层包含两个神经元。网络的权值采用最速梯度下降法调整。其中输入层与隐藏层之间的激活函数为sigmoid函数[18],隐藏层与输出层之间的函数为pureline函数。在visualstudio 2015环境下用C语言编写该神经网络,该神经网络主要包含以下几个部分:

(1)    训练样本的读入和数据归一化

(2)    信息的前向传递

(3)    权值调整

(4)    网络训练

第一部分获取训练样本。训练样本的获取是在matlab环境下,读入畸变图像和未畸变图像,然后调用cpselect函数,将图像可视化,并且通过鼠标在图像中直接选点获得的。根据图像的大小和图像中畸变最突出的部分合理的选取坐标。训练样本的数目于校正结果不是正比的关系。所以,只要选取的坐标比较精确神经网络学习得到的结论越可靠。但是考虑到计算量和算法的时间复杂度,训练样本确是不宜过大。

第二部分网络的训练。BP神经网络的训练本质是权值的前向反馈调节。这一部分的实现依赖于用C语言编写的函数train()。该函数会在代码附录部分展示。该函数的过程就是通过计算BP神经网络的实际输出与理想输出之间的均方误差,如果这个数大于给定的阈值,则根据公式(4-1)对权值进行调整。

w=w-b*t*o*(1-o)*in
v=v-B*(output-out)*o                               (4-1)

其中w是隐藏层上神经元的权值,v是输出层神经元上的权值。B,b表示每次权值调整的步长,它们可以根据特定的问题进行调整,使BP神经网络能够以最快的速度收敛,在本文中它们都是常数0.1,o是隐藏层的输出,in代表输入的训练样本,output代表神经网络的实际输出,o是神经网络的期望输出。


第三部分保存训练结果。保存训练结果也即是要保存神经网络训练终止之后的权值,这些权值反应了畸变图像与未畸变图像之间坐标的映射关系。这些权值保存在特定的txt文件中。

本文所用的BP神经网络训练次数是15000次。当然,针对不同的问题,这个数字是可以变动的。


二:图像非线性畸变校正的具体实现过程

BP神经网络训练完成后,就可以利用之前保存的权值进行畸变图像的校正。具体过程如下:

第一步是构造恢复图像。恢复图像的大小应与原图像大小一致。这一步在matlab环境下可以用一句简单的命令实现。

第二步是将恢复图像中的坐标作为神经网络的输入代入到BP神经网络中。恢复图像中的每一点的坐标都要进行这一步操作。

第三步是确定恢复图像中每一点的像素值。这一步的实现要用到双线性插值法。



由于代码比较多,就不在这粘了。可以到这个地方下载,由于代码是博主完全自己抠出来的,所以会收取一些积分。

猜你喜欢

转载自blog.csdn.net/zshluckydogs/article/details/79466174