Radon变换 | 您所在的位置:网站首页 › python拉东变换 › Radon变换 |
在做老师的“表格识别课题研究”的时候,因为要用到倾斜校正,其基本原理是识别出扫描图像文件中的直线,然后计算倾斜角,在把倾斜的图像校正回来。在读论文的时候遇到了很多倾斜校正的算法,今天好好研究了一下Radon(拉冬)变换来进行直线识别的算法。能识别出直线的位置,下一步就可以简单得进行倾斜校正了 查了很多资料,大概明白了RADON变换是一种原始灰度图像到(p,o)二维矩阵的映射,映射关系是灰度图像的像素值对参数(p,o)的直线的线积分,或者叫投影,可理解为垂直于这个直线方向的像素值累计求和。 这样的话,对原始灰度图像进行二值化处理以后,再进行拉冬变换,得到结果矩阵,找到极值点,就可以确定直线的位置。因为垂直于直线的方向上,线积分会呈现为极值点。个人觉得这里的线积分是不区分方向的,也就是不区分正向负向的概念。 以下内容部分转载自: http://blog.csdn.net/fengyhack/article/details/41873119 首先准备一张灰度化的图像,及黑白图像,然后检测图像的边缘(如Canny算子,Sobel算子等等, 主要是灰度梯度方法吧) 假设我们得到一幅图像的边缘图像,然后找出这些边缘中的直线(段),除了之前的Hough算法之外, 这里使用Radon变换。 Radon变换核心在于“线积分”,针对一幅图像,具体来说就是: 设置一个方向(水平自左至右为0度,垂直自下至上为90度,以此类推) 按照这个方向对图像进行“列向量求和” 以0度为例,就是从图像的第1列开始,计算这一列上所有像素的灰度值之和;如此一直计算到最后一列。 以30度为例,如下图,X'为积分方向,对红色垂线所在列的像素进行灰度值叠加求和, 得到积分如图中的淡蓝色小块(仅作示意,可能不准确) 其他角度类似。 如果图像中有一条亮白的直线段,那么会存在这样的情况, 沿着某个方向积分得到的积分图没有“突变”(平缓,没有特别的尖峰) 沿着与之垂直的聆听一个方向则存在“突变” 下图是一个简单的示例 至此,你应当能体会到Radon变换的原理了。 接下来用Matlab进行测试 [plain] view plain copy %% Radon Transform function RadonTest() fileName=input('Input image file name:'); srcImage=imread(fileName); grayImage=rgb2gray(srcImage); cannyImage=edge(grayImage,'canny'); theta=0:180; [R,x]=radon(cannyImage,theta); figure,imagesc(theta,x,R); title('R_theta X'); xlabel('theta(degree)'); ylabel('X\prime'); colormap(hot); colorbar; end首先载入一张图片,然后灰度化,接着检测边缘 然后针对边缘原图像进行Radon变换 最后得到结果 示例1原图像(有一条直线段) Radon变换结果 其中的极亮(暗)点对应的是 X'=-45, theta=50° (大概位置),这表明原图像中截距45处,50+90=140°方向有一条直线(段) |
CopyRight 2018-2019 实验室设备网 版权所有 |