コード例 #1
0
# Original image python dataformat
originalImageP = np.zeros((1, 128, 128))  # matrix 128 x 128 gevuld met 0'en
for i in range(128):
    for j in range(128):
        if (i - 40) * (i - 40) + (j - 40) * (j - 40) + 10 < 30:
            originalImageP[0, i, j] = 1

#plt.figure(1), plt.title('Original image'), plt.imshow(originalImageP[0,:,:]), plt.show()

# Stir data format instance with the size of the original image in python (not yet filled!)
originalImageS = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(
        stir.make_IntCoordinate(
            np.shape(originalImageP)[0],
            np.shape(originalImageP)[1],
            np.shape(originalImageP)[2])))

# Filling the stir data format with the original image
fillStirSpace(originalImageS, originalImageP)

# Initialize the projection matrix (using ray-tracing)
# Het motion model doet nu niets, maar is nodig omdat Stir anders flipt
MotionModel = stir.MotionModel()
MotionModel.setOffset(0.0)
projmatrix = stir.ProjMatrixByBinUsingRayTracing(MotionModel)
projmatrix.set_num_tangential_LORs(nLOR)
projmatrix.set_up(projdata_info, originalImageS)

# Create projectors
forwardprojector = stir.ForwardProjectorByBinUsingProjMatrixByBin(projmatrix)
image = np.concatenate((tmpX, image), axis = 1)
image = np.concatenate((image, tmpX), axis = 1)

# Block phantom 
'''
image = np.zeros((160,160))
image[65:95, 65:95] = 1 
'''


## TEST:  Recons maken na verschillende iteraties -> som berekenen 
testList = []
sumList = [] 
test      = stir.FloatVoxelsOnCartesianGrid(projdata_info, 1,
                stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0,0,0)),
                stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(1,200,200)))  # Lengte moet je gokken/weten 

for i in range(8): 
    test = test.read_from_file('output_config_Proj_1_{0}.hv'.format(i+1))
    testList.append(stirextra.to_numpy(test)) 
    sumList.append(np.sum(stirextra.to_numpy(test)[0,:,:]))

axisX = range(1,9,1)
plt.plot(axisX, sumList, axisX, [np.sum(image)]*len(axisX)), plt.title('Sum of OSMAPOSL recon (blue), sum of original image (green)'), plt.xlabel('Iteration number')
plt.savefig('./Plaatjes/OSMAPOSLSumAfterIterations.png')
plt.show()

for i in range(8): 
    plt.subplot(2,4,i+1), plt.imshow(testList[i][0,:,:], cmap=plt.cm.Greys_r, interpolation=None, vmin = 0), plt.title('Iteration {0}'.format(i))
plt.savefig('./Plaatjes/OSMAPOSLReconAfterIterations.png'.format(trueShiftPixels))
plt.show() 
# Setup projection data
projdata_info = stir.ProjDataInfo.ProjDataInfoCTI(scanner, span, max_ring_diff, scanner.get_max_num_views(), scanner.get_max_num_non_arccorrected_bins(), False)

# Phantoms for each time frame
phantomP = [] 

# Create the individual time frames, the phantom is shifted in each frame w.r.t. the previous one 
for iFrame in range(nFrames): 
    tmp = np.zeros((1, 128, 128)) 
    tmp[0, (10+iFrame*trueShiftPixels):(30+iFrame*trueShiftPixels), 60:80] = 1
    phantomP.append(tmp) 

originalImageP = phantomP[0]
originalImageS      = stir.FloatVoxelsOnCartesianGrid(projdata_info, 1,
                stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0,0,0)),
                stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(np.shape(originalImageP)[0],np.shape(originalImageP)[1],np.shape(originalImageP)[2] )))  
fillStirSpace(originalImageS, originalImageP)

plt.figure(1)
plt.subplot(1,2,1), plt.title('Phantom TF 1'), plt.imshow(phantomP[0][0,:,:]) 
plt.subplot(1,2,2), plt.title('Phantom TF 2'), plt.imshow(phantomP[1][0,:,:]) 
plt.show()

