X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=doc%2Fctsim-concepts.tex;h=9cb5cfe90dad29649a3cdcd9b1798df16b9dc567;hp=ba0c2ad689650aff00f4b1669ded96d152cf3acb;hb=f692b2d39f56ffbafc04283f32233c098aa2978b;hpb=83ee377ee0b61092ec1522ac1e1361640f74fa06 diff --git a/doc/ctsim-concepts.tex b/doc/ctsim-concepts.tex index ba0c2ad..9cb5cfe 100644 --- a/doc/ctsim-concepts.tex +++ b/doc/ctsim-concepts.tex @@ -3,20 +3,258 @@ \setfooter{\thepage}{}{}{}{}{\thepage}% \section{Overview}\label{conceptoverview}\index{Concepts,Overview}% +In CTSim, a phantom object, or a geometrical description of the object +of a CT study is constructed and an image can be created. Then a +scanner geometry can be specified, and the projection data simulated. +Finally that projection data can be reconstructed using various user +controlled algorithms producing an image of the phantom or study object. + +In order to use CTSim effectively, some knowledge of how CTSim works +and the approach taken is required. \ctsim deals with a variety of +object, but the two we need to be concerned with are the 'phantom' and +the 'scanner'. \section{Phantoms}\label{conceptphantom}\index{Concepts,Phantoms}% \subsection{Overview}\label{phantomoverview}\index{Concepts,Phantoms,Overview}% -\subsection{Phantom Elements}\label{phantoelements}\index{Concepts,Phantoms,Elements} + +CTSim uses geometrical objects to +describe the object being scanned: rectangles, triangles, ellipses, +sectors and segments. With these the standard phantoms used in the CT +literature (the Herman and the Shepp-Logan) can be constructed. In fact +CTSim provides a shortcut to construct those phantoms for you. It also +allows you to write a file in which the composition of your own phantom is +described. + +The types of phantom elements and their definitions are taken from Herman's 1980 +book\cite{HERMAN80}. + +\subsection{Phantom File}\label{phantomfile}\index{Concepts,Phantoms,File} +Each line in the text file describes an element of the +phantom. Each line contains seven entries, in the following form: +\begin{verbatim} +item cx cy dx dy r a +\end{verbatim} +The first entry defines the type of the element, one +of {\tt rectangle}, {\tt ellipse}, {\tt triangle}, {\tt sector}, or {\tt segment}. +{\tt cx}, {\tt cy}, {\tt dx} and {\tt dy} have different meanings depending on the element type. + +{\tt r} is the rotation applied to the object in degrees counterclockwise, +and {\tt a} is the X-ray attenuation coefficient of the object. +Where objects overlap, the attenuations of the overlapped objects are summed. + + + +\subsection{Phantom Elements}\label{phantomelements}\index{Concepts,Phantoms,Elements} + \subsubsection{ellipse} +Ellipses use dx and dy to define the semi-major and semi-minor axis lengths, +with the centre of the ellipse at cx and cy. Of note, the commonly used +phantom described by Shepp and Logan\cite{SHEPP77} uses only ellipses. + \subsubsection{rectangle} +Rectangles use +cx and cy to define the position of the centre of the rectangle with respect +to the origin. dx and dy are the half-width and half-height of the +rectangle. + \subsubsection{triangle} +Triangles are drawn with the centre of the base at cx,cy, with a base +width of 2*dx in x direction, and a height of dy. Rotations are then +applied about the origin. + \subsubsection{sector} +It appears that dx and dy +define the end points of a radius of the sector, from which the radius and +the angle of the two arms of the sector are calculated. But then +orientation and centreing of the sector don't make much sense yet. + \subsubsection{segment} +Segments are the segments of a circle between a chord and the +perimeter of the circle. This also isn't clear to me, but it appears that +perhaps the distance from chord to circle perimeter, and circle radius is +defined by dx and dy. Chord is always horizontal through the origin, then +translated and then rotated (???). + +\subsection{Phantom Size} +Also note that the overall dimensions of the phantom are increased by 1\% +above the specified sizes to avoid clipping due to round-off errors. If the phantom is defined as +a rectangle of size 0.1 by 0.1, the actual phantom has extent $\pm$0.101 in +each direction. \section{Scanner}\label{conceptscanner}\index{Concepts,Scanner}% \subsection{Geometries} -\subsection{Focal Length} -\subsection{Field of View} +This is where things get tricky. There are two possible approaches. The +simple approach would be to define the size of a phantom which is put at +the centre of the scanner. The scanner would have it's bore size defined, +or perhaps better, the field of view defined. Here, field of view would be +the radius or diameter of the circular area from which data is collected +and an image reconstructed. In a real CT scanner, if the object being +scanned is larger than the field of view, you get image artifacts. And of +course you can't stuff an object into a scanner if the object is larger +than the bore! In this model, the scanner size or field of view would +be used as the standard length scale. + +However, CTSim takes another approach. I believe this approach arose +because the "image" of the phantom produced from the phantom description +was being matched to the reconstruction image of the phantom. That is, +the dimensions of the 'before' and 'after' images were being matched. +The code has a Phantom object and a Scanner object. The geometry of the +Scanner is defined in part by the properties of the Phantom. In fact, +all dimensions are determined in terms of the phantom size, which is used +as the standard length scale. Remember, as mentioned above, the +phantom dimensions are also padded by 1\%. + +The maximum of the phantom length and height is used as the phantom +dimension, and one can think of a square bounding box of this size +which completely contains the phantom. Let $l_p$ be the width (or height) +of this square. + +\subsubsection{Focal Length & Field of View} +The two other important variables are the field-of-view-ratio ($f_{vR}$) +and the focal-length-ratio ($f_{lR}$). These are used along with $l_p$ to +define the focal length and the field of view (not ratios) according to +\begin{equation} +f_l = \sqrt{2} (l_p/2)(f_{lR})= (l_p/\sqrt{2}) f_{lR} +\end{equation} +\begin{equation} +f_v = \sqrt{2}l_p f_{vR} +\end{equation} +So the field of view ratio is specified in units of the phantom diameter, +whereas the focal length is specified in units of the phantom radius. The +factor of $\sqrt(2)$ can be understood if one refers to figure 1, where +we consider the case of a first generation parallel beam CT scanner. + +\subsubsection{Parallel Geometry}\label{geometryparallel}\index{Concepts,Scanner,Geometries,Parallel} +\begin{figure} +\includegraphics[width=\textwidth]{ctsimfig1.eps} +\caption{Geometry used for a 1st generation, parallel beam CT scanner.} +\end{figure} + +In figure 1A, the excursion of the source and detector need only be $l_p$, +the height (or width) of the phantom's bounding square. However, if the +field of view were only $l_p$, then the projection shown in figure 1B +would clip the corners of the phantom. By increasing the field of view by +$\sqrt{2}$ the whole phantom is included in every projection. Of course, +if the field-of-view ratio $f_{vR}$ is larger than 1, there is no problem. +However, if $f_{vR}$ is less than one and thus the scanner is smaller than +the phantom, then distortions will occur without warning from the program. + +The code also sets the detector length equal to the field of view in this +case. The focal length is chosen to be $\sqrt{2}l_p$ so the phantom will +fit between the source and detector at all rotation angles, when the focal +length ratio is specified as 1. Again, what happens if the focal length +ratio is chosen less than 1? + +The other thing to note is that in this code the detector array is set to +be the same size as the field-of-view $f_v$, equation (2). So, one has to +know the size of the phantom to specify a given scanner geometry with a +given source-detector distance (or $f_l$ here) and a given range of +excursion ($f_v$ here). + +\subsubsection{Divergent Geometries}\label{geometrydivergent}\index{Concepts,Scanner,Geometries,Divergent} +Next consider the case of equilinear (second generation) and equiangular +(third, fourth, and fifth generation) geometries. +The parts of the code relevant to this +discussion are the same for both modes. In the equilinear mode, a single +source produces a fan beam which is read by a linear array of detectors. If +the detectors occupy an arc of a circle, then the geometry is equiangular. +See figure 2. +\begin{figure} +\includegraphics[width=\textwidth]{ctsimfig2.eps} +\caption{Equilinear and equiangular geometries.} +\end{figure} + +For these geometries, the following logic is executed: A variable dHalfSquare +$d_{hs}$ is defined as +\begin{equation} +d_{hs} = (f_v)/(2\sqrt{2}) = (l_p/2) f_{vR} +\end{equation} +This is then subtracted from the focal length $f_l$ as calculated above, and +assigned to a new variable $\mathrm{dFocalPastPhm} = f_l - d_{hs}$. Since $f_l$ and +$d_{hs}$ are derived from the phantom dimension and the input focal length and field of view ratios, one can write, +\begin{equation} +\mathrm{dFocalPastPhm} = f_l -d_{hs} + = \sqrt{2}(l_p/2) f_{lR} - (l_p/2) f_{vR} = l_p(\sqrt{2}f_{lR} - f_{vR}) +\end{equation} +If this quantity is less than or equal to zero, then at least for some +projections the source is inside the phantom. Perhaps a figure will help at +this point. Consider first the case where $f_{vR} = f_{lR} =1 $, figure 3. The +square in the figure bounds the phantom and has sides $l_p$. For this case +then, +\[ +f_l=\sqrt{2}l_p/2 = l_p/\sqrt{2}, +\] +\[ +f_v = \sqrt{2}l_p, +\] +and +\[ +d_{hs} = {l_p}/{2}. +\] +Then +\[ +\mathrm{dFocalPastPhm} = ({l_p}/{2}) (\sqrt{2}-1) +\] +\begin{figure} +\includegraphics[height=0.5\textheight]{ctsimfig3.eps} +\caption{Equilinear and equiangluar geometry when focal length ratio = +field of view ratio = 1.} +\end{figure} +The angle $\alpha$ is now defined as shown in figure 3, and the detector +length is adjusted to subtend the angle $2\alpha$ as shown. Note that the +size of the detector array may have changed and the field of view is not +used. +For a circular array of detectors, the detectors are spaced around a +circle covering an angular distance of $2\alpha$. The dotted circle in +figure 3 indicates the positions of the detectors in this case. Note that +detectors at the ends of the range would not be illuminated by the source. + +Now, consider increasing the focal length ratio to two leaving the +field of view ratio as 1, as in Figure 4. Now the detectors array is +denser, and the real field of view is closer to that specified, but note +again that the field of view is not used. Instead, the focal length is +used to give a distance from the centre of the phantom to the source, and +the detector array is adjusted to give an angular coverage to include the +whole phantom. +\begin{figure} +\includegraphics[width=\textwidth]{ctsimfig4.eps} +\caption{Equilinear and equiangluar geometry when focal length ratio = 2 +and the field of view ratio = 1.} +\end{figure} +Now consider a focal length ratio of 4 (figure 5). As expected, the angle +$\alpha$ is smaller still. The dotted square is the bounding square of +the phantom rotated by 45 degrees, corresponding to the geometry of a +projection taken at that angle. Note that the fan beam now clips the top +and bottom corners of the bounding square. This illustrates that one may +still be clipping the phantom, despite CTSim's best efforts. You have +been warned. +\begin{figure} +\includegraphics[width=\textwidth]{ctsimfig5.eps} +\caption{Equilinear and equiangluar geometry when focal length ratio = 4.} + +\end{figure} + \section{Reconstruction}\label{conceptreconstruction}\index{Concepts,Reconstruction}% +\subsection{Overview} \subsection{Filtered Backprojection} +\subsection{Direct Inverse Fourier} +This method is not currently implemented in \ctsim, however it is planned for a +future release. This method does not give as accurate result as filtered +backprojection mostly due to interpolation occuring in the frequency domain rather +than the spatial domain. The technique is comprised of two sequential steps: +filtering projections and then backprojecting the filtered projections. Though +these two steps are sequential, each view position can be processed individually. +This parallelism is exploited in the MPI versions of \ctsim where the data from +all the views are spread about amongst all of the processors. This has been testing +in a 16-CPU cluster with good results. + +\subsubsection{Filter projections} +The projections for a single view have their frequency data multipled by +a filter of absolute(w). \ctsim permits four different ways to accomplish this +filtering. Two of the methods use convolution of the projection data with the +inverse fourier transform of absolute(x). The other two methods perform an fourier +transform of the projection data and multiply that by the absolute(x) filter and +then perform an inverse fourier transform. + +\item{Backprojection of filtered projections} \ No newline at end of file