Grundkonzept der Computer Vision

Lernprogramm – Computer Vision mit C# und AForge Imaging

Dieses Tutorial zeigt, wie Computer oder Maschinen ein Bild visualisieren. In diesem Algorithmus haben die Entwickler die Programmiersprache C# und die AForge Imaging-Plattform. Das Programm ermöglicht es dem Benutzer zu visualisieren, wie ein Computer/eine Maschine ein Muster unter Verwendung des Konzepts der Binarisierung finden oder bestimmen könnte.
Speichern.png

Verständnis des Computer Vision-Konzepts

Flussdiagramm.JPG
Das Konzept zeigt, wie ein Computer/eine Maschine ein Bild visualisiert, wenn es binarisiert ist. Der Prozess von Binarisierung bedeutet, dass die nur Gegenwartswerte sind 1 und 0. Visuell sprechend in einem Bild sollte es nur geben Schwarz oder Weiß. Aber bevor Sie ein Bild binarisieren können, sollten Sie das Konzept von anwenden Graustufen wobei das Konzept von RGB aufgehoben wird, wodurch dieselben Werte für Rot, Grün und Blau verwendet werden, wodurch der Effekt entsteht, dass das Bild unterschiedliche Grauschattierungen aufweist.
Prozess.JPG

Richtiger Code – Image Processor.cs

Schließlich zeigt dieser Teil, wie der Algorithmus für die Benutzer funktioniert, um das Binärisierungskonzept zu visualisieren.
Laden Sie Designer.cs hier herunter: ImageProcessor.Designer.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;

using AForge;
using AForge.Imaging;
using AForge.Imaging.Filters;

namespace ImageProcessor
{
    public partial class ImageProcessor : Form
    {
        public ImageProcessor()
        {
            InitializeComponent();
            this.Text = "Image Processor v" + Assembly.GetEntryAssembly().GetName().Version; 
        }

        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            try
            {
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    pictureBox1.Image = (Bitmap)Bitmap.FromFile(openFileDialog1.FileName);
                    LogAction("Successfully Opened an Image!");
                }
            }
            catch (Exception ex)
            { throw ex; }
        }

        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void checkBox1_CheckedChanged(object sender, EventArgs e)
        {
            Bitmap image = (Bitmap)pictureBox1.Image;
            image = AForge.Imaging.Image.Clone(image, PixelFormat.Format24bppRgb);
            if (checkBox1.Checked)
            {
                Grayscale filter = new Grayscale(0.2125, 0.7154, 0.0721);
                image = filter.Apply(image);
                pictureBox2.Image = image;
                LogAction("Grayscaling was successfully applied!");
                ActivateButtons(checkBox1.Checked);
            }
            else
            {
                pictureBox2.Image = image;
                LogAction("Grayscaling was successfully reversed!");
                ActivateButtons(checkBox1.Checked);
            }
        }

        private void trackBar1_Scroll(object sender, EventArgs e)
        {
            try
            {
                label1.Text = "Threshold Level: " + trackBar1.Value;
                Bitmap image = (Bitmap)pictureBox1.Image;
                image = AForge.Imaging.Image.Clone(image, PixelFormat.Format24bppRgb);
                if (checkBox1.Checked)
                {
                    Grayscale grayfilter = new Grayscale(0.2125, 0.7154, 0.0721);
                    Threshold filter = new Threshold(trackBar1.Value);
                    image = grayfilter.Apply(image);
                    image = filter.Apply(image);
                    LogAction("Successfully applied Threshold Level: " + trackBar1.Value);
                }
                pictureBox2.Image = image;
            }
            catch (Exception ex) { throw ex; }
        }

        private void button1_Click(object sender, EventArgs e)
        {
            WaitCallback del = delegate
            {
                Invoke(new Action(() =>
                {
                    try
                    {
                        Bitmap image = (Bitmap)pictureBox2.Image;
                        image = AForge.Imaging.Image.Clone(image, PixelFormat.Format24bppRgb);
                        if (checkBox1.Checked)
                        {
                            Erosion filter = new Erosion();
                            filter.ApplyInPlace(image);
                            LogAction("Erosion was successfully applied!");
                        }
                        pictureBox2.Image = image;
                    }
                    catch (Exception ex) { throw ex; }
                }));
            };
            ThreadPool.QueueUserWorkItem(del);
        }

        private void button2_Click(object sender, EventArgs e)
        {
            WaitCallback del = delegate
            {
                Invoke(new Action(() =>
                {
                    try
                    {

                        Bitmap image = (Bitmap)pictureBox2.Image;
                        image = AForge.Imaging.Image.Clone(image, PixelFormat.Format24bppRgb);
                        if (checkBox1.Checked)
                        {
                            Dilatation filter = new Dilatation();
                            filter.ApplyInPlace(image);
                            LogAction("Dilatation was successfully applied!");
                        }
                        pictureBox2.Image = image;

                    }
                    catch (Exception ex) { throw ex; }
                }));
            };
            ThreadPool.QueueUserWorkItem(del);
        }

        private void ActivateButtons(bool Activation)
        {
            try
            {
                button1.Enabled = Activation;
                button2.Enabled = Activation;
                trackBar1.Enabled = Activation;
            }
            catch (Exception ex) { throw ex; }
        }

        private void LogAction(string Log)
        {
            try
            {
                richTextBox1.AppendText(DateTime.Now.ToString("MM/dd/yyyy - hh:mm:ss") + " " + Log);
                richTextBox1.AppendText(Environment.NewLine);
                richTextBox1.SelectionStart = richTextBox1.Text.Length;
                richTextBox1.ScrollToCaret();
            }
            catch (Exception ex) { throw ex; }
        }
    }
}

Betrieb des Bildprozessors

Wie man das Image Processor Project betreibt

  • Gehen Sie zu Datei > Öffnen > und suchen Sie eine unterstützte Bilddatei.
  • Aktivieren Sie das Graustufen-Overlay.
  • Wenden Sie die Binarisierung auf einen bestimmten Schwellenwert an (bis das/die Ziel(e) gesehen werden).
  • Verwenden Sie Erosion oder Dilatation für weitere Exposition.

Anwendung herunterladen: Bildprozessor

Similar Posts

Leave a Reply

Your email address will not be published.