ph = phantom(128);
d = 100;
% this line has been changed;
F = fanbeam(ph,d,'FanSensorSpacing',0.5);
I = ifanbeam(F,d,'FanSensorSpacing',0.5);
imview(ph); imview(I);
But when I change d to 10*d or other large value, it can't work
properly.
Why?
When you say it can't work properly if d=1000, what did you see? a
distorted inverse projection?
Why were you trying d=1000?
If you look at the documentation, there are pictures that show the
geometry. A value of d that large doesn't really make sense because
when d is much larger than the image dimensions, the "fan beams" are
nearly parallel. So, I might not expect the results to be as good as
if you used a value of d on the order of the same size as the image.
<http://www.mathworks.com/access/helpdesk/help/toolbox/images/transf13.shtml#20820>
Mara
Mara,
Just as you say, when d is very large, the fan beam are nearly
parallel. So we usually use this property to check fan-beam algorithm
(including projection and reconstruction) making d very large,
because parallel algorithm is usually easily obtained. So I am
interested in trying d= 10*d or even larger and the result is also
amazing. Have a try ?
Nianming
Just noticed this discussion.
Try to calculate the pixel distance on the sensor for d=100 and
d=1000, for 'arc' geometry the spacing is in this example is 0.5
degree. Measured in pixels that is 100*sin(0.5)=0.87 ok, for d=1000
the spacing measured in pixels is 8.7 not ok, so you have to change
the FanSensorSpacing to approx. 0.05 degrees for d=1000 for example
like this:
figure(1);
ph = phantom(128);
subplot(2,2,1);imagesc(ph);
d = 100; % or 1000 or 10000;
FSS=asin(sin(0.5)*100/d)
% calculate the necessary FanSensorSpacing, so it is comparable to
d=100 with FSS=0.5;
[F,xf] = fanbeam(ph,d,'FanSensorSpacing',FSS);
subplot(2,2,3);imagesc(0:359,xf,F);
[P,xp] = radon(ph,0:359); % calulate parallel beam for comparison
subplot(2,2,4);imagesc(0:359,xp,P);
I = ifanbeam(F,d,'FanSensorSpacing',FSS);
subplot(2,2,2);imagesc(I);
Kind regards,
Robin