package edu.stanford.rsl.conrad.phantom;
import edu.stanford.rsl.conrad.geometry.shapes.simple.Cylinder;
import edu.stanford.rsl.conrad.geometry.shapes.simple.Sphere;
import edu.stanford.rsl.conrad.geometry.transforms.Translation;
import edu.stanford.rsl.conrad.numerics.SimpleVector;
import edu.stanford.rsl.conrad.physics.PhysicalObject;
import edu.stanford.rsl.conrad.physics.materials.database.MaterialsDB;
/**
* MTF phantom defined by Lars Wigstroem. The phantom is a simple elipsoid torso with two high contrast bone-like objects in it. Furthermore, there are three high-beads in the phantom that can be exploited to measure the MTF.
*
* @author akmaier
*
*/
public class MTFBeadPhantom extends AnalyticPhantom {
/**
*
*/
private static final long serialVersionUID = -3843719205362984060L;
@Override
public String getName(){
return "MTF Bead Phantom";
}
@Override
public String getMedlineCitation(){
return "Maier A, Wigström L, Hofmann H, Hornegger J, Zhu L, Strobel N, Fahrig R. Three-dimensional anisotropic adaptive filtering of projection data for noise reduction in cone beam CT. Medical Physics 38(11):5896-5909, 2011.";
}
@Override
public String getBibtexCitation(){
return "@article{Maier11-TAA,\n" +
" number={11},\n" +
" author={Andreas Maier and Lars Wigstr{\"o}m and Hannes Hofmann and Joachim Hornegger and Lei Zhu and Norbert Strobel and Rebecca Fahrig},\n" +
" url={http://www5.informatik.uni-erlangen.de/Forschung/Publikationen/2011/Maier11-TAA.pdf},\n" +
" doi={10.1118/1.3633901},\n" +
" journal={Medical Physics},\n" +
" volume={38},\n" +
" title={{Three-dimensional anisotropic adaptive filtering of projection data for noise reduction in cone beam CT}},\n" +
" year={2011},\n" +
" pages={5896--5909}\n" +
"}";
}
/**
* Construtor which creates the phnatom. Internally the simple geometric objects are created and converted into physical objects by adding material to the geometry.
*/
public MTFBeadPhantom () {
// Body of the phantom.
Cylinder mainCylinder = new Cylinder(120, 60, 300);
PhysicalObject po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterialWithFormula("H2O")); //D = 1
po.setShape(mainCylinder);
add(po);
// high contrast bone-like structures
Cylinder left = new Cylinder(35,20,300);
left.applyTransform(new Translation(new SimpleVector(-80,0,0)));
po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterialWithName("Glass"));//D = 2.5
po.setShape(left);
add(po);
Cylinder right = new Cylinder(35,20,300);
right.applyTransform(new Translation(new SimpleVector(80,0,0)));
po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterialWithName("Glass"));//D = 2.5
po.setShape(right);
add(po);
// Small spheres to measure MTF.
Sphere bead1 = new Sphere(0.75);
po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterial("Al"));//D = 2.99
po.setShape(bead1);
add(po);
Sphere bead2 = new Sphere(0.75);
bead2.applyTransform(new Translation(new SimpleVector(0,40,0)));
po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterial("Al"));
po.setShape(bead2);
add(po);
Sphere bead3 = new Sphere(0.75);
bead3.applyTransform(new Translation(new SimpleVector(0,-40,0)));
po = new PhysicalObject();
po.setMaterial(MaterialsDB.getMaterial("Al"));
po.setShape(bead3);
add(po);
}
}
/*
* Copyright (C) 2010-2014 Andreas Maier
* CONRAD is developed as an Open Source project under the GNU General Public License (GPL).
*/