// ------------------------------------------------------------------------
void FlipImage(const LabelType::Pointer &input, LabelType::Pointer &output)
{
    if(!output) output = LabelType::New();

    ImageType::DirectionType outputDirection = input->GetDirection();

    typedef itk::PermuteAxesImageFilter<LabelType> FlipperType;
    FlipperType::PermuteOrderArrayType axes;
    axes[0] = 1;
    axes[1] = 0;
    axes[2] = 2;

    FlipperType::Pointer flipper = FlipperType::New();
    flipper->SetInput(input);
    flipper->SetOrder(axes);
    flipper->Update();

    output = flipper->GetOutput();
    output->SetDirection(outputDirection);

}