content: package edu.stanford.rsl.tutorial.motion.estimation;
  
  import java.io.IOException;
  
  import edu.stanford.rsl.conrad.data.numeric.Grid2D;
  import edu.stanford.rsl.conrad.data.numeric.NumericPointwiseOperators;
  import edu.stanford.rsl.conrad.geometry.trajectories.Trajectory;
  import edu.stanford.rsl.conrad.io.FileProjectionSource;
  import edu.stanford.rsl.conrad.pipeline.ProjectionSource;
  import edu.stanford.rsl.conrad.utils.Configuration;
  import edu.stanford.rsl.conrad.utils.ImageGridBuffer;
  import edu.stanford.rsl.tutorial.cone.ConeBeamCosineFilter;
  import edu.stanford.rsl.tutorial.filters.RamLakKernel;
  
  public class ProjectionLoader {
  
  	private static ImageGridBuffer projections;
  	
  	public ImageGridBuffer getProjections(){
  		return projections;
  	}
  	
  	public void loadAndFilterImages(String filename) throws IOException{
  		projections = new ImageGridBuffer();
  		Configuration.loadConfiguration();
  		Configuration c = Configuration.getGlobalConfiguration();
  		Trajectory geo = c.getGeometry();
  		double focalLength = geo.getSourceToDetectorDistance();
  		int maxU_PX = geo.getDetectorWidth();
  		int maxV_PX = geo.getDetectorHeight();
  		double deltaU = geo.getPixelDimensionX();
  		double deltaV = geo.getPixelDimensionY();
  		double maxU = (maxU_PX) * deltaU;
  		double maxV = (maxV_PX) * deltaV;
  		float D = (float) focalLength;
  		int maxProjs = geo.getProjectionStackSize();
  		ConeBeamCosineFilter cbFilter = new ConeBeamCosineFilter(focalLength, maxU, maxV, deltaU, deltaV);
  		RamLakKernel ramK = new RamLakKernel(maxU_PX, deltaU);
  		ProjectionSource pSource = FileProjectionSource.openProjectionStream(filename);
  		Grid2D proj;
  		for(int i = 0; i < maxProjs; i++){
  			proj = pSource.getNextProjection();
  			cbFilter.applyToGrid(proj);
  			//ramp
  			for (int j = 0;j <maxV_PX; ++j)
  				ramK.applyToGrid(proj.getSubGrid(j));
  			NumericPointwiseOperators.multiplyBy(proj, (float) (D*D * Math.PI / geo.getNumProjectionMatrices()));
  			projections.add(proj,i);
  		}
  	}
  	
  }
  /*
   * Copyright (C) 2010-2014 Marco B�gel
   * CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
  */