[Insight-users] Inconsistent registration result.
lien lee
lienlee at gmail.com
Mon Mar 11 13:29:46 EDT 2013
Hi Bradley,
Sorry for the late response.
Just now, I tried what you have suggested, and I do see consistent results
among different runs on the two computers I have. So, the problem should be
that it is not thread safe when applying the two masks. I am wondering what
I should do next, since the single-threaded program runs slowly. Is there
any solution that I can use faster multi-threading technique and still keep
the results consistent? Does ITK v4 do a better job in this regards?
BTW, another trial was done before I set ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS
to 1.
I called vMetric->SetNumberOfThreads(1), and I noticed that most of the
time only one thread was working through starring at the CPU usage in
Windows Task Manager. But still, the results were inconsistent in
different runs. I could not explain this. I mention it just because it
might mean something to itk-developers.
Thanks!
2013/3/1 Bradley Lowekamp <blowekamp at mail.nih.gov>
> Hello,
>
> How many threads are you running? Have you tried setting the environment
> variable ITK_GLOBAL_DEFAULT_NUMBER_OF_THREADS to 1, to see of the results
> then become consistent?
>
> Brad
>
> On Feb 28, 2013, at 5:52 PM, lien lee <lienlee at gmail.com> wrote:
>
> Hi itk-users,
>
> I took a further step today. I derived a class
> from MattesMutualInformationImageToImageMetric, and made it being the
> metric, so that, I could sneak into itk and visit the protected
> member ImageToImageMetric< TFixedImage, TMovingImage
> >::m_FixedImageSamples. I printed out a couple of sample points (their
> coordinates and image values), and I also printed out the seed value of the
> random number generator, which I set as ReinitializeSeed(76926294). I get
> the seed value by
> calling Statistics::MersenneTwisterRandomVariateGenerator::GetInstance()->GetSeed();
> In different runs, I do see same seed were used, but I also do see
> different sample points. I tried this on two different computers, at both
> of which I saw the inconsistent results. Seems to be the random number
> generator is non-deterministic even with same seed. However, the weird
> thing is if I do not use the image mask, it would be consistent.
>
> Any thoughts?
>
>
> 2013/2/26 lien lee <lienlee at gmail.com>
>
>> Hi Seth,
>>
>> By clicking the link you provided, the code I saw there is as partly
>> attached, which is different from what I have with ITK 4.2 on my computer.
>>
>> I do not have experience with this code, and I am not exactly sure how it
>> works. But, looks to me, optimizer would call the function during each
>> iteration, and the function would rebuild all the sample points again and
>> again for all the iterations. If my understanding were correct, this would
>> be quite different from what I have with ITK 4.2 on my computer, where all
>> the samples were created
>> in MattesMutualInformationImageToImageMetric::Initialize() as *a one
>> time thing*, and the counted points would be determined for each
>> iteration using the current transform by checking whether the mapped points
>> were inside the moving image mask. Therefore, for the code I am working on,
>> to my understanding, if I called ReinitializeSeed(76926294) before
>> generating all the sample points
>> in MattesMutualInformationImageToImageMetric::Initialize(), the results
>> should be deterministic, no matter whether I applied the image masks or
>> not. But, the testing results with image mask applied does NOT support my
>> understanding.
>>
>> BTW, to your question, my moving image mask may not be "restrictive"
>> because it occupied pretty much about 80% of the whole moving image.
>>
>> Thanks again for your inputs.
>>
>>
>> 106<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l106>template <class TFixedImage,
>> class TMovingImage>
>> 107<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l107>void
>> 108<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l108>MutualInformationImageToImageMetric<TFixedImage, TMovingImage>
>> 109<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l109>::SampleFixedImageDomain(
>> 110<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l110> SpatialSampleContainer & samples) const
>> 111<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l111>{
>> 112<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l112> typedef ImageRandomConstIteratorWithIndex<FixedImageType> RandomIterator;
>> 113<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l113> RandomIterator randIter( this->m_FixedImage, this->GetFixedImageRegion() );
>> 114<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l114>
>> 115<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l115> randIter.SetNumberOfSamples(m_NumberOfSpatialSamples);
>> 116<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l116> randIter.GoToBegin();
>> 117<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l117>
>> 118<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l118> typename SpatialSampleContainer::iterator iter;
>> 119<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l119> typename SpatialSampleContainer::const_iterator end = samples.end();
>> 120<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l120>
>> 121<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l121> bool allOutside = true;
>> 122<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l122>
>> 123<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l123> this->m_NumberOfPixelsCounted = 0; // Number of pixels that map into the
>> 124<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l124> // fixed and moving image mask, if
>> 125<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l125> // specified
>> 126<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l126> // and the resampled fixed grid after
>> 127<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l127> // transformation.
>> 128<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l128>
>> 129<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l129> // Number of random picks made from the portion of fixed image within the
>> 130<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l130> // fixed mask
>> 131<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l131> SizeValueType numberOfFixedImagePixelsVisited = 0;
>> 132<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l132> SizeValueType dryRunTolerance = this->GetFixedImageRegion().GetNumberOfPixels();
>> 133<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l133> for( iter = samples.begin(); iter != end; ++iter )
>> 134<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l134> {
>> 135<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l135> // Get sampled index
>> 136<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l136> FixedImageIndexType index = randIter.GetIndex();
>> 137<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l137> // Get sampled fixed image value
>> 138<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l138> ( *iter ).FixedImageValue = randIter.Get();
>> 139<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l139> // Translate index to point
>> 140<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l140> this->m_FixedImage->TransformIndexToPhysicalPoint(index,
>> 141<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l141> ( *iter ).FixedImagePointValue);
>> 142<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l142>
>> 143<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l143> // If not inside the fixed mask, ignore the point
>> 144<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l144> if( this->m_FixedImageMask
>> 145<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l145> && !this->m_FixedImageMask->IsInside( ( *iter ).FixedImagePointValue ) )
>> 146<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l146> {
>> 147<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l147> ++randIter; // jump to another random position
>> 148<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l148> continue;
>> 149<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l149> }
>> 150<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l150>
>> 151<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l151> if( allOutside )
>> 152<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l152> {
>> 153<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l153> ++numberOfFixedImagePixelsVisited;
>> 154<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l154> if( numberOfFixedImagePixelsVisited > dryRunTolerance )
>> 155<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l155> {
>> 156<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l156> // We randomly visited as many points as is the size of the fixed image
>> 157<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l157> // region.. Too may samples mapped ouside.. go change your transform
>> 158<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l158> itkExceptionMacro(<< "Too many samples mapped outside the moving buffer");
>> 159<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l159> }
>> 160<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l160> }
>> 161<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l161>
>> 162<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l162> MovingImagePointType mappedPoint =
>> 163<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l163> this->m_Transform->TransformPoint( ( *iter ).FixedImagePointValue );
>> 164<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l164>
>> 165<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l165> // If the transformed point after transformation does not lie within the
>> 166<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l166> // MovingImageMask, skip it.
>> 167<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l167> if( this->m_MovingImageMask
>> 168<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l168> && !this->m_MovingImageMask->IsInside(mappedPoint) )
>> 169<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l169> {
>> 170<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l170> ++randIter;
>> 171<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l171> continue;
>> 172<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l172> }
>> 173<http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l173>
>>
>> <http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD#l174>
>>
>> 2013/2/26 Seth Gilchrist <seth at mech.ubc.ca>
>>
>>> Hi Lien,
>>> Unfortunately I have not used masks when performing registrations, so
>>> can't help you with this specific problem.
>>>
>>> I took a look at the git blob for the MattesMutual...Metric and was
>>> examining how the decision to keep or reject a give point is handled. If
>>> you are setting a mask on both the fixed and moving images, this will
>>> change what points are used because a check is done to see if a point is in
>>> the fixed mask and if it is in the moving mask after applying the current
>>> transform. Could your moving image mask be too restrictive for the early
>>> stages of the registration?
>>>
>>> You can read the code at:
>>>
>>> http://itk.org/gitweb?p=ITK.git;a=blob;f=Modules/Registration/Common/include/itkMutualInformationImageToImageMetric.hxx;h=1244e5c0be768696cf042f6f39739f4b2bdcbba6;hb=HEAD
>>>
>>> Starting on line 108, specifically on line 162.
>>>
>>> Cheers,
>>> Seth
>>>
>>> *Seth Gilchrist, MASc, PhD Candidate
>>> +---------------------------------------+
>>> Orthopaedic and Injury Biomechanics Group
>>> UBC Department of Mechanical Engineering
>>> 6th Floor-2635 Laurel Street
>>> Vancouver, BC V5Z-1M9
>>> +---------------------------------------+
>>> seth at mech.ubc.ca
>>> Fax 604-675-2576*
>>>
>>>
>>
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://www.itk.org/mailman/listinfo/insight-users
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20130311/7c81ba73/attachment-0001.htm>
More information about the Insight-users
mailing list