phantomS = []
for iFrame in range(nFrames): 
    imageS      = stir.FloatVoxelsOnCartesianGrid(projdata_info, 1,
                    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0,0,0)),
                    stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(np.shape(originalImageP)[0],np.shape(originalImageP)[1],np.shape(originalImageP)[2] )))  
    fillStirSpace(imageS, phantomP[iFrame])
    phantomS.append(imageS)
コード例 #4
0
nLOR = 10

scanner = stir.Scanner(stir.Scanner.Siemens_mMR)
scanner.set_num_rings(nRings)

projdata_info = stir.ProjDataInfo.ProjDataInfoCTI(
    scanner, span, max_ring_diff, scanner.get_max_num_views(),
    scanner.get_max_num_non_arccorrected_bins(), False)

image = np.zeros((1, 160, 160))
image[0, 65:95, 65:95] = 1

originalImageS = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(1, 160, 160)))
fillStirSpace(originalImageS, image)

guessP = np.ones((1, 160, 160))  # Voor het blokje

guessS = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(1, 160, 160)))

fillStirSpace(guessS, guessP)

slope = 0.0
offSet = 0.0
nFrames = 1
MotionModel = stir.MotionModel(nFrames, slope,
コード例 #5
0
scanner.set_num_rings(nRings)
span = 1
max_ring_diff = 0

#Setup projection data
projdata_info = stir.ProjDataInfo.ProjDataInfoCTI(
    scanner, span, max_ring_diff, scanner.get_max_num_views(),
    scanner.get_max_num_non_arccorrected_bins(), False)

#Setup Recon space
phantomspace = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(
        stir.make_IntCoordinate(
            np.shape(p)[0],
            np.shape(p)[1],
            np.shape(p)[2])))

reconspace = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(
        stir.make_IntCoordinate(
            np.shape(p)[0],
            np.shape(p)[1],
            np.shape(p)[2])))

imspaceError = stir.FloatVoxelsOnCartesianGrid(
    projdata_info, 1,
    stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0, 0, 0)),
    stir.IntCartesianCoordinate3D(
コード例 #6
0

#ready up the stir
scanner = stir.Scanner(stir.Scanner.E1104)
scanner.set_num_rings(55)
#Setup projection data
span = 11


#projdata_info = stir.ProjDataInfo.ProjDataInfoCTI(scanner, span, max_ring_diff, 168, scanner.get_max_num_non_arccorrected_bins(), False)
projdata_info2D = stir.ProjDataInfo.ProjDataInfoCTI(scanner, span, max_ring_diff, 168, scanner.get_max_num_non_arccorrected_bins(), False)


guessVolume = stir.FloatVoxelsOnCartesianGrid(projdata_info2D, 1,
                stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0,0,0)),
                stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(sizeOfVolumeInVoxels[0], sizeOfVolumeInVoxels[1], sizeOfVolumeInVoxels[2])))
guessVolume.fill(1)

ErrorVolume = stir.FloatVoxelsOnCartesianGrid(projdata_info2D, 1,
                stir.FloatCartesianCoordinate3D(stir.make_FloatCoordinate(0,0,0)),
                stir.IntCartesianCoordinate3D(stir.make_IntCoordinate(sizeOfVolumeInVoxels[0], sizeOfVolumeInVoxels[1], sizeOfVolumeInVoxels[2]))) 
ErrorVolume.fill(0)

forwardSino2D = stir.ProjDataInMemory(stir.ExamInfo(), projdata_info2D)
forwardSino2D.fill(0)

#Initialize the projection matrix (using ray-tracing)
projmatrix2D =  stir.ProjMatrixByBinUsingRayTracing()
nLOR = 10
projmatrix2D.set_num_tangential_LORs(nLOR)
projmatrix2D.set_up(projdata_info2D, guessVolume)