# 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)
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,
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(
#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)