C语言实现radon变换

博主在实验室项目中需要使用C语言实现Radon变换,最初在网上找不到合适的资源。通过研究MATLAB的radon函数,发现了radonc.c文件,并对其进行了解释和注释。Radon变换将XY平面上的直线映射到AB平面上,通过记录点的积累来反推出原平面的线性结构。文章提供了详细的过程和源代码。
摘要由CSDN通过智能技术生成

因为实验室的要求,需要用C语言实现radon变换,对于刚刚我这个大二刚接触这种纯理论纯算法的人来说,真心不是一般的纠结。。。网络上搜索了好久,也没有找到。最后在CSDN论坛见过别人发过一截代码,可是看起来依然不知道什么意思,不明觉厉。。

后来装了个MATLAB后,查看MATLAB的radon函数,发现其中使用了radonc这么个函数,网上好不容易找到radonc.c文件,发现是一个MATLAB和C语言的混合编程,对于有C语言基础的人来说,看起来完全没有任何压力。。。

针对自己对于radon变换的理解,给整个代码写了注解,相信,有了这个文件,再要换成C语言版本,应该很简单吧。。

对于,这段radon变换代码,配上下面的这段关于radon变换的解释,相信更好理解!

Radon变换:

考虑b=ax+y,将原来的XY平面内的点映射到AB平面上。则原来在XY平面上的一条直线的所有的点,在AB平面上都位于同一个点。通过记录下AB平面上的点的积累厚度,可反知XY面上的一条线的存在。在新平面下得到相应的点积累的峰值,可得出原平面的显著的线集。


例如:XY平面上的一个直线 y=2x-3; 

变换  -3=-2x+y;   其中:a=-2,b=-3

      若有两个点在XY平面:(0,-3),(2,1),此两点都过直线,则可知有AB平面上,此两点在(-2,-3)AB平面上。

一种更好的表示方法是用r和q来代替ab。即:xcosa+ysina=r  【极坐标形势】



以图像的中心为极坐标原点,直线X`即为新的投影坐标,q为角度。我们所要求的原坐标上的一条直线,是一条垂直于上图X`的一条直线,而非X`本身。


源代码:

/* Copyright 1993-2003 The MathWorks, Inc. */   
   
/* $Revision: 1.13.4.3 $  $Date: 2003/08/01 18:11:24 $ */   
   
/*  
 *   
 * RADONC.C .MEX file  
 * Implements Radon transform.  
 *  
 * Syntax  [P, r] = radon(I, theta)  
 *  
 * evaluates the Radon transform P, of I along the angles  
 * specified by the vector THETA.  THETA values measure   
 * angle counter-clockwise from the horizontal axis.    
 * THETA defaults to [0:179] if not specified.  
 *  
 * The output argument r is a vector giving the  
 * values of r corresponding to the rows of P.  
 *  
 * The origin of I is computed in the same way as origins  
 * are computed in filter2:  
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值