[Insight-users] Wondering if it is a bug in Danielsson distance map filter
Radhika Sivaramakrishna
radhika.sivaramakrishna at synarc.com
Thu, 15 Apr 2004 09:10:17 -0700
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: multipart/alternative;
boundary="----_=_NextPart_001_01C42304.24BB95F2"
------_=_NextPart_001_01C42304.24BB95F2
Content-Type: text/plain
Hi Luis,
I am observing a strange behavior in the Danielsson map filter and I am
wondering if it is a bug. I have been experimenting with this for a few days
now and I have found this behavior even on 3D images. I have attached an
image (Mask_2D.img) that I ran the distance map filter on. I inverted this
mask before running the filter. I ran it with and without setting
UseImageSpacing. When I do not
set UseImageSpacing, I observe some strange behavior. It sets 1 in places
where it should not. Could you explain what is happening? My pixel type is
unsigned char. Here is a very small portion of the code that just runs the
shiftscale and Danielsson Filter. In the attached results you will clearly
see an extra 1 in location (8,18) which should not be. I don't know if I am
using this incorrectly or something else is happening.
Thanks
Radhika
typedef itk::Image<PixelType,2> ImageType2D;
typedef itk::ImageFileWriter< ImageType2D > WriterType2D;
typedef itk::ShiftScaleImageFilter <ImageType2D, ImageType2D>
ShiftScaleFilterType2D;
typedef itk::DanielssonDistanceMapImageFilter <ImageType2D, ImageType2D>
EDMFilterType2D; EDMFilterType2D::Pointer edmfilter2D =
EDMFilterType2D::New();
ShiftScaleFilterType2D::Pointer ssfilter2D = ShiftScaleFilterType2D::New();
ssfilter2D->SetShift(shift);
ssfilter2D->SetScale(scale);
edmfilter2D->SetInputIsBinary(true);
// edmfilter2D->SetUseImageSpacing(true);
ssfilter2D->SetInput(mask);
edmfilter2D->SetInput(ssfilter2D->GetOutput());
edmfilter2D->Update();
-----Original Message-----
From: Luis Ibanez [mailto:luis.ibanez at kitware.com]
Sent: Wednesday, April 14, 2004 1:13 PM
To: Radhika Sivaramakrishna
Cc: ITK
Subject: Re: [Insight-users] More questions on Daniellson distance map
filter
Hi Radhika,
The DanielssonDistanceMap takes into account diagonal distances
regardless of whether the UseImageSpacing flag is enabled or not.
What changes when the flag is enabled is that the components
of the pixel spacing are taken into account. Therefore the
distances are reported in physical units (e.g. millimeters)
instead of pixels. As a consequence, enabling the flag also
takes care of taking pixel anisotropy into account.
The distances are computed as Euclidean distances, not as
Manhattan distances (city-block), but are limited in precision
to one-pixel. That is, there is no sub-pixel accuracy in the
distance values. An easy way to verify the Euclidean-ness of
the resulting DistanceMap is to create a dataset with a single
pixel on in the middle and pass it as input to the Danielsson
DistanceMap filter.
Using the DanielssonDistanceMap plugin for VolView would
be a very easy way of experimenting with the distances.
Please let us know if you have further questions.
Thanks
Luis
-----------------------------
Radhika Sivaramakrishna wrote:
> Hi Luis,
> Thanks for your explanation. I have a doubt: when the UseImageSpacing is
> enabled, does this (1) take into account diagonal distances and (2)
> nonisotropic voxels also? I thought it did both. If I want to just make
> sure that diagonal distances are taken into account (ie I don't want to
> do city block distances or chessboard distances), but do not want to
> take non-isotropy into account, what should I do?
>
> Hope my question is clear.
> Thanks
> Radhika
>
>
>
> -----Original Message-----
> From: Luis Ibanez [mailto:luis.ibanez at kitware.com]
> Sent: Monday, April 12, 2004 6:46 PM
> To: Radhika Sivaramakrishna
> Cc: ITK
> Subject: Re: [Insight-users] More questions on Daniellson distance map
> filter
>
>
>
> Hi Radhika,
>
> When you enable the "UseImageSpacing" flag, the values
> of pixel spacing are used in the last stage of distance
> computation. The spacing is used to multiply the distance
> components when their squares are summed up.
>
> The resulting distance is then casted to the type of the
> output image pixel type. This is done in the file:
>
> Insight/Code/BasicFilters/
> itkDanielssonDistanceMapImageFilter.txx:
>
> in line 299:
>
> dt.Set(
> static_cast<
> typename
> OutputImageType::PixelType>(sqrt( distance )) );
>
>
> Note that the casting is done as a flat truncation.
> No effort is made for scaling the distances in the
> range of the pixel type. Depending on the physical
> extent of your image, this may or may not be a problem.
>
>
>
> If you want to compute this distance scaling in a better
> way, you could setup the output pixel type as float,
> and then connect the output of the DanielssonDistanceMap
> filter to a RescaleIntensityImageFilter with output pixel
> type = unsigned char. This last filter will then rescale
> nicely the distances into the range of intensities of the
> output image. Note that with this filter you can select
> what values to use for representing the maximum and minimum
> values of the distance.
>
>
> --
>
> You may want to take a look at the new VolView plugin
> for computing the Danielsson distance. The source code
> for this plugin is available at
>
>
> InsightApplications/
> VolviewPlugins/
> vvITKDanielssonDistanceMap.cxx
>
>
>
>
> Please let us know if you have further questions,
>
>
> Thanks
>
>
> Luis
>
>
>
> -------------------------------
>
> Radhika Sivaramakrishna wrote:
>
> > Hi,
> >
> > I had more questions on the Danielsson distance map filter. I have set
> > the input and output of the filter to unsigned char.
> >
> > I have also put the SetUseImageSpacing flag to true. This means that
> > actual distances may be computed which are more floating point
> >
> > numbers. Since I am forcing the output to unsigned char, then does
this
> > mean that the actual distances are truncated to unsigned char
> >
> > or are they rounded to it? Is there a better way to handle this?
> >
> > Thanks
> >
> > Radhika
> >
> >
> >
> > -----------------------------------------------------
> >
> > Confidentiality Notice.
> >
> > This email message is for the sole use of the intended recipient(s) and
> > may contain confidential and privileged information. Any unauthorized
> > review, use, disclosure or distribution is prohibited. If you are not
> > the intended recipient, please contact the sender by reply email and
> > destroy all copies of the original message. If you are the intended
> > recipient, please be advised that the content of this message is
subject
> > to access, review and disclosure by the sender's Email System
> Administrator.
> >
>
>
>
> -----------------------------------------------------
> Confidentiality Notice.
> This email message is for the sole use of the intended recipient(s) and
> may contain confidential and privileged information. Any unauthorized
> review, use, disclosure or distribution is prohibited. If you are not
> the intended recipient, please contact the sender by reply email and
> destroy all copies of the original message. If you are the intended
> recipient, please be advised that the content of this message is subject
> to access, review and disclosure by the sender's Email System
Administrator.
>
-----------------------------------------------------
Confidentiality Notice.
This email message is for the sole use of the intended recipient(s) and may
contain confidential and privileged information. Any unauthorized review,
use, disclosure or distribution is prohibited. If you are not the intended
recipient, please contact the sender by reply email and destroy all copies
of the original message. If you are the intended recipient, please be
advised that the content of this message is subject to access, review and
disclosure by the sender's Email System Administrator.
------_=_NextPart_001_01C42304.24BB95F2
Content-Type: text/html
Content-Transfer-Encoding: quoted-printable
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; =
charset=3Dus-ascii">
<META NAME=3D"Generator" CONTENT=3D"MS Exchange Server version =
5.5.2656.87">
<TITLE>Wondering if it is a bug in Danielsson distance map =
filter</TITLE>
</HEAD>
<BODY>
<P><FONT SIZE=3D2>Hi Luis,</FONT>
<BR><FONT SIZE=3D2>I am observing a strange behavior in the Danielsson =
map filter and I am wondering if it is a bug. I have been experimenting =
with this for a few days now and I have found this behavior even on 3D =
images. I have attached an image (Mask_2D.img) that I ran the distance =
map filter on. I inverted this mask before running the filter. I ran it =
with and without setting UseImageSpacing. When I do not</FONT></P>
<P><FONT SIZE=3D2>set UseImageSpacing, I observe some strange behavior. =
It sets 1 in places where it should not. Could you explain what is =
happening? My pixel type is unsigned char. Here is a very small portion =
of the code that just runs the shiftscale and Danielsson Filter. In the =
attached results you will clearly see an extra 1 in location (8,18) =
which should not be. I don't know if I am using this incorrectly or =
something else is happening.</FONT></P>
<P><FONT SIZE=3D2>Thanks</FONT>
<BR><FONT SIZE=3D2>Radhika</FONT>
</P>
<P><FONT SIZE=3D2>typedef itk::Image<PixelType,2> =
ImageType2D;</FONT>
<BR><FONT SIZE=3D2>typedef itk::ImageFileWriter< ImageType2D =
> WriterType2D; </FONT>
<BR><FONT SIZE=3D2>typedef itk::ShiftScaleImageFilter <ImageType2D, =
ImageType2D> ShiftScaleFilterType2D;</FONT>
<BR><FONT SIZE=3D2>typedef itk::DanielssonDistanceMapImageFilter =
<ImageType2D, ImageType2D> =
EDMFilterType2D; =
EDMFilterType2D::Pointer edmfilter2D =3D =
EDMFilterType2D::New();</FONT></P>
<P><FONT SIZE=3D2>ShiftScaleFilterType2D::Pointer ssfilter2D =3D =
ShiftScaleFilterType2D::New();</FONT>
<BR> =20
<BR><FONT SIZE=3D2>ssfilter2D->SetShift(shift);</FONT>
<BR><FONT SIZE=3D2>ssfilter2D->SetScale(scale); </FONT>
<BR><FONT SIZE=3D2>edmfilter2D->SetInputIsBinary(true);</FONT>
<BR><FONT SIZE=3D2>// =
edmfilter2D->SetUseImageSpacing(true);</FONT>
<BR><FONT SIZE=3D2>ssfilter2D->SetInput(mask);</FONT>
<BR><FONT =
SIZE=3D2>edmfilter2D->SetInput(ssfilter2D->GetOutput());</FONT>
<BR><FONT SIZE=3D2>edmfilter2D->Update();</FONT>
</P>
<P><FONT SIZE=3D2>-----Original Message-----</FONT>
<BR><FONT SIZE=3D2>From: Luis Ibanez [<A =
HREF=3D"mailto:luis.ibanez at kitware.com">mailto:luis.ibanez at kitware.com</=
A>] </FONT>
<BR><FONT SIZE=3D2>Sent: Wednesday, April 14, 2004 1:13 PM</FONT>
<BR><FONT SIZE=3D2>To: Radhika Sivaramakrishna</FONT>
<BR><FONT SIZE=3D2>Cc: ITK</FONT>
<BR><FONT SIZE=3D2>Subject: Re: [Insight-users] More questions on =
Daniellson distance map filter</FONT>
</P>
<BR>
<P><FONT SIZE=3D2>Hi Radhika,</FONT>
</P>
<P><FONT SIZE=3D2>The DanielssonDistanceMap takes into account diagonal =
distances</FONT>
<BR><FONT SIZE=3D2>regardless of whether the UseImageSpacing flag is =
enabled or not.</FONT>
</P>
<P><FONT SIZE=3D2>What changes when the flag is enabled is that the =
components</FONT>
<BR><FONT SIZE=3D2>of the pixel spacing are taken into account. =
Therefore the</FONT>
<BR><FONT SIZE=3D2>distances are reported in physical units (e.g. =
millimeters)</FONT>
<BR><FONT SIZE=3D2>instead of pixels. As a consequence, enabling =
the flag also</FONT>
<BR><FONT SIZE=3D2>takes care of taking pixel anisotropy into =
account.</FONT>
</P>
<P><FONT SIZE=3D2>The distances are computed as Euclidean distances, =
not as</FONT>
<BR><FONT SIZE=3D2>Manhattan distances (city-block), but are limited in =
precision</FONT>
<BR><FONT SIZE=3D2>to one-pixel. That is, there is no sub-pixel =
accuracy in the</FONT>
<BR><FONT SIZE=3D2>distance values. An easy way to verify the =
Euclidean-ness of</FONT>
<BR><FONT SIZE=3D2>the resulting DistanceMap is to create a dataset =
with a single</FONT>
<BR><FONT SIZE=3D2>pixel on in the middle and pass it as input to the =
Danielsson</FONT>
<BR><FONT SIZE=3D2>DistanceMap filter.</FONT>
</P>
<P><FONT SIZE=3D2>Using the DanielssonDistanceMap plugin for VolView =
would</FONT>
<BR><FONT SIZE=3D2>be a very easy way of experimenting with the =
distances.</FONT>
</P>
<BR>
<P><FONT SIZE=3D2>Please let us know if you have further =
questions.</FONT>
</P>
<BR>
<P><FONT SIZE=3D2> Thanks</FONT>
</P>
<BR>
<P><FONT SIZE=3D2> Luis</FONT>
</P>
<BR>
<BR>
<P><FONT SIZE=3D2>-----------------------------</FONT>
<BR><FONT SIZE=3D2>Radhika Sivaramakrishna wrote:</FONT>
</P>
<P><FONT SIZE=3D2>> Hi Luis,</FONT>
<BR><FONT SIZE=3D2>> Thanks for your explanation. I have a doubt: =
when the UseImageSpacing is </FONT>
<BR><FONT SIZE=3D2>> enabled, does this (1) take into account =
diagonal distances and (2) </FONT>
<BR><FONT SIZE=3D2>> nonisotropic voxels also? I thought it did =
both. If I want to just make </FONT>
<BR><FONT SIZE=3D2>> sure that diagonal distances are taken into =
account (ie I don't want to </FONT>
<BR><FONT SIZE=3D2>> do city block distances or chessboard =
distances), but do not want to </FONT>
<BR><FONT SIZE=3D2>> take non-isotropy into account, what should I =
do?</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Hope my question is clear.</FONT>
<BR><FONT SIZE=3D2>> Thanks</FONT>
<BR><FONT SIZE=3D2>> Radhika</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> -----Original Message-----</FONT>
<BR><FONT SIZE=3D2>> From: Luis Ibanez [<A =
HREF=3D"mailto:luis.ibanez at kitware.com">mailto:luis.ibanez at kitware.com</=
A>]</FONT>
<BR><FONT SIZE=3D2>> Sent: Monday, April 12, 2004 6:46 PM</FONT>
<BR><FONT SIZE=3D2>> To: Radhika Sivaramakrishna</FONT>
<BR><FONT SIZE=3D2>> Cc: ITK</FONT>
<BR><FONT SIZE=3D2>> Subject: Re: [Insight-users] More questions on =
Daniellson distance map </FONT>
<BR><FONT SIZE=3D2>> filter</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Hi Radhika,</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> When you enable the "UseImageSpacing" =
flag, the values</FONT>
<BR><FONT SIZE=3D2>> of pixel spacing are used in the last stage of =
distance</FONT>
<BR><FONT SIZE=3D2>> computation. The spacing is used to multiply =
the distance</FONT>
<BR><FONT SIZE=3D2>> components when their squares are summed =
up.</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> The resulting distance is then casted to the =
type of the</FONT>
<BR><FONT SIZE=3D2>> output image pixel type. This is done in the =
file:</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> =
Insight/Code/BasicFilters/</FONT>
<BR><FONT SIZE=3D2>> =
itkDanielssonDistanceMapImageFilter.txx:</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> in line 299:</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> dt.Set(</FONT>
<BR><FONT SIZE=3D2>> =
static_cast<</FONT>
<BR><FONT =
SIZE=3D2>> =
typename</FONT>
<BR><FONT =
SIZE=3D2>>  =
; OutputImageType::PixelType>(sqrt( distance )) );</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Note that the casting is done as a flat =
truncation.</FONT>
<BR><FONT SIZE=3D2>> No effort is made for scaling the distances in =
the</FONT>
<BR><FONT SIZE=3D2>> range of the pixel type. Depending on the =
physical</FONT>
<BR><FONT SIZE=3D2>> extent of your image, this may or may not be a =
problem.</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> If you want to compute this distance scaling in =
a better</FONT>
<BR><FONT SIZE=3D2>> way, you could setup the output pixel type as =
float,</FONT>
<BR><FONT SIZE=3D2>> and then connect the output of the =
DanielssonDistanceMap</FONT>
<BR><FONT SIZE=3D2>> filter to a RescaleIntensityImageFilter with =
output pixel</FONT>
<BR><FONT SIZE=3D2>> type =3D unsigned char. This last filter =
will then rescale</FONT>
<BR><FONT SIZE=3D2>> nicely the distances into the range of =
intensities of the</FONT>
<BR><FONT SIZE=3D2>> output image. Note that with this filter you =
can select</FONT>
<BR><FONT SIZE=3D2>> what values to use for representing the maximum =
and minimum</FONT>
<BR><FONT SIZE=3D2>> values of the distance.</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> -- </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> You may want to take a look at the new VolView =
plugin</FONT>
<BR><FONT SIZE=3D2>> for computing the Danielsson distance. The =
source code</FONT>
<BR><FONT SIZE=3D2>> for this plugin is available at</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> =
InsightApplications/</FONT>
<BR><FONT =
SIZE=3D2>>  =
; VolviewPlugins/</FONT>
<BR><FONT =
SIZE=3D2>>  =
; =
vvITKDanielssonDistanceMap.cxx</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Please let us know if you have further =
questions,</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Thanks</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Luis</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> -------------------------------</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> Radhika Sivaramakrishna wrote:</FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> > Hi,</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > I had more questions on the =
Danielsson distance map filter. I have set</FONT>
<BR><FONT SIZE=3D2>> > the input and output of the filter =
to unsigned char.</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > I have also put the =
SetUseImageSpacing flag to true. This means that</FONT>
<BR><FONT SIZE=3D2>> > actual distances may be computed =
which are more floating point</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > numbers. Since I am forcing =
the output to unsigned char, then does this</FONT>
<BR><FONT SIZE=3D2>> > mean that the actual distances are =
truncated to unsigned char</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > or are they rounded to it? Is there =
a better way to handle this?</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > Thanks</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > Radhika</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > </FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > =
-----------------------------------------------------</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > Confidentiality Notice.</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> > This email message is for the sole =
use of the intended recipient(s) and</FONT>
<BR><FONT SIZE=3D2>> > may contain confidential and =
privileged information. Any unauthorized</FONT>
<BR><FONT SIZE=3D2>> > review, use, disclosure or =
distribution is prohibited. If you are not</FONT>
<BR><FONT SIZE=3D2>> > the intended recipient, please =
contact the sender by reply email and</FONT>
<BR><FONT SIZE=3D2>> > destroy all copies of the original =
message. If you are the intended</FONT>
<BR><FONT SIZE=3D2>> > recipient, please be advised that =
the content of this message is subject</FONT>
<BR><FONT SIZE=3D2>> > to access, review and disclosure by =
the sender's Email System </FONT>
<BR><FONT SIZE=3D2>> Administrator.</FONT>
<BR><FONT SIZE=3D2>> ></FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT SIZE=3D2>> </FONT>
<BR><FONT =
SIZE=3D2>>  =
;  =
;  =
;  =
; </FONT>
<BR><FONT SIZE=3D2>> =
----------------------------------------------------- </FONT>
<BR><FONT SIZE=3D2>> Confidentiality Notice.</FONT>
<BR><FONT SIZE=3D2>> This email message is for the sole use of the =
intended recipient(s) and </FONT>
<BR><FONT SIZE=3D2>> may contain confidential and privileged =
information. Any unauthorized </FONT>
<BR><FONT SIZE=3D2>> review, use, disclosure or distribution is =
prohibited. If you are not </FONT>
<BR><FONT SIZE=3D2>> the intended recipient, please contact the =
sender by reply email and </FONT>
<BR><FONT SIZE=3D2>> destroy all copies of the original message. If =
you are the intended </FONT>
<BR><FONT SIZE=3D2>> recipient, please be advised that the content =
of this message is subject </FONT>
<BR><FONT SIZE=3D2>> to access, review and disclosure by the =
sender's Email System Administrator.</FONT>
<BR><FONT SIZE=3D2>> </FONT>
</P>
<BR>
<P><FONT =
SIZE=3D2> &nb=
sp; &nb=
sp; &nb=
sp; &nb=
sp; </FONT>
<BR><FONT =
SIZE=3D2>----------------------------------------------------- =
</FONT>
<BR><FONT SIZE=3D2>Confidentiality Notice. </FONT>
<BR><FONT SIZE=3D2>This email message is for the sole use of the =
intended recipient(s) and may contain confidential and privileged =
information. Any unauthorized review, use, disclosure or distribution =
is prohibited. If you are not the intended recipient, please contact =
the sender by reply email and destroy all copies of the original =
message. If you are the intended recipient, please be advised that the =
content of this message is subject to access, review and disclosure by =
the sender's Email System Administrator.</FONT></P>
<P><FONT SIZE=3D2> </FONT>=20
</P>
<P><FONT FACE=3D"Arial" SIZE=3D2 COLOR=3D"#000000"></FONT><FONT =
FACE=3D"Arial" SIZE=3D2 COLOR=3D"#000000"></FONT><FONT FACE=3D"Arial" =
SIZE=3D2 COLOR=3D"#000000"></FONT><FONT FACE=3D"Arial" SIZE=3D2 =
COLOR=3D"#000000"></FONT><FONT FACE=3D"Arial" SIZE=3D2 =
COLOR=3D"#000000"></FONT><FONT FACE=3D"Arial" SIZE=3D2 =
COLOR=3D"#000000"></FONT>
</BODY>
</HTML>
------_=_NextPart_001_01C42304.24BB95F2--
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="EDM_2D_useimagespacing.img"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="EDM_2D_useimagespacing.img"
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIDBAUGBwAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQIDBAUGBwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQIC
AwQFBgcIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAwQEBQYHCAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAQICAwMEBQYGBwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AQICAwMEBQUGBwgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwMEBQUGBwcICQAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBAUFBgcHCAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAQICAwMEBQUGBwcIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAgIDBAQFBQYH
CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAgMDBAUGBgcAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAQICAwQEBQYHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
AgIDBAUGBwAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAECAwQFBgcAAAAAAAAAAAAA
AAAAAAAAAAAAAAEAAAAAAAAAAAAAAAECAgMEBQYHAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAA
AAAAAAECAgMEBAUGBwAAAAAAAAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAABAgIDBAQFBgcAAAAA
AAAAAAAAAAAAAAAAAAEBAAAAAAAAAAAAAAAAAAECAgMEBQYGAAAAAAAAAAAAAAAAAAAAAAECAQAA
AAAAAAAAAAAAAAAAAQIDBAQFBgAAAAAAAAAAAAAAAAAAAQECAQAAAAAAAAAAAAAAAAAAAAECAgME
BQYAAAAAAAAAAAAAAAAAAQICAQAAAAAAAAAAAAAAAAAAAAAAAQIDBAQFAAAAAAAAAAAAAAAAAAEC
AQAAAAAAAAAAAAAAAAAAAAAAAAECAgMEBQAAAAAAAAAAAAAAAAECAgEAAAAAAAAAAAAAAAAAAAAA
AAAAAQIDBAUAAAAAAAAAAAAAAAABAgICAQAAAAAAAAEBAAAAAAAAAAAAAQICAwQFAAAAAAAAAAAA
AAABAgIDAgIBAAAAAAABAgEBAQEBAQAAAQICAwQEBQ==
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="EDM_2D_useimagespacing.hdr"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="EDM_2D_useimagespacing.hdr"
XAEAAENIQVIAV04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAByAAQAKAAZAAEAAQABAAEAAQAA
AAAAAAAAAAAAAAAAAAIACAAAAAAAAAAIAGY/CABmPwAAgD8AAIA/AACAPwAAgD8AAIA/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="Mask_2D.img"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Mask_2D.img"
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD///////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/////
////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD//////////////wAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAD///////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/
////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/////////////////wAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAD/////////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA////////////////
/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP////////////////8AAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAD/////////////AAAAAAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAD/////
/////////wAAAAAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAA//////////8AAAAAAAAAAAAA
AAAAAAAAAAD/////AAAAAAAAAAAA////////////AAAAAAAAAAAAAAAAAAAAAAAA////AAAAAAAA
AAAA/////////////wAAAAAAAAAAAAAAAAAAAAAA/////wAAAAAAAAAAAP////////////8AAAAA
AAAAAAAAAAAAAAAA/////wAAAAAAAAAAAAAA////////////AAAAAAAAAAAAAAAAAAD///////8A
AAAAAAAAAAAAAAD//////////wAAAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAA////////
//8AAAAAAAAAAAAAAAD///////8AAAAAAAAAAAAAAAAAAAD/////////AAAAAAAAAAAAAAAA////
//8AAAAAAAAAAAAAAAAAAAAA/////////wAAAAAAAAAAAAAA////////AAAAAAAA//8AAAAAAAAA
AAD///////8AAAAAAAAAAAAAAP////////8AAAAA////////////AAD/////////AAAAAAAAAAAA
AP///////////wAAAP///////////////////////w==
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="Mask_2D.hdr"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="Mask_2D.hdr"
XAEAAENIQVIAV04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAByAAQAKAAZAAEAAQABAAEAAQAA
AAAAAAAAAAAAAAAAAAIACAAAAAAAAAAIAGY/CABmPwAAgD8AAIA/AACAPwAAgD8AAIA/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="EDM_2D_nouseimagespacing.img"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="EDM_2D_nouseimagespacing.img"
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAgMEBQYHCAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABAgMEBQYHCAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQID
BAUGBwgJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAQICAwQFBgcICQAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAABAQICAwQFBQYHCAkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
AQICAwQFBQYHCAgJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAwQFBQYHBwgJCgAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAECAwQEBQUGBwcICQoAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAABAAABAgMDAwQFBQYHBwgJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQICAgIDBAUFBgcI
CAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEBAQECAwMEBQUGBwgAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAABAgICAwQFBgcIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAAAAAAABAQEB
AgMEBQYHCAAAAAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAQIDBAUGBwgAAAAAAAAAAAAA
AAAAAAAAAAABAQEBAAAAAAAAAAAAAQECAwQFBgcIAAAAAAAAAAAAAAAAAAAAAAAAAQIBAAAAAAAA
AAAAAQECAgMEBQYHCAAAAAAAAAAAAAAAAAAAAAAAAQEBAQAAAAAAAAAAAAEBAgIDBAUGBwgAAAAA
AAAAAAAAAAAAAAAAAQECAQAAAAAAAAAAAAAAAQECAwQFBQYHAAAAAAAAAAABAAAAAAABAQECAQEA
AAAAAAAAAAAAAAABAgIDBAUGBwAAAAAAAAAAAAAAAAABAQICAQEAAAAAAAAAAAAAAAAAAQECAwQF
BQYAAAAAAAAAAAAAAAABAQICAQEAAAAAAAAAAAAAAAAAAAABAgIDBAUGAAAAAAAAAAAAAAAAAQIC
AgEAAAAAAAAAAAAAAAAAAAAAAQECAwQFBgAAAAAAAAAAAAAAAQECAwIBAAAAAAAAAQEAAAAAAAAA
AAABAgMEBQYAAAAAAAAAAAAAAAECAgMCAQEAAAAAAQEBAQEBAQEBAAABAQIDBAUGAAAAAAAAAAAA
AAEBAgMDAgIBAQAAAAECAgICAgICAQEBAQICAwQFBg==
------_=_NextPart_000_01C42304.24BB95F2
Content-Type: application/octet-stream;
name="EDM_2D_nouseimagespacing.hdr"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
filename="EDM_2D_nouseimagespacing.hdr"
XAEAAENIQVIAV04AAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAByAAQAKAAZAAEAAQABAAEAAQAA
AAAAAAAAAAAAAAAAAAIACAAAAAAAAAAIAGY/CABmPwAAgD8AAIA/AACAPwAAgD8AAIA/AAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAA
------_=_NextPart_000_01C42304.24BB95F2--