///<summary>Выполняет стилизацию. Метод выполняется в потоке Stylizer.</summary>
        private void Stylize()
        {
            var content = IOConverters.ImageToTensor(this.ContentImage.Image as Bitmap);
            var style   = IOConverters.ImageToTensor(this.StyleImage.Image as Bitmap);
            var Result  = StyleTransfer.Stylize(this.encoder1,
                                                this.decoder1,
                                                this.encoder2,
                                                this.decoder2,
                                                this.encoder3,
                                                this.decoder3,
                                                this.encoder4,
                                                this.decoder4,
                                                this.encoder5,
                                                this.decoder5,
                                                content,
                                                style);

            this.ResultImage.Image           = IOConverters.TensorToImage(Result);
            this.Stylized                    = true;
            this.Progress.Value              = 0;
            this.GenerateOrSaveResult.Text   = "Сохранить";
            this.GenerateOrSaveResult.Click -= this.StopProcess;
            this.GenerateOrSaveResult.Click += this.SaveResult;
            this.OpenContent.Enabled         = true;
            this.OpenStyle.Enabled           = true;
        }
        ///<summary>Выполняет стилизацию. Метод выполняется в потоке Stylizer.</summary>
        private void Stylize()
        {
            var content = IOConverters.ImageToTensor(this.ContentImage.Image as Bitmap);
            var Result  = transformer.Stylize(content);

            this.ResultImage.Image           = IOConverters.TensorToImage(Result);
            this.Progress.Value              = 0;
            this.GenerateOrSaveResult.Text   = "Сохранить";
            this.GenerateOrSaveResult.Click -= this.StopProcess;
            this.GenerateOrSaveResult.Click += this.SaveResult;
            this.OpenContent.Enabled         = true;
            this.SelectStyle.Enabled         = true;
        }
예제 #3
0
        ///<summary>Открывает файловый диалог и устанавливает выбранное контентное изображение. Обработчик события.</summary>
        public void OpenContentHandler(object sender, EventArgs E)
        {
            var OFD = new OpenFileDialog();

            OFD.Title  = "Открыть контентное изображение";
            OFD.Filter = "Изображения (*.bmp; *.emf; *.exif; *.gif; *.ico; *.jpg; *.png; *.tiff; *.wmf)|*.bmp; *.emf; *.exif; *.gif; *.ico; *.jpg; *.png; *.tiff; *.wmf|Все файлы|*.*";
            if (OFD.ShowDialog() == DialogResult.OK)
            {
                this.ContentImageBox.Image = new Bitmap(OFD.FileName);
                Program.Content            = IOConverters.ImageToTensor(this.ContentImageBox.Image as Bitmap);
                Program.X = Program.Content.Clone();
                this.ResultImageBox.Image = IOConverters.TensorToImage(Program.X);
            }
        }
예제 #4
0
        ///<summary>Открывает файловый диалог и устанавливает выбранное контентное изображение. Обработчик события.</summary>
        public void OpenContentHandler(object sender, EventArgs E)
        {
            var OFD = new OpenFileDialog();

            OFD.Title  = "Открыть контентное изображение";
            OFD.Filter = "Изображения (*.bmp; *.emf; *.exif; *.gif; *.ico; *.jpg; *.png; *.tiff; *.wmf)|*.bmp; *.emf; *.exif; *.gif; *.ico; *.jpg; *.png; *.tiff; *.wmf|Все файлы|*.*";
            if (OFD.ShowDialog() == DialogResult.OK)
            {
                this.ContentImageBox.Image = new Bitmap(OFD.FileName);
                Program.Content            = IOConverters.ImageToTensor(new Bitmap(this.ContentImageBox.Image, GetSize(this.ContentSizes.SelectedIndex)));
                Program.X = Tensor.Mix(Tensor.Noise(Program.Content.Width, Program.Content.Height, 3, -128, 128), Program.Content, 0.2f);
                this.ResultImageBox.Image = IOConverters.TensorToImage(Program.X);
            }
        }
예제 #5
0
 ///<summary>Инициализирует главную форму приложения. Конструктор.</summary>
 public MainForm() : base()
 {
     this.Initialize();
     this.ContentImageBox.Image = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Content.jpg"));
     this.StyleImageBox.Image   = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Style.jpg"));
     Program.Net = new VGG16(Assembly.GetExecutingAssembly().GetManifestResourceStream("Net.HModel"));
     Program.Net.OnIterationDone += this.FixIteration;
     Program.Style             = IOConverters.ImageToTensor(new Bitmap(StyleImageBox.Image, ContentImageBox.Image.Size));
     Program.Content           = IOConverters.ImageToTensor(ContentImageBox.Image as Bitmap);
     Program.X                 = Program.Content.Clone();
     this.ResultImageBox.Image = IOConverters.TensorToImage(Program.X);
     this.StartProcess.Click  += this.StartProcessHandler;
     this.OpenContent.Click   += this.OpenContentHandler;
     this.OpenStyle.Click     += this.OpenStyleHandler;
     this.StopProcess.Click   += this.StopProcessHandler;
     this.Closing             += this.ClosingHandler;
     this.SaveResult.Click    += this.SaveResultHandler;
 }
