/// <summary>
        /// Constructs a quantum circuit representing an image for a specific color channel.
        /// </summary>
        /// <param name="inputTexture">The texture from which a circuit is constructed</param>
        /// <param name="useLog">If logarithmic encoding should be used for the picture</param>
        /// <param name="colorChannel">The color channel (of the texture) which will be used to generate the image</param>
        /// <returns></returns>
        public QuantumCircuit GetCircuit(Texture2D inputTexture, bool useLog = false, ColorChannel colorChannel = ColorChannel.R)
        {
            //TODO optimize to get 3 channels directly
            double[,] imageData;

            switch (colorChannel)
            {
            case ColorChannel.R:
                imageData = QuantumImageHelper.GetRedHeightArray(inputTexture);
                break;

            case ColorChannel.G:
                imageData = QuantumImageHelper.GetGreenHeightArray(inputTexture);
                break;

            case ColorChannel.B:
                imageData = QuantumImageHelper.GetBlueHeightArray(inputTexture);
                break;

            case ColorChannel.A:
                imageData = QuantumImageHelper.GetAlphaHeightArray(inputTexture);
                break;

            default:
                imageData = QuantumImageHelper.GetGreyHeighArray(inputTexture);
                break;
            }

            return(GetCircuit(imageData, useLog));
        }
        /// <summary>
        /// Directly creates a blured image out of the greyscale input texture using the quantum blur algorithm.
        /// The blur is done via rotating qubits (in radian). Supports logarithmic encoding.
        /// </summary>
        /// <param name="inputTexture">The image on which the blur should be applied.</param>
        /// <param name="rotation">The rotation which should be applied in radian.</param>
        /// <param name="useLog">If logarithmic encoding (and decoding) should be used</param>
        /// <param name="useDifferentDecoding">If the decoding used should be not the same as the encoding (for example if you only want to sue logarithmic decoding)</param>
        /// <param name="doFast">If the (most of the time) faster creation of color image should be used.</param>
        /// <returns></returns>
        public Texture2D CreateBlurTextureColor(Texture2D inputTexture, float rotation, bool useLog = false, bool useDifferentDecoding = false, bool doFast = false)
        {
            Texture2D OutputTexture;

            double[,] imageData = QuantumImageHelper.GetRedHeightArray(inputTexture);
            QuantumCircuit redCircuit = getBlurCircuitFromData(imageData, rotation, useLog);

            QuantumImageHelper.FillGreenHeighArray(inputTexture, imageData);
            QuantumCircuit greenCircuit = getBlurCircuitFromData(imageData, rotation, useLog);

            QuantumImageHelper.FillBlueHeighArray(inputTexture, imageData);
            QuantumCircuit blueCircuit = getBlurCircuitFromData(imageData, rotation, useLog);

            if (useDifferentDecoding)
            {
                useLog = !useLog;
            }

            if (doFast)
            {
                OutputTexture = GetColoreTextureFast(redCircuit, greenCircuit, blueCircuit, useLog);
            }
            else
            {
                OutputTexture = GetColoreTexture(redCircuit, greenCircuit, blueCircuit, useLog);
            }

            return(OutputTexture);
        }