为了将梯形失真的图像进行矫正,我打算先检测出图像中的直线,再计算出图像水平方向和垂直方向的消失点→计算出投影变换矩阵来进行图像矫正。
这几天正在进行radon变换检测图像中的直线,有点心得,下面是radon变换的原理总结,是我结合了大量其他作者的文章并加上自己的想法,可以实现,供大家参考,有问题请帮忙指出
参考资料:链接
- 原理
- radon变换含义
- 图-5,gN值的大小代表直线上像素点的个数、radon变换产生的一个线性积分值
radon变换产生的线性积分值越大,gN越大
- 对一幅图像在某一特定角度θ下进行Radon变换会产生N个线积分值,而每一个线积分值会对应一个径向坐标x(图-5中的p1或p2...)
- 图-3,给定一组ρθ 那么就可以得出一个沿直线L的积分值
- 图-4,若有很多平行于L的直线,他们有相同的θ,径向坐标x却不同
- 每个θ角度的Radon变换结果是有多个输出项R(特定角度下的Radon变换值也即线积分值)与x一一对应
- 图-5,gN值的大小代表直线上像素点的个数、radon变换产生的一个线性积分值
- radon变换基本思想
- 了解[R,x]=radon(F,theta)
- x:是直线L离图像中心的距离,设两个坐标系的原点为图像的中心点
- 计算公式
- floor((size(I)+1)/2),例如在一个20×30的图像中,其中心点为(10,15)
- 计算公式
- 二维矩阵R
- radon变换后会得到一个二维矩阵,矩阵中峰值所在表征了原图中直线的信息,如上图所示,其中的黄点表示峰值(峰值的大小代表直线上点的个数)
只要检测出峰值所在的位置,就可以得到直线的位置信息
- 结合图可了解R,R是图像在radon变换后的线性积分值集合
- R矩阵中最大的值是某个theta下(正好theta角所在的直线与原图中最粗的直线L相垂直),对图像进行Radon变换会产生N个线积分值的集合,直线L在变换后产生的点最亮
- radon变换后会得到一个二维矩阵,矩阵中峰值所在表征了原图中直线的信息,如上图所示,其中的黄点表示峰值(峰值的大小代表直线上点的个数)
- x:是直线L离图像中心的距离,设两个坐标系的原点为图像的中心点
- 图像中直线方程式的计算
- 当在R矩阵中提取到直线的位置信息(x,θ),可计算出以图像中心点为原点的坐标系中的直线方程式(见下图)
- 进行坐标系转换,将坐标系y'-x'(以图像中心点为坐标原点)转换y-x坐标系(为以图像矩阵第一行第一列像素点为原点)
- 根据坐标系转换公式 y = -y’ + height_half(图高度一半) 和 x = x’ + width_half(宽度一半)
- radon变换含义