C:/cmcintos/defOrgs/source/sensory/Sense_AvgIntensity.cxx

00001 #ifndef _SENSE_AvgIntensity_CXX
00002 #define _SENSE_AvgIntensity_CXX
00003 
00004 #include "Sense_AvgIntensity.h"
00005 
00006 
00007 namespace mial
00008 {
00009         //Default constructor
00010         template<class DataType, class TInputImage, int nDims>
00011                 Sense_AvgIntensity<DataType,TInputImage,nDims>
00012                 ::Sense_AvgIntensity()
00013                 : Sensor()
00014         {
00015                 sensorOutput = sensorOut::New();
00016                 //Set the base class pointer
00017                 Sensor::sensorOutput = sensorOutput.GetPointer();
00018         }
00019 
00020         template<class DataType, class TInputImage, int nDims>
00021                 void 
00022                 Sense_AvgIntensity<DataType,TInputImage,nDims>
00023 		::writeImageToFile(OutputImagePointer img,char * name)
00024         {
00025                 typedef typename itk::ImageFileWriter<OutputImageType> WriterType;
00026                 typename WriterType::Pointer writer = WriterType::New(); 
00027                 writer->SetFileName(name);
00028                 writer->SetInput(img);
00029                 writer->Update();
00030         }
00031 
00032         template<class DataType, class TInputImage, int nDims>
00033                 void 
00034                 Sense_AvgIntensity<DataType, TInputImage,nDims>
00035                 ::run(typename Sensor::sensorIn * const i)
00036         {
00037                 typename sensorIn::Pointer in = reinterpret_cast<sensorIn *>(i); //Typecast the input to its desired form
00038                 
00039                 //Get the binary mask from the geometric layer
00040                 typename sensorIn::GeometricType::BinaryImageType::Pointer mask = in->geom->generateBinaryImageFromTopology( (in->imageIn->GetLargestPossibleRegion()).GetSize() );
00041 
00042                 //sensorIn::GeometricType::BinaryImageType::Iterator
00043                 typedef itk::ImageRegionConstIterator< TInputImage > ConstIteratorType;
00044                 typedef itk::ImageRegionConstIterator< typename sensorIn::GeometricType::BinaryImageType > BinaryConstIteratorType;
00045                 
00046                 BinaryConstIteratorType maskIT( mask, mask->GetLargestPossibleRegion() );
00047                 ConstIteratorType imageInIT( in->imageIn, in->imageIn->GetLargestPossibleRegion() );
00048                 
00049 
00050                 //Get the sum of intensity value at all points for which the mask is true.
00051                 DataType sum =0;
00052                 int count =0;
00053                 for ( maskIT.GoToBegin(), imageInIT.GoToBegin(); !maskIT.IsAtEnd(); ++maskIT, ++imageInIT)
00054                 {
00055                         if( maskIT.Get() > 0)
00056                         {
00057                                 count++;
00058                                 sum += imageInIT.Get();
00059                         }
00060 
00061                 }
00062                 //Prepare the output
00063                 this->sensorOutput->avgIntensity = sum/count;
00064 
00065         }
00066 }
00067 #endif

Generated on Wed Jul 19 13:05:18 2006 for IDO by  doxygen 1.4.7