예제 #6
0
 ///<summary>Инициализирует главную форму приложения. Конструктор.</summary>
 public MainForm() : base()
 {
     this.Initialize();
     this.ContentImageBox.Image = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Content.jpg"));
     this.StyleImageBox.Image   = new Bitmap(Assembly.GetExecutingAssembly().GetManifestResourceStream("Style.jpg"));
     Program.Net               = new VGG16(Assembly.GetExecutingAssembly().GetManifestResourceStream("Net.Model"));
     Program.Style             = IOConverters.ImageToTensor(new Bitmap(StyleImageBox.Image, GetSize(this.StyleSizes.SelectedIndex)));
     Program.Content           = IOConverters.ImageToTensor(new Bitmap(ContentImageBox.Image, GetSize(this.ContentSizes.SelectedIndex)));
     Program.X                 = Tensor.Mix(Tensor.Noise(Program.Content.Width, Program.Content.Height, 3, -128, 128), Program.Content, 0.2f);
     this.ResultImageBox.Image = IOConverters.TensorToImage(Program.X);
     this.StartProcess.Click  += this.StartProcessHandler;
     this.OpenContent.Click   += this.OpenContentHandler;
     this.OpenStyle.Click     += this.OpenStyleHandler;
     this.StopProcess.Click   += this.StopProcessHandler;
     this.Closing             += this.ClosingHandler;
     this.SaveResult.Click    += this.SaveResultHandler;
     this.ContentSizes.SelectedIndexChanged += this.ContentSizesHandler;
     this.StyleSizes.SelectedIndexChanged   += this.StyleSizesHandler;
 }
        ///<summary>Выполняет стилизацию. Метод выполняется в потоке Stylizer.</summary>
        private void Stylize()
        {
            var content          = IOConverters.ImageToTensor(this.ContentImage.Image as Bitmap);
            var style            = IOConverters.ImageToTensor(this.StyleImage.Image as Bitmap);
            var content_features = encoder.Encode(content);
            var style_features   = encoder.Encode(style);
            var Total            = Layers.AdaIN(content_features, style_features);
            var Decoded          = decoder.Decode(Total);

            this.ResultImage.Image           = IOConverters.TensorToImage(Decoded);
            this.Stylized                    = true;
            this.Progress.Value              = 0;
            this.TotalProgress               = 0f;
            this.GenerateOrSaveResult.Text   = "Сохранить";
            this.GenerateOrSaveResult.Click -= this.StopProcess;
            this.GenerateOrSaveResult.Click += this.SaveResult;
            this.OpenContent.Enabled         = true;
            this.OpenStyle.Enabled           = true;
        }
예제 #8
0
 ///<summary>Выполняет фиксацию итерации. Обработчик события.</summary>
 ///<param name="iter">Итерация.</param>
 ///<param name="loss">Ошибка.</param>
 public void FixIteration(int iter, float loss)
 {
     this.Iteration.Text       = "Iteration: " + (iter + 1).ToString() + "; Time: " + (DateTime.Now - Program.DT).TotalSeconds.ToString();
     this.ResultImageBox.Image = IOConverters.TensorToImage(Program.X);
     Program.DT = DateTime.Now;
 }
예제 #9
0
 ///<summary>Изменяет внутренние параметры приложения в зависимости от установленного разрешения стиля. Обработчик события.</summary>
 public void StyleSizesHandler(object sender, EventArgs E)
 {
     Program.Style = IOConverters.ImageToTensor(new Bitmap(StyleImageBox.Image, GetSize(this.StyleSizes.SelectedIndex)));
 }
예제 #10
0
 ///<summary>Изменяет внутренние параметры приложения в зависимости от установленного разрешения контента. Обработчик события.</summary>
 public void ContentSizesHandler(object sender, EventArgs E)
 {
     Program.Style   = IOConverters.ImageToTensor(new Bitmap(StyleImageBox.Image, GetSize(this.StyleSizes.SelectedIndex)));
     Program.Content = IOConverters.ImageToTensor(new Bitmap(ContentImageBox.Image, GetSize(this.ContentSizes.SelectedIndex)));
     Program.X       = Tensor.Mix(Tensor.Noise(Program.Content.Width, Program.Content.Height, 3, -128, 128), Program.Content, 0.2f);
 }