package edu.stanford.rsl.conrad.phantom.workers;
import edu.stanford.rsl.conrad.data.numeric.Grid2D;
import edu.stanford.rsl.conrad.geometry.trajectories.Trajectory;
import edu.stanford.rsl.conrad.phantom.SheppLogan3D;
import edu.stanford.rsl.conrad.utils.Configuration;
import ij.process.FloatProcessor;
/**
* Wrapper class to create a volume phantom from the SheppLogan3D Class.
*
* @author Andreas Maier
*
*/
public class SheppLoganPhantomWorker extends SliceWorker {
private SheppLogan3D shepplogan = new SheppLogan3D();
@Override
public void workOnSlice(int k) {
Trajectory traj = Configuration.getGlobalConfiguration().getGeometry();
int dimx = traj.getReconDimensionX();
int dimy = traj.getReconDimensionY();
int dimz = traj.getReconDimensionZ();
FloatProcessor current = new FloatProcessor(dimx, dimy);
for (int i=0; i< dimx; i++) {
for (int j = 0; j< dimy; j++){
double value = shepplogan.ImageDomainSignal(((float)((dimx/2) - i))/(dimx/2),
((float)((dimy/2) - j))/(dimy/2),
((float)((dimz/2) - k))/(dimz/2));
current.putPixelValue(i, j, value);
}
}
Grid2D grid = new Grid2D((float[])current.getPixels(), current.getWidth(), current.getHeight());
this.imageBuffer.add(grid, k);
}
@Override
public String getProcessName() {
return "Shepp-Logan Phantom";
}
@Override
public String getBibtexCitation() {
String bibtex = "@Article{Shepp80-CTA,\n" +
" author = {{Shepp}, L. A.},\n" +
" title = {{Computerized tomography and nuclear magnetic resonance}},\n" +
" journal = {Journal of Computer Assisted Tomography},\n" +
" volume = {4},\n" +
" pages = {94-107},\n" +
" year = {1980}\n" +
"}";
return bibtex;
}
@Override
public String getMedlineCitation() {
return "Shepp LA. Computerized tomography and nuclear magnetic resonance. J Comput Assist Tomogr 4:94�107. 1980";
}
@Override
public SliceWorker clone() {
return new SheppLoganPhantomWorker();
}
}
/*
* Copyright (C) 2010-2014 Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/