0

私の問題の性質上、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 のラドン変換は調べられない関数なので、なぜこのような矛盾が生じるのだろうか。

4

2 に答える 2

3

問題をもう一度見てみましたが、これが実際には正しい答えだと思います。radon.m の「非表示のドキュメント」から (入力しedit radon.mて一番下までスクロール)

古い構文

R = RADON(I,THETA,N) は、N 点で計算された射影を使用してラドン変換を返します。R には N 行あります。N を指定しない場合、投影が計算される点の数は次のとおりです。

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

この数は、対角線に沿っても単位間隔で射影を計算するのに十分です。

この式を再導出しようとはしませんでしたが、これはあなたが探しているものだと思います。

于 2015-02-05T21:36:10.023 に答える