详解拉东(Radon)变换原理、直线检测、代码实现

柔情只为你懂 2022-12-28 01:36 254阅读 0赞

一、Radon变换

参考:Radon 变换

  1. Radon变换是使用一组参数![\\left ( \\theta ,\\rho \\right )][left _ _theta _rho _right]来表示一条直线,当选定某个方向时,那么一副图像可以被变换成![\\rho][rho]的函数的一条直线,具体推导可以参考上述链接

二、直线检测

  1. 基于Radon变换的直线检测的目的就是检测根据角度变化时出现的“局部峰值”,即可以确定直线的方向,同时,峰值大小能够确定直线上点的个数,如下图的局部极大值,则有可能是一条直线的位置,当然进行检测之前需要获得图像中的轮廓,而不是直接对图像进行变换
  2. ![20180327220429400][]

三、代码实现

  1. 例如matlab官方的图像进行检测:
  2. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjg1MjY1_size_16_color_FFFFFF_t_70][]
  3. 进行边缘检测:
  4. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjg1MjY1_size_16_color_FFFFFF_t_70 1][]
  5. 然后选择不同的角度与距离,得到了一个二维数组:
  6. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjg1MjY1_size_16_color_FFFFFF_t_70 2][]
  7. 其中较亮的点即为局部极大值,也就是第二部分所说的有可能是直线所在的位置
  8. ![watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxNjg1MjY1_size_16_color_FFFFFF_t_70 3][]

代码:

  1. I = fitsread('solarspectra.fts');
  2. I = rescale(I);
  3. figure
  4. imshow(I)
  5. title('Original Image')
  6. BW = edge(I);
  7. figure
  8. imshow(BW)
  9. title('Edges of Original Image')
  10. theta = 0:179;
  11. [R,xp] = radon(BW,theta);
  12. figure
  13. imagesc(theta, xp, R); colormap(hot);
  14. xlabel('\theta (degrees)');
  15. ylabel('x^{\prime} (pixels from center)');
  16. title('R_{\theta} (x^{\prime})');
  17. colorbar

发表评论

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

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

相关阅读

    相关 C语言实现radon变换

    因为实验室的要求,需要用C语言实现radon变换,对于刚刚我这个大二刚接触这种纯理论纯算法的人来说,真心不是一般的纠结。。。网络上搜索了好久,也没有找到。最后在CSDN论坛见过