0

由于我的问题的性质,我想在 Matlab 中评估 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 变换是我无法研究的函数,我想知道为什么会出现这种差异。

4

2 回答 2

3

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

祖父语法

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

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

这个数字足以计算单位间隔的投影,即使是沿对角线。

我没有尝试重新推导这个公式,但我认为这就是你要找的。

于 2015-02-05T21:36:10.023 回答
1

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

xp 中返回的径向坐标是沿 x' 轴的值,从 x 轴逆时针方向以 theta 度角定向。两个轴的原点都是图像的中心像素,定义为

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

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

这为您传入的奇数或偶数大小的问题提供了不同的行为。因此,在您的示例中(“尝试:255、256”),您需要奇数与偶数不同的情况,这可能涉及(实际上) 用一行和一列的零填充。

于 2015-02-04T21:28:11.593 回答