Radon变换 您所在的位置:网站首页 python拉东变换 Radon变换

Radon变换

2023-08-06 02:39| 来源: 网络整理| 查看: 265

在做老师的“表格识别课题研究”的时候,因为要用到倾斜校正,其基本原理是识别出扫描图像文件中的直线,然后计算倾斜角,在把倾斜的图像校正回来。在读论文的时候遇到了很多倾斜校正的算法,今天好好研究了一下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 实验室设备网 版权所有