Calculation of B-mode image of synthetic kidney
The simulation of artificial phantoms are done by simulating and
summing the field from a collection of point scatterers.
A single RF line in an image can be calculated
by summing the response from a collection of scatterers, in which
the scattering strength is determined by the density and
speed of sound perturbations in the tissue. Homogeneous tissue
is, thus, made from a collection of randomly placed scatterers with
a scattering strength with a Gaussian distribution. The
variance of the distribution is determined by the backscattering
cross-section of the particular tissue.
The phantoms typically consist of 100,000 or more scatterers, and
simulating 50 to 128 RF lines can take several days depending on the
computer used. It is therefore beneficial to split the simulation into
concurrently run sessions. This can easily be done by first generating
the scatterer's position and amplitude and then storing them in a file.
This file can then
the be used by a number of workstations to find the RF signal for
different imaging directions, which are then stored in separate files;
one for each RF line. These files are then used to assemble an image. This
is the approach used for the simulations shown here. For the
1 million scatterers it roughly takes 1 hour and 10 minutes for a 3 GHz CPU to generate
one RF line, thus, simulating roughly 270 point scatterers per
second. The image consists of 128 lines and splitting the
simulation over 10 CPUs makes it possible to generate the image
in a little over 12 hours. The
100 CPU Linux cluster at
CFU can
make the image in roughly 1 hour and 10 minutes.
The anatomic phantoms are attempts to generate images as they will
be seen from real human subjects. This is done by drawing a bitmap
image of scattering strength of the region of interest. This map
then determines the factor multiplied onto the scattering amplitude
generated from the Gaussian distribution, and models the difference
in the density and speed of sound perturbations in the tissue.
Simulated boundaries were introduced by making lines in the scatterer map
along which the strong
scatterers were placed. This is marked by completely white lines
shown in the scatterer maps. The model is currently two-dimensional,
but can readily be expanded to three dimensions. Currently,
the elevation direction is merely made by making
a 15 mm thickness for the scatter positions, which are
randomly distributed in the interval. The scatterer map used in
this example was based on the optical photos from the Visible Human Project. They were created
from scanning a human cadaver with CT and MRI scanners and then subsequently
slicing the cadaver into 1 mm sections for taking photographs.
A phantom for a left kidney in a longitudinal scan has been made.
1.000,000 scatterers were randomly distributed within
the phantom, and with a Gaussian distributed scatter amplitude
with a standard deviation determined by the scatter map. The
phantom was scanned with a 7 MHz 128 element phased array transducer
with lambda/2 spacing and Hanning apodization. A single
transmit focus 60 mm from the transducer was used, and focusing
during reception is at 5 to 150 mm in 1 mm increments. The
images consists of 128 lines with 0.7 degrees between lines.
Below is shown the artificial kidney scan.
Artificial kidney.
The m-files can be found at:
examples/ftp_files/kidney
The routine field.m initializes the field system, and should be modified
to point to the directory holding the Field II code and m-files. The routine
make_scatteres.m is then called to make the file for the scatterers in the
phantom. The file kidney_cut.bmp holds the scatterer map of the kidney.
The script sim_kidney.m is then called. Here the field simulation
is performed and the data is stored in RF-files; one for each RF-line done.
The data for the scatteres are read from the file pht_data.mat,
so that the procedure can be started again or run for a number of workstations.
The data must then subsequently be processed to do the polar to rectangular
mapping to yield the image. The is done by the routine make_polar, that creates
an image with a dynamic range of 50 dB.
|