1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
/*=========================================================================
Copyright (c) Kitware, Inc.
All rights reserved.
See Copyright.txt or http://www.kitware.com/VolViewCopyright.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 notice for more information.
=========================================================================*/
/** This module implements Masking by setting to zero in the current image all
* the pixels that are non-zero in a second image provided as mask. */
#ifndef _vvITKMask_h
#define _vvITKMask_h
#include "vvITKFilterModuleTwoInputs.h"
#include "itkMaskImageFilter.h"
namespace VolView
{
namespace PlugIn
{
template< class TInputImageType, class TMaskImageType>
class Mask : public
FilterModuleTwoInputs<
itk::MaskImageFilter<
TInputImageType,
TMaskImageType,
TInputImageType>,
TInputImageType,
TMaskImageType > {
public:
typedef itk::MaskImageFilter<
TInputImageType,
TMaskImageType,
TInputImageType> MaskImageFilterType;
typedef FilterModuleTwoInputs<
MaskImageFilterType,
TInputImageType,
TMaskImageType > Superclass;
typedef typename MaskImageFilterType::OutputImageType OutputImageType;
public:
/** Constructor */
Mask()
{
}
/** Destructor */
virtual ~Mask()
{
}
/** ProcessData performs the actual filtering on the data.
In this class, this method only initialize the import
filter for the second input, then it lets the ProcessData
method of the base class perform the rest of the operations. */
void
ProcessData( const vtkVVProcessDataStruct * pds )
{
// Let superclass perform initial connections
this->Superclass::ProcessData( pds );
MaskImageFilterType * maskingFilter = this->GetFilter();
vtkVVPluginInfo *info = this->GetPluginInfo();
maskingFilter->SetInput1( this->GetInput1() );
maskingFilter->SetInput2( this->GetInput2() );
// Execute the filter
try
{
maskingFilter->Update();
}
catch( itk::ProcessAborted & )
{
return;
}
// Copy the data (with casting) to the output buffer provided by the PlugIn API
typename OutputImageType::ConstPointer outputImage = maskingFilter->GetOutput();
typedef itk::ImageRegionConstIterator< OutputImageType > OutputIteratorType;
OutputIteratorType ot( outputImage, outputImage->GetBufferedRegion() );
typedef typename OutputImageType::PixelType OutputPixelType;
OutputPixelType * outData = (OutputPixelType *)(pds->outData);
ot.GoToBegin();
while( !ot.IsAtEnd() )
{
*outData = ot.Get();
++ot;
++outData;
}
} // end of ProcessData
private:
};
} // end namespace PlugIn
} // end namespace VolView
#endif
|