r507: no message
authorKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 8 Feb 2001 23:08:10 +0000 (23:08 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Thu, 8 Feb 2001 23:08:10 +0000 (23:08 +0000)
doc/ctsim-concepts.tex
doc/ctsim-install.tex
doc/ctsim.tex
doc/mytitle.sty
include/Makefile.am
include/ct.h
libctsupport/Makefile.am

index e8de3431d4cf6806ef53901dbdf2f8d411fb2f21..81dbf42b2da366baf1252f0b94369996c0d71fe4 100644 (file)
@@ -3,7 +3,7 @@
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
 \section{Overview}\label{conceptoverview}\index{Concepts,Overview}%
-The operation of \ctsim begins with the phantom object.  A phantom
+The operation of \ctsim\ begins with the phantom object.  A phantom
 object consists of geometric elements.  A scanner is specified and the
 projection data simulated.  Finally that projection data can be
 reconstructed using various user controlled algorithms producing an
@@ -12,7 +12,7 @@ statistically compared to the original phantom 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 objects we need to be concerned with are the 
+object, but the two objects we need to be concerned with are the
 \emph{phantom} and the \emph{scanner}.
 
 \section{Phantoms}\label{conceptphantom}\index{Concepts,Phantoms}%
@@ -27,8 +27,8 @@ be constructed.  In fact, \ctsim\ provides a shortcut to load the
 published phantoms of Herman and Shepp-Logan.  \ctsim\ also reads text
 files of user-defined phantoms.
 
-The types of phantom elements and their definitions are taken from
-Herman's 1980 book\cite{HERMAN80}.
+The types of phantom elements and their definitions are taken with
+permission from G.T. 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
@@ -36,13 +36,16 @@ phantom.  Each line contains seven entries, in the following form:
 \begin{verbatim}
 element-type 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.
+The first entry defines the type of the element, one of
+\rtfsp\texttt{rectangle}, \texttt{}, \texttt{triangle},
+\rtfsp\texttt{sector}, or \texttt{segment}. \texttt{cx},
+\rtfsp\texttt{cy}, \texttt{dx} and \texttt{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.
+\rtfsp\texttt{r} is the rotation applied to the object in degrees
+counterclockwise, and \texttt{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}
@@ -84,11 +87,11 @@ below the x-axis. The sector is then rotated and translated the same
 as a segment.
 
 \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 from polygonal sampling.  So, if the phantom is defined as a
-rectangle of size 0.1 by 0.1, the actual phantom has extent 0.101 in
-each direction.
+The overall dimensions of the phantom are increased by 1\% above the
+specified sizes to avoid clipping due to round-off errors from
+sampling the polygons of the phantom elements.  So, if the phantom is
+defined as a rectangle of size 0.1 by 0.1, the actual phantom has
+extent 0.101 in each direction.
 
 \section{Scanner}\label{conceptscanner}\index{Concepts,Scanner}%
 \subsection{Dimensions}
@@ -105,14 +108,14 @@ In general, the geometry for a scan all starts from the size of the
 phantom being scanned. This is because \ctsim\ allows for statistical
 comparisons between the original phantom image and it's reconstructions.
 Since CT scanners scan a circular area, the first important
-variable is the diameter of the circle surround the phantom, or the 
+variable is the diameter of the circle surround the phantom, or the
 \emph{phantom diameter}. Remember, as mentioned above, the
 phantom dimensions are also padded by 1\%.
 
-The other important geometry variables for scanning objects are 
-the \emph{view diameter}, \emph{scan diameter}, and \emph{focal length}.
-These variables are all input into \ctsim\ in terms of ratios rather than
-absolute values.
+The other important geometry variables for scanning objects are the
+\emph{view ratio}, \emph{scan ratio}, and \emph{focal length ratio}.
+These variables are all input into \ctsim\ in terms of ratios rather
+than absolute values.
 
 \subsubsection{Phantom Diameter}
 \begin{figure}
@@ -123,7 +126,7 @@ The phantom diameter is automatically calculated by \ctsim\ from the
 phantom definition. The maximum of the phantom length and height is
 used to define the square that completely surrounds the phantom. Let
 \latexonly{$p_l$}\latexignore{\emph{Pl}}
-be the width and height of this square. The diameter of this boundary box, 
+be the width and height of this square. The diameter of this boundary box,
 \latexonly{$p_d$,}\latexignore{\emph{Pd},}
 \rtfsp is then
 \latexignore{\\$$\emph{Pl x sqrt(2)}$$\\}
@@ -137,7 +140,7 @@ These relationships are diagrammed in figure 2.1.
 \subsubsection{View Diameter}
 The \emph{view diameter} is the area that is being processed during scanning of phantoms as
 well as during rasterization of phantoms. By default, the \emph{view diameter}
-\rtfsp is set equal to the \emph{phantom diameter}. It may be useful, especially for 
+\rtfsp is set equal to the \emph{phantom diameter}. It may be useful, especially for
 experimental reasons, to process an area larger (and maybe even smaller) than
 the phantom. Thus, during rasterization or during projections, \ctsim\ will
 ask for a \emph{view ratio},
@@ -145,10 +148,10 @@ ask for a \emph{view ratio},
 The \emph{view diameter} is then set as
 \latexonly{$$v_d = p_d v_r$$}\latexignore{\\$$\emph{Vd = Pd x VR}$$}
 
-By using a 
+By using a
 \latexonly{$v_r$}\latexignore{\emph{VR}}
 less than 1, \ctsim\ will allow
-for a \emph{view diameter} less than 
+for a \emph{view diameter} less than
 \emph{phantom diameter}.
 This will lead to significant artifacts. Physically, this would
 be impossible and is analagous to inserting an object into the CT
@@ -177,21 +180,21 @@ of the view radius. Focal length is
 calculated as
 \latexonly{$$f = (v_d / 2) f_r$$}\latexignore{\\$$\emph{F = (Vd / 2) x FR}$$}
 
-For parallel geometry scanning, the focal length doesn't matter. However, 
+For parallel geometry scanning, the focal length doesn't matter. However,
 divergent geometry scanning (equilinear and equiangular), the \emph{focal
-length ratio} should be set at \texttt{2} or more to avoid artifacts. 
+length ratio} should be set at \texttt{2} or more to avoid artifacts.
+
 
-       
 \subsection{Parallel Geometry}\label{geometryparallel}\index{Concepts,Scanner,Geometries,Parallel}
 
 As mentioned above, the focal length is not used in this simple
-geometry. The detector array is set to
-be the same size as the \emph{scan diameter}. 
-For optimal scanning in this geometry, the \emph{scan diameter} should
-be equal to the \emph{phantom diameter}. This is accomplished by using
-the default values of \texttt{1} for the \emph{view diameter ratio} and
-the \emph{scan diameter ratio}. If values of less than \texttt{1} are
-used for these two variables, significant distortions will occur.
+geometry. The detector array is set to be the same size as the
+\emph{scan diameter}.  For optimal scanning in this geometry, the
+\emph{scan diameter} should be equal to the \emph{phantom
+diameter}. This is accomplished by using the default values of
+\texttt{1} for the \emph{view ratio} and the \emph{scan ratio}. If
+values of less than \texttt{1} are used for these two variables,
+significant distortions will occur.
 
 
 \subsection{Divergent Geometries}\label{geometrydivergent}\index{Concepts,Scanner,Geometries,Divergent}
@@ -210,10 +213,10 @@ See figure 2.2.
 
 
 \subsubsection{Fan Beam Angle}
-For these divergent beam geometries, the \emph{fan beam angle} needs 
+For these divergent beam geometries, the \emph{fan beam angle} needs
 to be calculated. For real-world CT scanners, this is fixed at the
 time of manufacture. \ctsim, however, calculates the \emph{fan beam angle},
-$\alpha$ from the diameter of the \emph{scan diameter} and the \emph{focal length}
+$\alpha$ from the \emph{scan diameter} and the \emph{focal length}
 \latexignore{\\$$\emph{alpha = 2 x asin ( (Sd / 2) / f)}$$\\}
 \latexonly{\begin{equation}\label{alphacalc}\alpha = 2 \sin^{-1} ((s_d / 2) / f)\end{equation}}
 This is illustrated in figure 2.3.
@@ -224,48 +227,54 @@ This is illustrated in figure 2.3.
 
 
 Empiric testing with \ctsim\ shows that for very large \emph{fan beam angles},
-greater than approximately 
+greater than approximately
 \latexonly{$120^\circ$,}\latexignore{120 degrees,}
 there are significant artifacts. The primary way to manage the
 \emph{fan beam angle} is by varying the \emph{focal length} since the
 \emph{scan diameter} by the size of the phantom.
 
 To illustrate, the \emph{scan diameter} can be defined as
-\latexonly{$$s_d = v_r s_r p_d$$}\latexignore{\\$$Sd = Vr x Sr x Pd$$\\}
+\latexonly{$$s_d = s_r v_r p_d$$}\latexignore{\\$$Sd = Sr x Vr x Pd$$\\}
 
-If $v_r = 1$ and $s_r = 1$, then $s_d = p_d$. Further, $f = f_r v_r (p_d / 2)$
-Plugging these equations into 
+Further, $f$ can be defined as
+\latexonly{$$f = f_r (v_r p_d / 2)$$}
+Plugging these equations into
 \latexignore{the above equation,}\latexonly{equation~\ref{alphacalc},}
 We have,
 \latexonly{
 \begin{eqnarray}
-\alpha &= 2\,\sin^{-1} \frac{p_d / 2}{f_r (p_d / 2)} \nonumber \\
-&= 2\,\sin^{-1} (1 / f_r)
+\alpha &= 2\,\sin^{-1} \frac{s_r v_r p_d / 2}{f_r v_r (p_d / 2)} \nonumber \\
+&= 2\,\sin^{-1} (s_r / f_r)
 \end{eqnarray}
 }
 
-Thus, $\alpha$ depends only upon the \emph{focal length ratio}.
+Since in normal scanning $s_r = 1$, $\alpha$ depends only upon the \emph{focal length ratio}.
 
 \subsubsection{Detector Array Size}
 In general, you do not need to be concerned with the detector array
-size. It is automatically calculated by \ctsim.  The size of the
-detector array depends upon the \emph{focal length} and the 
-\emph{scan diameter}. In general, increasing the \emph{focal length}
-decreases the size of the detector array and increasing the \emph{scan
+size. It is automatically calculated by \ctsim.
+
+For parallel geometry, the detector length is equal to the scan
+diameter.
+
+For divergent beam geometrys, the size of the
+detector array also depends upon the \emph{focal length}.
+Increasing the \emph{focal length}
+decreases the size of the detector array while increasing the \emph{scan
 diameter} increases the detector array size.
 
 For equiangular geometry, the detectors are spaced around a
-circle covering an angular distance of 
+circle covering an angular distance of
 \latexonly{$\alpha$.}\latexignore{\emph{alpha}.}
 The dotted circle in
 \begin{figure}
 \image{10cm;0cm}{equiangular.eps}
 \caption{Equiangluar geometry}
 \end{figure}
-figure 2.4 indicates the positions of the detectors in this case. 
+figure 2.4 indicates the positions of the detectors in this case.
 
 For equilinear geometry, the detectors are space along a straight
-line. The length of the line depends upon 
+line. The length of the line depends upon
 \latexonly{$\alpha$}\latexignore{\emph{alpha}}
 and the \emph{focal length}. It is calculated as
 \latexonly{$$\mathrm{detLengh} = 4\,f \tan (\alpha / 2)$$}
@@ -278,14 +287,6 @@ An example of the this geometry is in figure 2.5.
 
 
 \subsubsection{Examples of Geometry Settings}
-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 center of the phantom to the source, and
-the detector array is adjusted to give an angular coverage to include the
-whole phantom.
-
 
 
 \section{Reconstruction}\label{conceptreconstruction}\index{Concepts,Reconstruction}%
@@ -301,23 +302,30 @@ 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{Multiple Computer Processing}
+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 $|w|$. \ctsim\ permits four different ways to accomplish this
-filtering. Two of the methods use convolution of the projection data with the
+filtering.
+
+Two of the methods use convolution of the projection data with the
 inverse Fourier transform of $|w|$. The other two methods perform an Fourier
 transform of the projection data and multiply that by the $|w|$ filter and
 then perform an inverse fourier transform.
 
-Though multiplying by $|w|$ gives the sharpest reconstructions, in practice, superior results are obtained by mutiplying the $|w|$ filter by
-another filter that attenuates the higher frequencies. \ctsim\ has multiple
-filters for this purpose.
+Though multiplying by $|w|$ gives the sharpest reconstructions, in
+practice, superior results are obtained by mutiplying the $|w|$ filter
+by another filter that attenuates the higher frequencies. \ctsim\ has
+multiple filters for this purpose.
 
 \subsubsection{Backprojection of filtered projections}
-Backprojection is the process of ``smearing'' the filtered projections over
-the reconstructing image. Various levels of interpolation can be specified.
-In general, the trade-off is between quality and execution time.
+Backprojection is the process of ``smearing'' the filtered projections
+over the reconstructing image. Various levels of interpolation can be
+specified.  In general, the trade-off is between quality and execution
+time.
index 2d6bab0052d213e009409870d6067c6600ea6808..06cdb344e7146684ffd376931d497bf9664a784c 100644 (file)
@@ -1,4 +1,4 @@
-\chapter{Installation}\index{Installation}%
+\chapter{Installation}\index{Installation}\label{installation}%
 \setheader{{\it CHAPTER \thechapter}}{}{}{}{}{{\it CHAPTER \thechapter}}%
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
@@ -28,22 +28,21 @@ See the INSTALL file included in the source distribution for instructions.
 
   \item libpng Library (optional)\\
         Used for PNG file export.\\
-       www.libpng.org
+    www.libpng.org
 
   \item FFTW library (optional)\\
-       Used for frequency-based filtering and fourier transformations of images.\\
-       www.fftw.org
+    Used for frequency-based filtering and fourier transformations of images.\\
+    www.fftw.org
 
   \item readline library (optional)\\
-       Used for \ctsimtext\ interactive shell.
+    Used for \ctsimtext\ interactive shell.
 
   \item dmalloc library (optional)\\
-       Used for debugging memory allocation\\
-       www.dmalloc.com
+    Used for debugging memory allocation\\
+    www.dmalloc.com
 
   \item wxWindows library (optional) \\
   Used for platform-independent graphical interface. The graphical-shell
   program \ctsim\ requires this library.\\
   www.wxwindows.org
 \end{itemize}
-
index 68aea69c9956b3a14a26283213adfa89eaeb6298..fadc1ac35f58dad3f0f037fb8c2c3a64b0263317 100644 (file)
@@ -80,12 +80,16 @@ can be either projected through or emitted from the object.
 \rtfsp\ctsim\ can then reconstruct the interior of the object from the projections
 collected around the phantom object.
 
-The \ctsim\ package has two executable files: the graphical 
-\helprefn{ctsim}{ctsim} and text \helprefn{ctsimtext}{ctsimtext} programs.
+This manual begins with an introduction into the concepts of
+\rtfsp\ctsim. Then, the graphical shell, \helprefn{ctsim}{ctsim},
+is documented followed the the command-line shell,
+\helprefn{ctsimtext}{ctsimtext}. Finally, the web-based
+\helprefn{interface}{webinterface} is discussed followed by
+\helprefn{installation}{installation} instructions.
 
-\include{ctsim-concepts}
+I hope that you enjoy \ctsim!
 
-\include{ctsim-install}
+\include{ctsim-concepts}
 
 \include{ctsim-gui}
 
@@ -93,6 +97,8 @@ The \ctsim\ package has two executable files: the graphical
 
 \include{ctsim-web}
 
+\include{ctsim-install}
+
 \include{ctsim-appendix}
 
 \newpage
index 003697870b7676d3aa4a246026f21c2c75151340..5ab1d580c19017d06e1d3ae4fc5907d445016708 100644 (file)
@@ -8,7 +8,7 @@
 {\huge \sf\@title\\\rule{\textwidth}{0.5mm}} \vskip 3em {\large \lineskip .75em
 {\sf\@author}
 \par
-{\sf Manual co-author Ian Kay, Ph.D.}}
+{\sf With documentation contributions by Ian Kay, Ph.D.}}
 \vskip 1.5em {\large\sf \@date \par} \end{flushleft} \par
 \@thanks
 \vfill
index c67084855c70991109d494a38a0486d3868876b6..965756b40ee19f99235f83e34a485665b1af22fc 100644 (file)
@@ -1,4 +1,5 @@
-noinst_HEADERS=ct.h ezplot.h pol.h sgp.h array2d.h imagefile.h backprojectors.h mpiworld.h fnetorderstream.h phantom.h timer.h sstream_subst scanner.h projections.h ctsupport.h filter.h array2dfile.h trace.h transformmatrix.h procsignal.h reconstruct.h plotfile.h hashtable.h fourier.h ctglobals.h dlgezplot.h
+noinst_HEADERS=ct.h ezplot.h pol.h sgp.h array2d.h imagefile.h backprojectors.h mpiworld.h fnetorderstream.h phantom.h timer.h sstream_subst scanner.h projections.h ctsupport.h filter.h array2dfile.h trace.h transformmatrix.h procsignal.h reconstruct.h plotfile.h hashtable.h fourier.h ctglobals.h dlgezplot.h cubicinterp.h
+
 
 
 
index c935caf9ada68040924c5aa702fe5fd956751708..25082ca9695310ba37c09465f12d479640483d95 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ct.h,v 1.55 2001/01/28 19:10:18 kevin Exp $
+**  $Id: ct.h,v 1.56 2001/02/08 23:08:10 kevin Exp $
 **
 **  This program is free software; you can redistribute it and/or modify
 **  it under the terms of the GNU General Public License (version 2) as
@@ -164,6 +164,7 @@ extern "C" {
 #endif
 
 #include "ctsupport.h"
+#include "cubicinterp.h"
 #include "fnetorderstream.h"
 
 #ifdef HAVE_SGP
index c133131ba48cd25872cf023c3150a89531d921f0..308f2522dc7982528b4876d742b0d7e44e266f2d 100644 (file)
@@ -1,6 +1,6 @@
 noinst_LIBRARIES = libctsupport.a
 INCLUDES=@my_includes@
-libctsupport_a_SOURCES= strfuncs.cpp syserror.cpp fnetorderstream.cpp consoleio.cpp mathfuncs.cpp xform.cpp clip.cpp plotfile.cpp hashtable.cpp
+libctsupport_a_SOURCES= strfuncs.cpp syserror.cpp fnetorderstream.cpp consoleio.cpp mathfuncs.cpp xform.cpp clip.cpp plotfile.cpp hashtable.cpp cubicinterp.cpp
 EXTRA_DIST=Makefile.nt