00001 #ifndef _SENSE_AvgIntensity_CXX
00002 #define _SENSE_AvgIntensity_CXX
00003
00004 #include "Sense_AvgIntensity.h"
00005
00006
00007 namespace mial
00008 {
00009
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
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);
00038
00039
00040 typename sensorIn::GeometricType::BinaryImageType::Pointer mask = in->geom->generateBinaryImageFromTopology( (in->imageIn->GetLargestPossibleRegion()).GetSize() );
00041
00042
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
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
00063 this->sensorOutput->avgIntensity = sum/count;
00064
00065 }
00066 }
00067 #endif