Example #1
0
        public override async IAsyncEnumerable <AlgorithmResultElement> AddWatermark([EnumeratorCancellation] CancellationToken ct)
        {
            complexImage     = ComplexImage.FromBitmap(parameters.Original);
            complexWatermark = ComplexImage.FromBitmap(parameters.Watermark, complexImage.Width);

            ct.ThrowIfCancellationRequested();

            complexImage.ForwardFourierTransform();
            var fourierDomain = complexImage.ToEffectiveBitmapFourier();

            yield return(new AlgorithmResultElement("Fourier domain (DFT)", fourierDomain.ToBitmap(parameters.Original.Size), new ResultDescription(ToString())));

            ct.ThrowIfCancellationRequested();

            complexWatermark.ForwardFourierTransform();
            complexImage.EmbedImageFourier(complexWatermark, parameters.Key, parameters.Alpha);
            var fourierDomainWatermarked = complexImage.ToEffectiveBitmapFourier();

            yield return(new AlgorithmResultElement("DFT + watermark", fourierDomainWatermarked.ToBitmap(parameters.Original.Size), new ResultDescription(ToString())));

            ct.ThrowIfCancellationRequested();

            complexImage.BackwardFourierTransform();
            var watermarked = complexImage.ToEffectiveBitmapFourier();

            yield return(new AlgorithmResultElement("Watermarked", watermarked.ToBitmap(parameters.Original.Size), new ResultDescription(ToString())));
        }