#ifndef _SENSE_AvgIntensity_CXX #define _SENSE_AvgIntensity_CXX #include "Sense_AvgIntensity.h" namespace mial { //Default constructor template Sense_AvgIntensity ::Sense_AvgIntensity() : Sensor() { sensorOutput = sensorOut::New(); //Set the base class pointer Sensor::sensorOutput = sensorOutput.GetPointer(); } template void Sense_AvgIntensity ::writeImageToFile(OutputImagePointer img,char * name) { typedef typename itk::ImageFileWriter WriterType; typename WriterType::Pointer writer = WriterType::New(); writer->SetFileName(name); writer->SetInput(img); writer->Update(); } template void Sense_AvgIntensity ::run(typename Sensor::sensorIn * const i) { typename sensorIn::Pointer in = reinterpret_cast(i); //Typecast the input to its desired form //Get the binary mask from the geometric layer typename sensorIn::GeometricType::BinaryImageType::Pointer mask = in->geom->generateBinaryImageFromTopology( (in->imageIn->GetLargestPossibleRegion()).GetSize() ); //sensorIn::GeometricType::BinaryImageType::Iterator typedef itk::ImageRegionConstIterator< TInputImage > ConstIteratorType; typedef itk::ImageRegionConstIterator< typename sensorIn::GeometricType::BinaryImageType > BinaryConstIteratorType; BinaryConstIteratorType maskIT( mask, mask->GetLargestPossibleRegion() ); ConstIteratorType imageInIT( in->imageIn, in->imageIn->GetLargestPossibleRegion() ); //Get the sum of intensity value at all points for which the mask is true. DataType sum =0; int count =0; for ( maskIT.GoToBegin(), imageInIT.GoToBegin(); !maskIT.IsAtEnd(); ++maskIT, ++imageInIT) { if( maskIT.Get() > 0) { count++; sum += imageInIT.Get(); } } //Prepare the output this->sensorOutput->avgIntensity = sum/count; } } #endif