在Matlab中实现Radon变换,输出大小

时间:2015-02-04 19:20:42

标签: matlab image-processing tomography-reconstruction

由于我的问题的性质,我想在Matlab中评估Radon变换的数值实现(即不同的插值方法给出不同的数值)。

在尝试编写我自己的Radon时,将它与Matlab的输出进行比较,我发现我的氡投影大小与Matlab不同。

如果需要氡样品,我如何计算量,这有点直觉。我们来做2D案例。


这个想法是最大尺寸是当在氡变换中对角线(至少是矩形)部分被预测时,diago=sqrt(size(I,1),size(I,2))。因为我们什么都没有,n_r=ceil(diago)n_r应该是氡变换的离散样本量应该是确保没有数据被遗漏。

我注意到Matlab的radon输出始终是偶数,这是有意义的,因为你总是希望通过旋转中心“射线”。我注意到在所有情况下数组的端点都有2个零。

所以在这种情况下,n_r=ceil(diago)+mod(ceil(diago)+1,2)+2;

然而,似乎我与Matlab的差异很小。

MWE:

 % Try: 255,256
 pixels=256;
 I=phantom('Modified Shepp-Logan',pixels);

 rd=radon(I,pi/4);
 size(rd,1)

 s=size(I);
 diagsize=sqrt(sum(s.^2));
 n_r=ceil(diagsize)+mod(ceil(diagsize)+1,2)+2

rd=

   367


n_r =

   365

由于Matlab的Radon变换是一个我无法研究的函数,我想知道为什么会出现这种差异。

2 个答案:

答案 0 :(得分:3)

我再看一下这个问题,我相信这实际上是正确的答案。来自"隐藏文档" of radon.m(输​​入edit radon.m并滚动到底部)

  

格式化语法

     

R = RADON(I,THETA,N)返回一个Radon变换     在N点计算的投影。 R有N行。如果你不     指定N,计算投影的点数     是:

   2*ceil(norm(size(I)-floor((size(I)-1)/2)-1))+3
     

此数字足以计算单位投影      间隔,甚至沿着对角线。

我没有试图重新推出这个公式,但我认为这正是你所寻找的。

答案 1 :(得分:1)

这是一个相当专业的问题,所以我提出一个想法而不完全确定它是你的具体问题的答案(通常我会通过并让其他人回答,但我不是确定stackoverflow有多少读者研究过radon)。我认为您可能忽略的是floor函数调用文档中的radon函数。来自doc:

  

xp中返回的径向坐标是x' -axis的值,即   从x轴逆时针方向以θ度定向。两者的起源   axes是图像的中心像素,定义为

     

floor((size(I)+1)/2)

     

例如,在20×30图像中,中心像素为(10,15)。

这为你传入的奇数或偶数大小的问题提供了不同的行为。因此,在你的例子中("尝试:255,256和#34;),你需要一个不同的奇数与偶数的情况,这可能涉及(实际上)填充行和列的零。