由于我的问题的性质,我想在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变换是一个我无法研究的函数,我想知道为什么会出现这种差异。
答案 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
此数字足以计算单位投影 间隔,甚至沿着对角线。
我没有试图重新推出这个公式,但我认为这正是你所寻找的。 p>
答案 1 :(得分:1)
这是一个相当专业的问题,所以我提出一个想法而不完全确定它是你的具体问题的答案(通常我会通过并让其他人回答,但我不是确定stackoverflow有多少读者研究过radon
)。我认为您可能忽略的是floor
函数调用文档中的radon
函数。来自doc:
xp中返回的径向坐标是x' -axis的值,即 从x轴逆时针方向以θ度定向。两者的起源 axes是图像的中心像素,定义为
floor((size(I)+1)/2)
例如,在20×30图像中,中心像素为(10,15)。
这为你传入的奇数或偶数大小的问题提供了不同的行为。因此,在你的例子中("尝试:255,256和#34;),你需要一个不同的奇数与偶数的情况,这可能涉及(实际上)填充行和列的零。