void DoubleThresholdImageFilterITK::doubleThresholdImageFilterITK() {
    insideValue_.setVolume(inport1_.getData());
    outsideValue_.setVolume(inport1_.getData());
    threshold1_.setVolume(inport1_.getData());
    threshold2_.setVolume(inport1_.getData());
    threshold3_.setVolume(inport1_.getData());
    threshold4_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::DoubleThresholdImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetInsideValue(insideValue_.getValue<T>());
    filter->SetOutsideValue(outsideValue_.getValue<T>());
    filter->SetThreshold1(threshold1_.getValue<T>());
    filter->SetThreshold2(threshold2_.getValue<T>());
    filter->SetThreshold3(threshold3_.getValue<T>());
    filter->SetThreshold4(threshold4_.getValue<T>());
    filter->SetFullyConnected(fullyConnected_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void SignedDanielssonDistanceMapImageFilterITK::signedDanielssonDistanceMapImageFilterITK() {


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;
    typedef itk::Image<T, 3> OutputImageType2;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::SignedDanielssonDistanceMapImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetInsideIsPositive(insideIsPositive_.get());
    filter->SetSquaredDistance(squaredDistance_.get());
    filter->SetUseImageSpacing(useImageSpacing_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetDistanceMap());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);

    Volume* outputVolume2 = 0;
    outputVolume2 = ITKToVoreenCopy<T>(filter->GetVoronoiMap());

    if (outputVolume2) {
        transferRWM(inport1_.getData(), outputVolume2);
        transferTransformation(inport1_.getData(), outputVolume2);
        outport2_.setData(outputVolume2);
    } else
        outport2_.setData(0);



}
void DiscreteGaussianImageFilterITK::discreteGaussianImageFilterITK() {
    maximumError_.setVolume(inport1_.getData());
    maximumError_.setMinValue<T>(1.0f);
    variance_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<float, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::DiscreteGaussianImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetInternalNumberOfStreamDivisions(internalNumberOfStreamDivisions_.get());
    filter->SetMaximumError(maximumError_.getValue<T>());
    filter->SetVariance(variance_.getValue<T>());
    filter->SetUseImageSpacing(useImageSpacing_.get());
    filter->SetFilterDimensionality(filterDimensionality_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<float>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void BayesianClassifierImageFilterITK::bayesianClassifierImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType;
    typedef itk::Image<uint8_t, 3> OutputImageType;
    typedef itk::VectorImage<float, 3> VectorImageType;
    typename InputImageType::Pointer p1 = voreenToITK<T>(inport1_.getData());

    typedef itk::BayesianClassifierInitializationImageFilter<InputImageType> InitFilterType;
    typename InitFilterType::Pointer initializer = InitFilterType::New();

    initializer->SetInput(p1);
    initializer->SetNumberOfClasses(numberOfClasses_.get());

    try
    {
        initializer->Update();
    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }
    //Filter define
    typedef itk::BayesianClassifierImageFilter<VectorImageType> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(0, initializer->GetOutput());
    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<uint8_t>(filter->GetOutput());

    if (outputVolume1) {
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    }
    else
        outport1_.setData(0);

}
void IntensityWindowingImageFilterITK::intensityWindowingImageFilterITK() {
    outputMinimum_.setVolume(inport1_.getData());
    outputMaximum_.setVolume(inport1_.getData());
    windowMinimum_.setVolume(inport1_.getData());
    windowMaximum_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::IntensityWindowingImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetOutputMinimum(outputMinimum_.getValue<T>());
    filter->SetOutputMaximum(outputMaximum_.getValue<T>());
    filter->SetWindowMinimum(windowMinimum_.getValue<T>());
    filter->SetWindowMaximum(windowMaximum_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void OtsuThresholdImageFilterITK::otsuThresholdImageFilterITK() {
    outsideValue_.setVolume(inport1_.getData());
    outsideValue_.setMinValue<T>(0.0001f);
    insideValue_.setVolume(inport1_.getData());
    insideValue_.setMinValue<T>(0.0001f);

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::OtsuThresholdImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetNumberOfHistogramBins(numberOfHistogramBins_.get());
    filter->SetOutsideValue(outsideValue_.getValue<T>());
    filter->SetInsideValue(insideValue_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void NarrowBandThresholdSegmentationLevelSetImageFilterITK::narrowBandThresholdSegmentationLevelSetImageFilterITK() {


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<S, 3> InputImageType2;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());
    typename InputImageType2::Pointer p2 = voreenToITK<S>(inport2_.getData());


    //Filter define
    typedef itk::NarrowBandThresholdSegmentationLevelSetImageFilter<InputImageType1, InputImageType2> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);
    filter->SetFeatureImage(p2);

    filter->SetPropagationScaling(propagationScaling_.get());
    filter->SetCurvatureScaling(curvatureScaling_.get());
    filter->SetAdvectionScaling(advectionScaling_.get());
    filter->SetMaximumRMSError(maximumRMSError_.get());
    filter->SetNumberOfIterations(numberOfIterations_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void GradientAnisotropicDiffusionImageFilterITK::gradientAnisotropicDiffusionImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::GradientAnisotropicDiffusionImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetNumberOfIterations(numberOfIterations_.get());
    filter->SetTimeStep(timeStep_.get());
    filter->SetConductanceParameter(conductanceParameter_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void ScalarConnectedComponentImageFilterITK::scalarConnectedComponentImageFilterITK() {
    distanceThreshold_.setVolume(inport1_.getData());
    distanceThreshold_.setMinValue<T>(0.001f);

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::ScalarConnectedComponentImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetDistanceThreshold(distanceThreshold_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void GradientRecursiveGaussianImageFilterITK::gradientRecursiveGaussianImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<itk::CovariantVector<double,3>, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::GradientRecursiveGaussianImageFilter<InputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetNormalizeAcrossScale(normalizeAcrossScale_.get());
    filter->SetUseImageDirection(useImageDirection_.get());
    filter->SetSigma(sigma_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKVec3ToVoreenVec3Copy<double>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void RelabelComponentImageFilterITK::relabelComponentImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::RelabelComponentImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetMinimumObjectSize(minimumObjectSize_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();
        numberOfObjects_.set(filter->GetNumberOfObjects());
        originalNumberOfObjects_.set(filter->GetOriginalNumberOfObjects());

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
Esempio n. 12
0
void LabelOverlayImageFilterITK::labelOverlayImageFilterITK() {
    backgroundValue_.setVolume(inport1_.getData());


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<S, 3> InputImageType2;
    typedef itk::Image<itk::CovariantVector<uint8_t,3>, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());
    typename InputImageType2::Pointer p2 = voreenToITK<S>(inport2_.getData());


    //Filter define
    typedef itk::LabelOverlayImageFilter<InputImageType1, InputImageType2, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);
    filter->SetLabelImage(p2);

    filter->SetOpacity(opacity_.get());
    filter->SetBackgroundValue(backgroundValue_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKVec3ToVoreenVec3Copy<uint8_t>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
Esempio n. 13
0
void MaskImageFilterITK::maskImageFilterITK() {
    outsideValue_.setVolume(inport1_.getData());


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<S, 3> InputImageType2;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());
    typename InputImageType2::Pointer p2 = voreenToITK<S>(inport2_.getData());


    //Filter define
    typedef itk::MaskImageFilter<InputImageType1, InputImageType2, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);
    filter->SetMaskImage(p2);

    filter->SetOutsideValue(outsideValue_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
Esempio n. 14
0
void WatershedImageFilterITK::watershedImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<VolumeRAM_UInt64, 3> OutputImageType1;


    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::WatershedImageFilter<InputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetLevel(level_.get());
    filter->SetThreshold(threshold_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<itk::IdentifierType>(filter->GetOutput());

    if (outputVolume1) {
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    }
    else
        outport1_.setData(0);

}
void GrayscaleGrindPeakImageFilterITK::grayscaleGrindPeakImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::GrayscaleGrindPeakImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetFullyConnected(fullyConnected_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void VotingBinaryIterativeHoleFillingImageFilterITK::votingBinaryIterativeHoleFillingImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::VotingBinaryIterativeHoleFillingImageFilter<InputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetMaximumNumberOfIterations(maximumNumberOfIterations_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void MinMaxCurvatureFlowImageFilterITK::minMaxCurvatureFlowImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<float, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::MinMaxCurvatureFlowImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetStencilRadius(stencilRadius_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<float>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
Volume* ValuedRegionalMaximaImageFilter::applyFilter(const VolumeBase* inputVolume) {
    typedef itk::Image<T, 3> InputImageType;
    typedef itk::Image<T, 3> OutputImageType;

    typename InputImageType::Pointer p = voreenToITK<T>(inputVolume);

    typedef itk::ValuedRegionalMaximaImageFilter<InputImageType, OutputImageType>  FilterType;

    // Create the filter
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p);

    observe(filter.GetPointer());

    // Run the filter
    filter->Update();

    return ITKToVoreenCopy<T>(filter->GetOutput());
}
void HausdorffDistanceImageFilterITK::hausdorffDistanceImageFilterITK() {


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<S, 3> InputImageType2;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());
    typename InputImageType2::Pointer p2 = voreenToITK<S>(inport2_.getData());


    //Filter define
    typedef itk::HausdorffDistanceImageFilter<InputImageType1, InputImageType2> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput1(p1);
    filter->SetInput2(p2);



    observe(filter.GetPointer());

    try
    {
        filter->Update();
        hausdorffDistance_.set(filter->GetHausdorffDistance());
        averageHausdorffDistance_.set(filter->GetAverageHausdorffDistance());

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }




}
void SimilarityIndexImageFilterITK::similarityIndexImageFilterITK() {


    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<S, 3> InputImageType2;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());
    typename InputImageType2::Pointer p2 = voreenToITK<S>(inport2_.getData());


    //Filter define
    typedef itk::SimilarityIndexImageFilter<InputImageType1, InputImageType2> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput1(p1);
    filter->SetInput2(p2);



    observe(filter.GetPointer());

    try
    {
        filter->Update();
        similarityIndex_.set(filter->GetSimilarityIndex());

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }




}
void DilateObjectMorphologyImageFilterITK::dilateObjectMorphologyImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;


    typedef  T  PixelType;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    if(structuringElement_.get() == "binaryBall"){
        shape_.setVisible(false);
        typedef itk::BinaryBallStructuringElement < PixelType, 3 > KernelType;
        typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
        typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


        KernelType structuringElement;
        typename KernelType::SizeType radius;
        radius[0] = radius_.get().x;
        radius[1] = radius_.get().y;
        radius[2] = radius_.get().z;
        structuringElement.SetRadius(radius);
        structuringElement.CreateStructuringElement();
        filter->SetKernel(structuringElement);

        observe(filter.GetPointer());

        try
        {
            filter->Update();
        }
        catch (itk::ExceptionObject &e)
        {
            LERROR(e);
        }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


    }

    else if(structuringElement_.get() == "binaryCross"){
        shape_.setVisible(false);
        typedef itk::BinaryCrossStructuringElement < PixelType, 3 > KernelType;
        typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
        typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


        KernelType structuringElement;
        typename KernelType::SizeType radius;
        radius[0] = radius_.get().x;
        radius[1] = radius_.get().y;
        radius[2] = radius_.get().z;
        structuringElement.SetRadius(radius);
        structuringElement.CreateStructuringElement();
        filter->SetKernel(structuringElement);

        observe(filter.GetPointer());

        try
        {
            filter->Update();
        }
        catch (itk::ExceptionObject &e)
        {
            LERROR(e);
        }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


    }

    else if(structuringElement_.get() == "flat"){
        shape_.setVisible(true);
        typedef itk::FlatStructuringElement < 3 > KernelType;
        typename KernelType::SizeType radius;
        radius[0] = radius_.get().x;
        radius[1] = radius_.get().y;
        radius[2] = radius_.get().z;

        if(shape_.get() == "box"){
            KernelType structuringElement = KernelType::Box(radius);
            typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
            typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


            filter->SetKernel(structuringElement);

            observe(filter.GetPointer());

            try
            {
                filter->Update();
            }
            catch (itk::ExceptionObject &e)
            {
                LERROR(e);
            }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


        }

        else if(shape_.get() == "ball"){
            KernelType structuringElement = KernelType::Ball(radius);
            typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
            typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


            filter->SetKernel(structuringElement);

            observe(filter.GetPointer());

            try
            {
                filter->Update();
            }
            catch (itk::ExceptionObject &e)
            {
                LERROR(e);
            }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


        }

        else if(shape_.get() == "cross"){
            KernelType structuringElement = KernelType::Cross(radius);
            typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
            typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


            filter->SetKernel(structuringElement);


            observe(filter.GetPointer());

            try
            {
                filter->Update();
            }
            catch (itk::ExceptionObject &e)
            {
                LERROR(e);
            }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


        }
        else if(shape_.get() == "annulus"){
            KernelType structuringElement = KernelType::Annulus(radius);
            typedef itk::DilateObjectMorphologyImageFilter<InputImageType1, OutputImageType1, KernelType> FilterType;
            typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


            filter->SetKernel(structuringElement);


            observe(filter.GetPointer());

            try
            {
                filter->Update();
            }
            catch (itk::ExceptionObject &e)
            {
                LERROR(e);
            }

    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);


        }
    }
}
void GrayscaleConnectedClosingImageFilterITK::grayscaleConnectedClosingImageFilterITK() {

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::GrayscaleConnectedClosingImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);

    filter->SetFullyConnected(fullyConnected_.get());

    if (seedPointPort_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort_.getData());
        if (pointList) {
            seedPoints = pointList->getData();
            if (!seedPoints.empty()) {
                numSeedPoint_.setMinValue(1);
                numSeedPoint_.setMaxValue(seedPoints.size());
                numSeedPoint_.set(seedPoints.size());
            }
            else {
                numSeedPoint_.setMinValue(0);
                numSeedPoint_.setMaxValue(0);
                numSeedPoint_.set(0);
            }
        }
    }

    if(!seedPoints.empty()) {
        seedPoint_.set(seedPoints[numSeedPoint_.get()-1]);
    }
    else {
        seedPoint_.set(tgt::vec3 (1));
    }
    typename InputImageType1::IndexType seed;
    seed[0] = seedPoint_.get().x;
    seed[1] = seedPoint_.get().y;
    seed[2] = seedPoint_.get().z;

    filter->SetSeed(seed);


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void IsolatedWatershedImageFilterITK::isolatedWatershedImageFilterITK() {
    replaceValue1_.setVolume(inport1_.getData());
    replaceValue2_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::IsolatedWatershedImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


    if (seedPointPort1_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList1 = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort1_.getData());
        if (pointList1) {
            seedPoints1 = pointList1->getData();
            if (!seedPoints1.empty()) {
                numSeedPoint1_.setMinValue(1);
                numSeedPoint1_.setMaxValue(seedPoints1.size());
                numSeedPoint1_.set(seedPoints1.size());
            }
            else {
                numSeedPoint1_.setMinValue(0);
                numSeedPoint1_.setMaxValue(0);
                numSeedPoint1_.set(0);
            }
        }
    }

    if(!seedPoints1.empty()) {
        seedPoint1_.set(seedPoints1[numSeedPoint1_.get()-1]);
    }
    else {
        seedPoint1_.set(tgt::vec3 (1));
    }
    typename InputImageType1::IndexType seed1;
    seed1[0] = seedPoint1_.get().x;
    seed1[1] = seedPoint1_.get().y;
    seed1[2] = seedPoint1_.get().z;

    filter->SetSeed1(seed1);

    if (seedPointPort2_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList2 = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort2_.getData());
        if (pointList2) {
            seedPoints2 = pointList2->getData();
            if (!seedPoints2.empty()) {
                numSeedPoint2_.setMinValue(1);
                numSeedPoint2_.setMaxValue(seedPoints2.size());
                numSeedPoint2_.set(seedPoints2.size());
            }
            else {
                numSeedPoint2_.setMinValue(0);
                numSeedPoint2_.setMaxValue(0);
                numSeedPoint2_.set(0);
            }
        }
    }

    if(!seedPoints2.empty()) {
        seedPoint2_.set(seedPoints2[numSeedPoint2_.get()-1]);
    }
    else {
        seedPoint2_.set(tgt::vec3 (1));
    }
    typename InputImageType1::IndexType seed2;
    seed2[0] = seedPoint2_.get().x;
    seed2[1] = seedPoint2_.get().y;
    seed2[2] = seedPoint2_.get().z;

    filter->SetSeed2(seed2);
    filter->SetThreshold(threshold_.get());
    filter->SetIsolatedValueTolerance(isolatedValueTolerance_.get());
    filter->SetUpperValueLimit(upperValueLimit_.get());
    filter->SetReplaceValue1(replaceValue1_.getValue<T>());
    filter->SetReplaceValue2(replaceValue2_.getValue<T>());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void IsolatedConnectedImageFilterITK::isolatedConnectedImageFilterITK() {
    replaceValue_.setVolume(inport1_.getData());
    isolatedValueTolerance_.setVolume(inport1_.getData());
    upper_.setVolume(inport1_.getData());
    lower_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::IsolatedConnectedImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


    if (seedPointPort1_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList1 = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort1_.getData());
        if (pointList1) {
            seedPoints1 = pointList1->getData();
        }
    }

    filter->ClearSeeds1();
    typename InputImageType1::IndexType seed1;
    for (size_t i = 0; i < seedPoints1.size(); i++) {
        seed1[0] = seedPoints1[i].x;
        seed1[1] = seedPoints1[i].y;
        seed1[2] = seedPoints1[i].z;
        filter->AddSeed1(seed1);
    }

    if (seedPointPort2_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList2 = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort2_.getData());
        if (pointList2) {
            seedPoints2 = pointList2->getData();
        }
    }

    filter->ClearSeeds2();
    typename InputImageType1::IndexType seed2;
    for (size_t i = 0; i < seedPoints2.size(); i++) {
        seed2[0] = seedPoints2[i].x;
        seed2[1] = seedPoints2[i].y;
        seed2[2] = seedPoints2[i].z;
        filter->AddSeed2(seed2);
    }
    filter->SetReplaceValue(replaceValue_.getValue<T>());
    filter->SetIsolatedValueTolerance(isolatedValueTolerance_.getValue<T>());
    filter->SetUpper(upper_.getValue<T>());
    filter->SetLower(lower_.getValue<T>());
    filter->SetFindUpperThreshold(findUpperThreshold_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}
void ConfidenceConnectedImageFilterITK::confidenceConnectedImageFilterITK() {
    replaceValue_.setVolume(inport1_.getData());

    if (!enableProcessing_.get()) {
        outport1_.setData(inport1_.getData(), false);
        return;
    }

    typedef itk::Image<T, 3> InputImageType1;
    typedef itk::Image<T, 3> OutputImageType1;

    typename InputImageType1::Pointer p1 = voreenToITK<T>(inport1_.getData());


    //Filter define
    typedef itk::ConfidenceConnectedImageFilter<InputImageType1, OutputImageType1> FilterType;
    typename FilterType::Pointer filter = FilterType::New();

    filter->SetInput(p1);


    if (seedPointPort_.hasChanged()) {
        const PointListGeometry<tgt::vec3>* pointList = dynamic_cast< const PointListGeometry<tgt::vec3>* >(seedPointPort_.getData());
        if (pointList) {
            seedPoints = pointList->getData();
        }
    }

    filter->ClearSeeds();
    typename InputImageType1::IndexType seed;
    for (size_t i = 0; i < seedPoints.size(); i++) {
        seed[0] = seedPoints[i].x;
        seed[1] = seedPoints[i].y;
        seed[2] = seedPoints[i].z;
        filter->AddSeed(seed);
    }
    filter->SetNumberOfIterations(numberOfIterations_.get());
    filter->SetReplaceValue(replaceValue_.getValue<T>());
    filter->SetMultiplier(multiplier_.get());
    filter->SetInitialNeighborhoodRadius(initialNeighborhoodRadius_.get());


    observe(filter.GetPointer());

    try
    {
        filter->Update();

    }
    catch (itk::ExceptionObject &e)
    {
        LERROR(e);
    }


    Volume* outputVolume1 = 0;
    outputVolume1 = ITKToVoreenCopy<T>(filter->GetOutput());

    if (outputVolume1) {
        transferRWM(inport1_.getData(), outputVolume1);
        transferTransformation(inport1_.getData(), outputVolume1);
        outport1_.setData(outputVolume1);
    } else
        outport1_.setData(0);



}