私の問題の性質上、Matlab でのラドン変換の数値的実装を評価したいと思います (つまり、異なる補間方法では異なる数値が得られます)。
自分のラドンをコーディングして、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 のラドン変換は調べられない関数なので、なぜこのような矛盾が生じるのだろうか。