📄 itkmrfimagefiltertest.cxx
字号:
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: $RCSfile: itkMRFImageFilterTest.cxx,v $
Language: C++
Date: $Date: 2008-02-03 04:05:34 $
Version: $Revision: 1.14 $
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
This software is distributed WITHOUT ANY WARRANTY; without even
the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
PURPOSE. See the above copyright notices for more information.
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
// Insight classes
#include "itkMRFImageFilter.h"
#include "itkImageClassifierBase.h"
#include "itkImageGaussianModelEstimator.h"
#include "itkMahalanobisDistanceMembershipFunction.h"
#include "itkMinimumDecisionRule.h"
#include "itkSize.h"
#include "itkImage.h"
#include "itkVector.h"
#include "vnl/vnl_matrix_fixed.h"
#include "itkImageRegionIterator.h"
#include "itkConstNeighborhoodIterator.h"
#include "itkNeighborhoodIterator.h"
#include "itkNeighborhoodAlgorithm.h"
#include "itkNeighborhood.h"
//Data definitons
#define IMGWIDTH 6
#define IMGHEIGHT 6
#define NFRAMES 3
#define NUMBANDS 2
#define NDIMENSION 3
#define NUM_CLASSES 3
#define MAX_NUM_ITER 5
#define NEIGHBORHOOD_RAD 1
int itkMRFImageFilterTest(int, char* [] )
{
//------------------------------------------------------
//Create a simple test image with width, height, and
//depth 4 vectors each with each vector having data for
//2 bands.
//------------------------------------------------------
typedef itk::Image<itk::Vector<double,NUMBANDS>,NDIMENSION> VecImageType;
VecImageType::Pointer vecImage = VecImageType::New();
typedef VecImageType::PixelType VecImagePixelType;
VecImageType::SizeType vecImgSize = {{ IMGWIDTH , IMGHEIGHT, NFRAMES }};
VecImageType::IndexType index;
index.Fill(0);
VecImageType::RegionType region;
region.SetSize( vecImgSize );
region.SetIndex( index );
vecImage->SetLargestPossibleRegion( region );
vecImage->SetBufferedRegion( region );
vecImage->Allocate();
// setup the iterators
typedef VecImageType::PixelType::VectorType VecPixelType;
enum { VecImageDimension = VecImageType::ImageDimension };
typedef itk::ImageRegionIterator< VecImageType > VecIterator;
VecIterator outIt( vecImage, vecImage->GetBufferedRegion() );
//Set up the vector to store the image data
typedef VecImageType::PixelType DataVector;
DataVector dblVec;
int i,k;
int halfWidth = (int) (vecImgSize[0])/2;
int halfHeight = (int) (vecImgSize[1])/2;
//--------------------------------------------------------------------------
//Manually create and store each vector
//--------------------------------------------------------------------------
//Slice 1
//--------------------------------------------------------------------------
//Row 1-3
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3
dblVec[0] = 21; dblVec[1] = 19;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6
dblVec[0] = 18; dblVec[1] = 14;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//Row 4-6
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3
dblVec[0] = 15; dblVec[1] = 11;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6
dblVec[0] = 10; dblVec[1] = 16;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//--------------------------------------------------------------------------
//Slice 2
//--------------------------------------------------------------------------
//Row 1-3
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3 Row k
dblVec[0] = 14; dblVec[1] = 20;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6 Row k
dblVec[0] = 18; dblVec[1] = 22;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//Row 4-6
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3 Row k
dblVec[0] = 15; dblVec[1] = 15;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6 Row k
dblVec[0] = 12; dblVec[1] = 12;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//--------------------------------------------------------------------------
//Slice 3
//--------------------------------------------------------------------------
//Row 1-3
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3 Row k
dblVec[0] = 19; dblVec[1] = 20;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6 Row k
dblVec[0] = 19; dblVec[1] = 21;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//Row 4-6
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3 Row k
dblVec[0] = 12; dblVec[1] = 12;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
//Vector no. 4-6 Row k
dblVec[0] = 11; dblVec[1] = 10;
for( i=0; i< halfWidth; ++i, ++outIt ) outIt.Set(dblVec);
}
//---------------------------------------------------------------
//Generate the training data
//---------------------------------------------------------------
typedef itk::Image<unsigned short,NDIMENSION> ClassImageType;
ClassImageType::Pointer classImage = ClassImageType::New();
ClassImageType::SizeType classImgSize = {{ IMGWIDTH , IMGHEIGHT, NFRAMES }};
ClassImageType::IndexType classindex;
classindex.Fill(0);
ClassImageType::RegionType classregion;
classregion.SetSize( classImgSize );
classregion.SetIndex( classindex );
classImage->SetLargestPossibleRegion( classregion );
classImage->SetBufferedRegion( classregion );
classImage->Allocate();
// setup the iterators
typedef ClassImageType::PixelType ClassImagePixelType;
typedef itk::ImageRegionIterator<ClassImageType> ClassImageIterator;
ClassImageIterator classoutIt( classImage, classImage->GetBufferedRegion() );
//--------------------------------------------------------------------------
//Manually create and store each vector
//--------------------------------------------------------------------------
//Slice 1
//--------------------------------------------------------------------------
//Row 1-3
for( k=0; k< halfHeight; k++)
{
//Vector no. 1-3 Row k
for( i=0; i< (halfWidth*2); ++i, ++classoutIt ) classoutIt.Set( 2 );
}
//Row 4-6
for( k=0; k< halfHeight; k++)
{
for( i=0; i< (halfWidth*2); ++i, ++classoutIt ) classoutIt.Set( 1 );
}
//--------------------------------------------------------------------------
//Slice 2
//--------------------------------------------------------------------------
//Row 1-6
for( k=0; k< (halfHeight*2); k++)
{
//Vector no. 1-3 Row k
for( i=0; i< (halfWidth*2); ++i, ++classoutIt ) classoutIt.Set( 0 );
}
//--------------------------------------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -