Accelerating the pace of engineering and science

# fan2para

Convert fan-beam projections to parallel-beam

## Syntax

P = fan2para(F,D)
P = fan2para(..., param1, val1, param2, val2,...)
[P ,parallel_locations, parallel_rotation_angles] = fan2para(...)

## Description

P = fan2para(F,D) converts the fan-beam data F to the parallel-beam data P. D is the distance in pixels from the fan-beam vertex to the center of rotation that was used to obtain the projections.

P = fan2para(..., param1, val1, param2, val2,...) specifies parameters that control various aspects of the fan2para conversion, listed in the following table. Parameter names can be abbreviated, and case does not matter.

Parameter

Description

'FanCoverage'

String specifying the range through which the beams are rotated.

'cycle' — Rotate through the full range [0,360). This is the default.

'minimal' — Rotate the minimum range necessary to represent the object.

'FanRotationIncrement'

Positive real scalar specifying the increment of the rotation angle of the fan-beam projections, measured in degrees. Default value is 1.

'FanSensorGeometry'

String specifying how sensors are positioned.

'arc' — Sensors are spaced equally along a circular arc at distance D from the center of rotation. Default value is 'arc'

'line' — Sensors are spaced equally along a line, the closest point of which is distance D from the center of rotation.

See fanbeam for details.

'FanSensorSpacing'

Positive real scalar specifying the spacing of the fan-beam sensors. Interpretation of the value depends on the setting of 'FanSensorGeometry'.

If 'FanSensorGeometry' is set to 'arc' (the default), the value defines the angular spacing in degrees. Default value is 1.

If 'FanSensorGeometry' is 'line', the value specifies the linear spacing. Default value is 1. See fanbeam for details.

 Note:   This linear spacing is measured on the x' axis. The x' axis for each column, col, of F is oriented at fan_rotation_angles(col) degrees counterclockwise from the x-axis. The origin of both axes is the center pixel of the image.

'Interpolation'

Text string specifying the type of interpolation used between the parallel-beam and fan-beam data.

'nearest' — Nearest-neighbor

{'linear'} — Linear

'spline' — Piecewise cubic spline

'pchip' — Piecewise cubic Hermite (PCHIP)

'v5cubic' — The cubic interpolation from MATLAB® 5

'ParallelCoverage'

Text string specifying the range of rotation.

'cycle' — Parallel data covers 360 degrees

{'halfcycle'} — Parallel data covers 180 degrees

'ParallelRotationIncrement'

Positive real scalar specifying the parallel-beam rotation angle increment, measured in degrees. Parallel beam angles are calculated to cover [0,180) degrees with increment PAR_ROT_INC, where PAR_ROT_INC is the value of 'ParallelRotationIncrement'.

180/PAR_ROT_INC
must be an integer.

If 'ParallelRotationIncrement' is not specified, the increment is assumed to be the same as the increment of the fan-beam rotation angles.

'ParallelSensorSpacing'

Positive real scalar specifying the spacing of the parallel-beam sensors in pixels. The range of sensor locations is implied by the range of fan angles and is given by

[D*sin(min(FAN_ANGLES)),...
D*sin(max(FAN_ANGLES))]

If 'ParallelSensorSpacing' is not specified, the spacing is assumed to be uniform and is set to the minimum spacing implied by the fan angles and sampled over the range implied by the fan angles.

[P ,parallel_locations, parallel_rotation_angles] = fan2para(...) returns the parallel-beam sensor locations in parallel_locations and rotation angles in parallel_rotation_angles.

## Class Support

The input arguments, F and D, can be double or single, and they must be nonsparse. All other numeric inputs are double. The output P is double.

## Examples

Create synthetic parallel-beam data, derive fan-beam data, and then use the fan-beam data to recover the parallel-beam data.

ph = phantom(128);
theta = 0:179;
imshow(Psynthetic,[],...
'XData',theta,'YData',xp,'InitialMagnification','fit')
axis normal
title('Synthetic Parallel-Beam Data')
xlabel('\theta (degrees)')
ylabel('x''')
colormap(hot), colorbar
Fsynthetic = para2fan(Psynthetic,100,'FanSensorSpacing',1);

Recover original parallel-beam data.

[Precovered,Ploc,Pangles] = fan2para(Fsynthetic,100,...
'FanSensorSpacing',1,...
'ParallelSensorSpacing',1);
figure
imshow(Precovered,[],'XData',Pangles,...
'YData',Ploc,'InitialMagnification','fit')
axis normal
title('Recovered Parallel-Beam Data')
xlabel('Rotation Angles (degrees)')
ylabel('Parallel Sensor Locations (pixels)')
colormap(hot), colorbar