Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include "mitkImageChannelSelector.h"
00020 #include <itkSmartPointerForwardReference.txx>
00021
00022
00023 mitk::ImageChannelSelector::ImageChannelSelector() : m_ChannelNr(0)
00024 {
00025 }
00026
00027 mitk::ImageChannelSelector::~ImageChannelSelector()
00028 {
00029 }
00030
00031 void mitk::ImageChannelSelector::GenerateOutputInformation()
00032 {
00033 mitk::Image::ConstPointer input = this->GetInput();
00034 mitk::Image::Pointer output = this->GetOutput();
00035
00036 itkDebugMacro(<<"GenerateOutputInformation()");
00037
00038 output->Initialize(input->GetPixelType(), input->GetDimension(), input->GetDimensions());
00039
00040
00041 output->SetPropertyList(input->GetPropertyList()->Clone());
00042 output->SetGeometry(dynamic_cast<Geometry3D*>(input->GetTimeSlicedGeometry()->Clone().GetPointer()));
00043 }
00044
00045 void mitk::ImageChannelSelector::GenerateData()
00046 {
00047 const Image::RegionType& requestedRegion = GetOutput()->GetRequestedRegion();
00048
00049
00050 if(requestedRegion.GetSize(3)>1)
00051 SetChannelItem(GetChannelData(m_ChannelNr), 0);
00052 else
00053
00054 if(requestedRegion.GetSize(2)>1)
00055 SetVolumeItem(GetVolumeData(requestedRegion.GetIndex(3), m_ChannelNr), requestedRegion.GetIndex(3), 0);
00056 else
00057
00058 SetSliceItem(GetSliceData(requestedRegion.GetIndex(2), requestedRegion.GetIndex(3), m_ChannelNr), requestedRegion.GetIndex(2), requestedRegion.GetIndex(3), 0);
00059 }
00060
00061 void mitk::ImageChannelSelector::GenerateInputRequestedRegion()
00062 {
00063 Superclass::GenerateInputRequestedRegion();
00064
00065 mitk::ImageToImageFilter::InputImagePointer input =
00066 const_cast< mitk::ImageToImageFilter::InputImageType * > ( this->GetInput() );
00067 mitk::Image::Pointer output = this->GetOutput();
00068
00069 Image::RegionType requestedRegion;
00070 requestedRegion = output->GetRequestedRegion();
00071 requestedRegion.SetIndex(4, m_ChannelNr);
00072 requestedRegion.SetSize(4, 1);
00073
00074 input->SetRequestedRegion( & requestedRegion );
00075 }
00076
00077