Skip to content

segmented artifacts along the Z-axis with a periodicity equal to the pitch in helical CT #196

Description

@proshanm

Why does reconstruction using the Leap helical CT projection map produce segmented artifacts along the Z-axis with a periodicity equal to the pitch? The code is as follows:

import numpy as np
import cv2
from skimage.transform import resize 
from skimage.data import shepp_logan_phantom

# simulate 3D data
phantom = shepp_logan_phantom()
phantom = resize(phantom, (1024, 1024))
phantom_vec = np.zeros([432, 1024, 1024])  
for i in range(24,406):
    phantom_vec[i, :, :] = phantom 
    
#params
ViewNum = 720
det_row_count = 32
det_col_count = 864
detector_spacing_x = 1.06 
detector_spacing_y = 1.12
px_of_one_det = 32
sod = 630 
odd = 340
absolute_pitch = 12.0 # mm/circle
helical_pitch = absolute_pitch / (detector_spacing_y  * det_row_count  * sod / (sod + odd))
print(helical_pitch)

#Leap setting
from leapctype import *
leapct = tomographicModels()
volume_section_num_per_circle = 24
circle_num = 20

angles = leapct.setAngleArray(circle_num * ViewNum, 360.0*circle_num) 
leapct.set_conebeam(circle_num * ViewNum, det_row_count, det_col_count, detector_spacing_y, detector_spacing_x, 0.5*(det_row_count-1), 0.5*(det_col_count-1), angles, sod, sod + odd)
leapct.set_curvedDetector()

voxel_height = abs(absolute_pitch / volume_section_num_per_circle)
print(f'slice thick:{voxel_height}')
leapct.set_normalizedHelicalPitch(helical_pitch)

volume_section_num = volume_section_num_per_circle * (circle_num - 2)
leapct.set_volume(1024, 1024, volume_section_num, voxelWidth=0.5, voxelHeight=voxel_height)

#project
g = leapct.allocate_projections()
print(g.shape)
leapct.project(g,phantom_vec.astype(np.float32))

#back project
res = leapct.FBP(g)

the following code shows segmented artifacts:

import matplotlib.pyplot as plt
slice_height, slice_width = res.shape[0], res.shape[1]  
dpi = plt.gcf().dpi
fig = plt.figure(figsize=(slice_width / dpi, slice_height / dpi))
ax2 = fig.add_subplot(1, 1, 1)
ax2.imshow(res[:, :, 256], vmin=np.max(res[:, :, 256]) * 0.9, vmax=np.max(res[:, :, 256]), cmap='gray')
plt.show()
plt.close(fig)
Image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions